2

我正在创建一个球体并为其添加失真,这工作正常。当我看线框时,它是这样的

线框

并且随着线框的转动,它看起来像这样

坚硬的

如您所见,当线框关闭时,没有阴影并且变形不可见。

我正在寻找的是在我的自定义 fragmentShader 中放置什么。

我用这个

        // calc the dot product and clamp
        // 0 -> 1 rather than -1 -> 1
        vec3 light = vec3(0.5,0.2,1.0);

        // ensure it's normalized
        light = normalize(light);

        // calculate the dot product of
        // the light to the vertex normal
        float dProd = max(0.0, dot(vNormal, light));

        // feed into our frag colour
        gl_FragColor = vec4(dProd, dProd, dProd, 1.0);

但这只会造成非常难看的假光。有什么想法吗?

提前致谢, Wezy

4

1 回答 1

1

如果你想使用 Three.js 的灯光(我想不出为什么不这样做的原因),你需要包含相应的着色器块:

  1. 看看 WebGLRenderer 如何在 THREE.ShaderLib 中组合它的着色器
  2. 在那里选择一种接近您想要的材质并将其定义(制服和两个着色器代码)复制到您的代码中,将其重命名为自定义
  3. 删除不需要的块,并将自定义代码添加到适当的位置
于 2013-01-31T07:45:16.720 回答