【问题标题】:THREE.js ImmediateRenderObject: Coplanar Triangles get different shading?THREE.js ImmediateRenderObject:共面三角形获得不同的阴影?
【发布时间】:2012-07-02 19:36:30
【问题描述】:

我是一名计算机图形学初学者(已经学习了 1 个学期的 CG 基础知识)。

关于在 THREE.js 中使用 ImmediateRenderObject 进行着色(平坦和平滑)的一个问题:

为什么在平面和平滑阴影中,共面三角形的阴影不同?正如您在下图中看到的那样,三角形具有正确的面法线(即,完全相同,垂直于三角形所在的平面,它们是下图中的蓝色)。顶点法线看起来也是正确的(即,除了位于非常边界的顶点的顶点法线,下图中的红色法线外,也垂直于平面)。

我有一个菱形几何体(作为 ImmediateRenderObject),我从它的底部减去一个 CubeGeometry(使用 THREE.CSG)。

在 CSG 操作之前和之后,共面三角形得到不同的阴影,虽然面法线似乎完全正确(顶点法线在钻石的锐边似乎并不完全正确,但这不应该影响顶部和不同侧面的共面部分)。

知道为什么会发生这种情况以及我可以做些什么来获得正确的阴影?非常感谢任何帮助!

提前致谢! :)

图片如下:

带有平面阴影的完整钻石:http://i.stack.imgur.com/kWt6J.png

平底纹切割钻石顶部:http://i.stack.imgur.com/0OJZv.png

【问题讨论】:

    标签: geometry three.js


    【解决方案1】:

    为感兴趣的人找到了我的问题的解决方案:

    当使用 ImmediateRenderObject 时,我已经用顶点法线填充了法线数组。现在,我用面法线填充它们,使其全部变平。但是,使用此解决方案似乎不支持平滑着色。但它解决了我的问题!

    祝你好运! :)

    【讨论】:

      【解决方案2】:

      如果它们的光照不同是因为它们不在同一个平面上。在渲染时,一个四边形会分成两个三角形,如果这两个三角形不在同一个平面上,它们的光照就会不同。

      【讨论】:

      • 但是正如你在图片上看到的,它们在同一个平面上并且具有完全相同的面法线。所以似乎顶点法线而不是面法线存在问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多