【问题标题】:Shader not working on ThreeJS Upgrade - 'viewMartrix: redefinition着色器无法用于 ThreeJS 升级 - 'viewMartrix: 重新定义
【发布时间】:2021-07-27 08:01:15
【问题描述】:
似乎当您升级 Three.js 时,它抱怨 viewMatrix 和 camera 的重新定义
#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;
我想知道为什么会发生这种情况以及如何解决它?
让made a codepen 显示问题
【问题讨论】:
标签:
graphics
three.js
glsl
【解决方案1】:
这是因为在使用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 以避免重新定义,或者您可以改为use a RawShaderMaterial。但是,请记住,它的工作原理与 ShaderMaterial 类似,只是内置制服和属性的定义不会自动添加到 GLSL 着色器代码之前。所以你可能必须自己添加它们。