THREE.js ImmediateRenderObject:共面三角形有不同的阴影?

时间:2012-07-02 11:32:12

标签: geometry three.js

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

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

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

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

在CSG操作之前和之后,共面三角形都会得到不同的阴影,尽管面法线看起来完全正确(顶点法线在钻石的锋利边缘似乎不完全正确,但这不应影响顶部和不同侧面的共面部分。)

有些想法为什么会发生这种情况以及我能做些什么来获得正确的阴影?我真的很感激任何帮助!

提前致谢! :)

以下是图片:

使用平面阴影完成钻石:http://i.stack.imgur.com/kWt6J.png

带有平面阴影的切割钻石顶部:http://i.stack.imgur.com/0OJZv.png

2 个答案:

答案 0 :(得分:1)

为您感兴趣的人找到解决问题的方法:

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

祝你好运! :)

答案 1 :(得分:0)

如果它们被点亮不同是因为它们不是完全在同一个平面上。四边形在渲染时被分成两个三角形,如果这两个三角形不在同一个平面上,它们会以不同的方式点亮。