我正在玩WebGL,我划掉了一个简单的平面阴影立方体。 我有一个着色器,它采用投影矩阵,视图模型矩阵和普通矩阵,没有什么花哨的:
(...)
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vTextureCoord = aTextureCoord;
vec3 transformedNormal = uNMatrix * aVertexNormal;
float directionalLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);
vLightWeighting = uAmbientColor + uDirectionalColor * directionalLightWeighting;
}
一切都很好,平面阴影看起来不错,但是一旦我调整立方体大小(下面标记为mat4.scale),阴影就不再影响场景了。如果我通过反向因子缩小计算的正常矩阵,它再次起作用。
代码遵循以下模式(绘制伪例程):
projection = mat4.ortho
// set up general camera view
view = mat4.lookAt
// set up cube position / scaling / rotation on view matrix
mat4.translate(view)
mat4.scale(view) // remove for nice shading ..
mat4.rotate(view)
// normalFromMat4 returns upper-left 3x3 inverse transpose
normal = mat4.normalFromMat4 ( view )
pass projection, view, normal to shader
gl.drawElements
我使用gl-matrix作为数学库。 我的错误在哪里?