首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图矩阵的乘法不影响OpenGL es2.0/3.0中的结果值

视图矩阵的乘法不影响OpenGL es2.0/3.0中的结果值
EN

Stack Overflow用户
提问于 2020-05-25 10:37:29
回答 1查看 44关注 0票数 1

为了获得恒定的方向光,我将视图矩阵乘以光方向矢量:

代码语言:javascript
复制
#version 300 es
uniform mat4 u_mvMatrix; // model-view matrix
uniform mat4 u_vMatrix; // view matrix
in vec4 a_position;
in vec3 a_normal;
const vec3 lightDirection = vec3(-1.9, 0.0, -5.0);
...
void main() {
    vec3 modelViewNormal = vec3(u_mvMatrix * vec4(a_normal, 0.0));
    vec3 lightVector = -(mat3(u_vMatrix) * lightDirection);
    float diffuseFactor = max(dot(modelViewNormal, lightVector), 0.0);
    ...
}

但是,diffuseFactor值与使用时相同:

代码语言:javascript
复制
vec3 lightVector = -lightDirection;

换句话说,这也是最糟糕的情况。

问题:,谁能建议为什么视图矩阵的乘法不影响结果值diffuseFactor?

注意:视图矩阵是使用以下方法创建的:

代码语言:javascript
复制
Matrix.setLookAtM(viewMatrix, rmOffset:0, eyeX:0f, eyeY:0f, eyeZ:0f,
        centerX:0f, centerY:0f, centerZ:-4f, upX:0f, upY:1f, upZ:0f)
fun getVMatrixAsFloatBuffer(): FloatBuffer = Buffers.floatBuffer(viewMatrix)
GLES20.glUniformMatrix4fv(vMatrixLink, 1, false, view.getVMatrixAsFloatBuffer());

我还使用以下方法检查视图矩阵的正确性:

代码语言:javascript
复制
gl_Position = u_pMatrix * u_vMatrix * u_mMatrix * a_position;

这很好用。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 11:00:11

视图矩阵

Matrix.setLookAtM(viewMatrix,0,0f,0f,4f,0.0f,0f,0f,0f,1.0f,0.0f)

不影响查看指导,因为视图矩阵的左上角3x3是单位矩阵

所以手术

vec3 lightVector = -(mat3(u_vMatrix) * lightDirection);

将向量lightDirection乘以恒等矩阵,完全不改变向量。

使用不同的观点,来看视图矩阵的效果。例如:

代码语言:javascript
复制
Matrix.setLookAtM(viewMatrix, 0f, 0f, 2.8f, 2.8f, 0.0f, 0f, 0f, 0f, 1.0f, 0.0f)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62000683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档