在做了一些“常规”WebGL 之后,我开始使用 ThreeJS 的 WebGL 渲染器,没有额外的库 + GLSL 着色器。我现在正在尝试在我的 ThreeJS 程序中编写自定义着色器,我注意到 ThreeJS 处理了很多标准的东西,例如投影和模型/视图矩阵。我的简单顶点着色器现在看起来像这样:
// All of these seem to be predefined:
// vec3 position;
// mat4 projectionMatrix;
// mat4 modelViewMatrix;
// mat3 normalMatrix;
// vec3 normal;
// I added this
varying vec3 vNormal;
void main() {
vNormal = normalMatrix * vec3(normal);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
我的问题是:哪些其他变量(我假设它们是统一的)是为我可以使用的顶点和片段着色器预定义的?例如,ThreeJS 是否可以帮助处理光矢量/光色(当然假设我已经在我的 ThreeJS 场景中添加了一个或多个灯光)?
更新(2014 年 10 月 9 日):这个问题已经获得了相当多的浏览量,用户 Killah 提到现有的答案不再导致当前版本的 three.js 的解决方案。我添加并接受了我自己的答案,见下文。