在使用过无添加库和GLSL着色器的“常规”WebGL之后,我开始尝试使用ThreeJS的WebGL渲染器。现在我正在尝试在我的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中不再导致解决方案。我添加并接受了自己的答案,请参见下文。
var glVertexShader = new THREE.WebGLShader( _gl, _gl.VERTEX_SHADER, prefix_vertex + vertexShader );
但我不确定我们何时需要使用它们。 - Startec