【问题标题】:gl_ModelViewMatrixInverseTranspose in threejs三个js中的gl_ModelViewMatrixInverseTranspose
【发布时间】:2026-01-02 06:15:02
【问题描述】:

在我尝试编写自己的自定义着色器(我使用的是THREE.ShaderMaterial)时,我需要设置其WebGL 的内置gl_ModelViewMatrixInverseTranspose 统一(如http://mew.cx/glsl_quickref.pdf 所示)。我注意到一些制服已经自动传递给着色器,例如gl_ModelViewMatrixgl_ProjectionMatrix 已经分别由threejs 的modelViewMatrixprojectionMatrix 计算。另一方面,gl_ModelViewProjectionMatrix 似乎不见了,但我注意到一些示例,可以在着色器中轻松地将其计算为projectionMatrix * modelViewMatrix。所以我的问题是:我是要在我的着色器中从modelViewMatrix 开始手动计算gl_ModelViewMatrixInverseTranspose(如果是,怎么做?)还是有一个unform(可能在我对THREE.ShaderMaterial 的定义中与THREE.UniformsUtils.merge 合并)已经处理了吗?干杯。

【问题讨论】:

  • WebGL 没有 gl_ModelViewMatrixInverseTranspose 或任何其他默认矩阵。这是一个旧的已弃用 OpenGL 的东西。

标签: matrix three.js webgl shader


【解决方案1】:

在 Three.js 着色器中,modelViewMatrix 的逆转置称为normalMatrix

它会自动传递到着色器中,因此您无需进行任何工作即可获取它。

// = inverse transpose of modelViewMatrix
uniform mat3 normalMatrix;

参考here是 Three.js 内置的统一和属性。

【讨论】:

  • 准确地说,3x3 normalMatrix是4x4 modelViewMatrix的上3x3子矩阵的逆转置