制服实际上是在THREE.js RawShaderMaterial中定义的吗?

时间:2015-11-16 08:29:26

标签: javascript three.js

THREE.Js RawShaderMaterial的documentation说:

  

内置制服和属性不会自动添加到GLSL着色器代码中。

但是,实际上我可以使用rawShaderMaterial运行以下着色器:

    <script type="x-shader/x-vertex" id="vertexShader">                                                                                                                                                                             
     precision mediump float;                                                                                                                                                                                                       
     precision mediump int;                                                                                                                                                                                                         

     uniform mat4 modelViewMatrix;                                                                                                                                                                                                  
     uniform mat4 projectionMatrix;                                                                                                                                                                                                 

     attribute vec3 position;                                                                                                                                                                                                       
     attribute vec4 color;                                                                                                                                                                                                          

     varying vec3 vPosition;                                                                                                                                                                                                        
     varying vec4 vColor;                                                                                                                                                                                                           


      void main() {                                                                                                                                                                                                                 
        vPosition = position;                                                                                                                                                                                                       
        vColor = color;                                                                                                                                                                                                             

        gl_Position = projectionMatrix *                                                                                                                                                                                            
                      modelViewMatrix *                                                                                                                                                                                             
                      vec4(position.x, position.y, position.z, 1.0);                                                                                                                                                                
        } 

无需在任何地方定义modelViewMatrixprojectionMatrix。毕竟是否有些制服传递给rawshader材料?

1 个答案:

答案 0 :(得分:1)

是,

uniform mat4 modelViewMatrix;                                                                                                                                                                                                  
uniform mat4 projectionMatrix;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat3 normalMatrix;
uniform vec3 cameraPosition;
使用RawShaderMaterial时可以使用

,但是如果要使用它们,则必须在着色器中声明它们。它们不会自动加上前缀。

three.js r.73