Java 与视图矩阵相乘不会影响OpenGL ES 2.0/3.0中的结果值

Java 与视图矩阵相乘不会影响OpenGL ES 2.0/3.0中的结果值,java,android,opengl-es,shader,matrix-multiplication,Java,Android,Opengl Es,Shader,Matrix Multiplication,为了获得恒定的平行光,我将视图矩阵乘以灯光方向向量: #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 modelV

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

#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);
    ...
}
但扩散因子值与使用时相同:

vec3 lightVector = -lightDirection;
换句话说,结果是同样糟糕的情况

问题:有人能提出为什么视图矩阵的乘法不会影响结果值扩散因子吗

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

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());
我还使用以下方法检查了视图矩阵的正确性:

gl_Position = u_pMatrix * u_vMatrix * u_mMatrix * a_position;
这很好用

提前谢谢

视图矩阵

Matrix.setLookAtM(viewMatrix,0,0f,0f,4f,0.0f,0f,0f,1.0f,0.0f)
不影响查看方向,因为视图矩阵的左上角3x3是最新的

因此采取了行动

vec3-lightVector=-(mat3(u_-vMatrix)*lightDirection);
将向量
lightDirection
乘以单位矩阵,并且根本不改变向量

使用不同的视角,查看视图矩阵的效果。例如:

Matrix.setLookAtM(视图矩阵,0f,0f,2.8f,2.8f,0.0f,0f,0f,0f,0f,1.0f,0.0f)