在 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 中平滑面部边缘的技术的主要内容,如果未能解决你的问题,请参考以下文章
IOS OpenGL ES GPUImage 图像 XYDerivative 边缘检测 GPUImageXYDerivativeFilter