似乎在升级Three.js时,它抱怨viewMatrix
和camera
的redfinition
#define MAX_DIR_LIGHTS 0
#define MAX_POINT_LIGHTS 0
#define MAX_SPOT_LIGHTS 0
#define MAX_HEMI_LIGHTS 0
#define MAX_SHADOWS 0
uniform mat4 viewMatrix;
uniform vec3 cameraPosition;
uniform vec3 diffuse;
uniform float opacity;
我想知道为什么会发生这种情况,以及如何解决?
已经制作了一个代码笔来显示问题
之所以会出现这种情况,是因为在使用ShaderMaterial
时,渲染器会向着色器附加几个标准定义。以下是前8行:
precision highp float;
precision highp int;
#define HIGH_PRECISION
#define SHADER_NAME ShaderMaterial
#define GAMMA_FACTOR 2
uniform mat4 viewMatrix;
uniform vec3 cameraPosition;
uniform bool isOrthographic;
然后,当你添加自己的制服时,你正试图重新定义它们:
uniform mat4 viewMatrix;
uniform vec3 cameraPosition;
uniform vec3 diffuse;
uniform float opacity;
这就是导致错误的原因。
您可以去掉重复的uniforms
,以避免重新定义,也可以使用RawShaderMaterial
。但是,请记住,它的工作原理与ShaderMaterial类似,只是内置统一体和属性的定义不会自动添加到GLSL着色器代码中。所以你可能需要自己添加它们。