着色器无法在 ThreeJS 升级上工作 - 'viewMartrix:重新定义



似乎在升级Three.js时,它抱怨viewMatrixcamera的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着色器代码中。所以你可能需要自己添加它们。

相关内容

  • 没有找到相关文章

最新更新