0

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

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

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

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

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

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

提前致谢!:)

以下是图片:

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

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

4

2 回答 2

1

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

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

祝你好运!:)

于 2012-07-03T13:12:49.570 回答
0

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

于 2012-07-03T11:09:34.220 回答