Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry THREE.js ImmediateRenderObject:共面三角形具有不同的着色?_Geometry_Three.js - Fatal编程技术网

Geometry THREE.js ImmediateRenderObject:共面三角形具有不同的着色?

Geometry THREE.js ImmediateRenderObject:共面三角形具有不同的着色?,geometry,three.js,Geometry,Three.js,我是一名计算机图形学初学者(有一学期的CG基础知识) 关于使用ImmediaterObject在THREE.js中着色(平滑和平坦)的一个问题: 为什么在平面和平滑着色中,共面三角形的着色方式不同?如下图所示,三角形具有正确的面法线(即,与三角形所在的平面垂直,它们是下图中的蓝色)。顶点法线看起来也是正确的(即,除了位于非常边界的顶点的顶点法线(下图中的红色顶点法线)外,顶点法线也垂直于平面) 我有一个菱形的几何体(作为一个即时对象),我从中减去底部的立方几何体(使用THREE.CSG) 在CS

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

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

为什么在平面和平滑着色中,共面三角形的着色方式不同?如下图所示,三角形具有正确的面法线(即,与三角形所在的平面垂直,它们是下图中的蓝色)。顶点法线看起来也是正确的(即,除了位于非常边界的顶点的顶点法线(下图中的红色顶点法线)外,顶点法线也垂直于平面)

我有一个菱形的几何体(作为一个即时对象),我从中减去底部的立方几何体(使用THREE.CSG)

在CSG操作之前和之后,共面三角形得到不同的着色,尽管面法线似乎完全正确(顶点法线在菱形的锐边上似乎不完全正确,但这不应影响顶部和不同侧面的共面部分)

知道为什么会发生这种情况吗?我能做些什么来获得正确的阴影??我真的很感激任何帮助

提前感谢!:)

以下是照片:

带平面明暗处理的完整菱形:


带平面明暗处理的切割菱形顶部:

如果它们的照明方式不同,是因为它们不完全在同一平面上。四元体在渲染时被拆分为两个三角形,如果这两个三角形不在同一平面上,它们的照明方式也不同。

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

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


祝你好运!:)

但正如你在照片上看到的,它们在同一平面上,具有完全相同的面法线。因此,顶点法线似乎存在问题,而不是面法线。