着色器无法在 ThreeJS 升级上工作 - 'viewMartrix:重新定义
Shader not working on ThreeJS Upgrade - 'viewMartrix: redefinition
似乎在您升级 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 显示问题
这是因为在使用 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 着色器代码之前。所以你可能需要自己添加它们。
似乎在您升级 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 显示问题
这是因为在使用 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 着色器代码之前。所以你可能需要自己添加它们。