【问题标题】:Shader not working on ThreeJS Upgrade - 'viewMartrix: redefinition着色器无法用于 ThreeJS 升级 - 'viewMartrix: 重新定义
【发布时间】:2021-07-27 08:01:15
【问题描述】:

似乎当您升级 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 显示问题

【问题讨论】:

    标签: 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 着色器代码之前。所以你可能必须自己添加它们。

    【讨论】:

    • 谢谢!我删除了它,似乎它继续工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2012-10-27
    • 2015-09-27
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多