重新创建Blender的边缘分割算法

时间:2016-06-20 04:46:45

标签: opengl blender vertex normals shading

我正在研究一个OpenGL项目。我使用每顶点法线进行光照计算,这会使它们自动平滑(我认为这称为gara-something shading)。 这开始使用硬编码模型进行一些低多边形设计 - 但由于自动平滑,它们看起来很奇怪。

Blender有一个网格边缘分割选项,可以完全满足我的要求。它变成了模型

from this

to this

我不知道是否需要重写我的渲染系统以允许每顶点正常平滑照明和每个正常的硬照明,我想知道是否有人知道Blender的边缘分割算法是如何工作的,所以我可以在我的硬编码中重新创建它楷模。

使用Blender我已经将正常导出的.obj与他们的边缘分割对应物进行了比较,我无法完全理解其差异。

非常感谢。

3 个答案:

答案 0 :(得分:0)

那将是Gouraud shading。事物的外观没有几何处理。它只是一个不同的着色模型。

在OpenGL中,对于每个三角形,您需要绘制具有相同法线的所有三个顶点,这个法线是两个三角形边的叉积。然后,您将看到一个与图像具有相同平面阴影的网格。

如果每个顶点都有自己的法线,并且这些法线在三角形中并非全部相等,则OpenGL将在面的表面上插入差异,从而产生从顶点到顶点的着色更平滑的过渡。这很顺利(gouraud阴影)。

总而言之,您可以通过更改相对于三角形绘制法线的方式来实现此目的。

答案 1 :(得分:0)

我没有足够的评论点,所以这里有一个答案..

一般来说,我同意lfgtm:如果每个顶点有1个法线,但是顶点是由几个三角形共享(重复使用,即索引),那么你就无法实现“平面”外观或者有分割边缘,因为你错过了额外的法线。你必须复制顶点。

但是既然你提到了OBJ导出,你是否尝试勾选OBJ导出选项中的“平滑组”选项:

enter image description here

这将根据您标记为清晰的边缘创建平滑组(在编辑模式下:网格 - >边缘 - >标记清晰)。如果您的引擎支持OBJ文件中的这些平滑组,您将保持这种锐利的边缘效果。您可以使用“边缘分割”修改器在“Blender”中预览这些锐利边缘(勾选“Sharp Edges”选项):

enter image description here

答案 2 :(得分:0)

Blender的边缘分割修改器通过断开网格来实现它的结果,如果应用边缘分割修改器,则会得到一个未连接面的网格。

您想要研究的是平滑阴影和平面阴影之间的区别

shading sample

如果你google" opengl flat shading"您会发现一些项目,例如this one建议使用glShadeModel(GL_FLAT);