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

Shader not working on ThreeJS Upgrade - 'viewMartrix: redefinition

似乎在您升级 Three.js 时它抱怨 viewMatrixcamera

的重新定义
  #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 着色器代码之前。所以你可能需要自己添加它们。