在 OpenGL 中平滑面部边缘的技术

Posted

技术标签:

【中文标题】在 OpenGL 中平滑面部边缘的技术【英文标题】:Techniques to smooth face edges in OpenGL 【发布时间】:2009-06-05 02:34:23 【问题描述】:

当我在 OpenGL 中使用面部法线照亮我的人体模型时,每个面部在模型上的位置非常明显。使用顶点法线,光照变得相当平滑,但仍然很明显。是否有任何技术可用于在不添加额外顶点(例如细分)的情况下平滑有机模型?

【问题讨论】:

【参考方案1】:

如果您看到每个顶点法线的单个面,您可能忘记启用平滑面:

glShadeModel(GL_SMOOTH);

如果这没有帮助,请确保具有相同位置的所有顶点也具有相同的法线。然而,这应该由搅拌机自动完成。也可能是您的模型的多边形太少。如果是这种情况,您要么必须使用更多多边形,要么按照 basszero 所说的做。 Create a normal map 并将其与 GLSL 着色器一起使用。

【讨论】:

【参考方案2】:

如果您可以访问更高分辨率的模型/网格,或者可以通过细分或其他奇特方法创建高分辨率模型的体面的 3d modeling tool...

GLSLper-pixel-lighting + normal maps

更新:

http://www.blender.org/development/release-logs/blender-246/render-baking/

【讨论】:

我正在使用搅拌机。出于性能原因,我将模型保持为低多边形。 Phong 着色看起来很有前景,但它不受 OpenGL 的支持,而且这种优势并不能保证性能受到影响。 如果这不是 OpenGL ES 1.1 问题(例如 iPhone),您的硬件可能支持着色器,您可以编写实现 phong 着色 + 法线贴图的着色器。 对,您在 Blender 中创建一个高分辨率模型并使用它来生成法线贴图。创建低分辨率版本并使用法线贴图 + 着色器在最终渲染产品中创建缺失的顶点细节【参考方案3】:

是的,有许多不同的技术。一种是首先计算每个面的法线(您可能正在将其用于面中的顶点),然后使用这些法线为每个顶点计算新的法线。

这是one,您可以在其中计算五个相邻三角形的平均值。

干杯!

【讨论】:

链接已失效。

以上是关于在 OpenGL 中平滑面部边缘的技术的主要内容,如果未能解决你的问题,请参考以下文章

在OpenGL中平移和移动相机的正确方法?

在 Unity 中平滑动态生成的网格?

OpenGL rubiks cube - 用鼠标旋转面部

什么是openGL中的顺时针面

使用 OpenGL 进行纹理映射后的奇怪结果

IOS OpenGL ES GPUImage 图像 XYDerivative 边缘检测 GPUImageXYDerivativeFilter