OpenGL - GL_FRONT与GL_FRONT_AND_BACK的区别

4

我正在研究一个使用OpenGL进行3D渲染的开源项目。在材质构建过程中,我看到了像这样的代码:

// set ambient material reflectance
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mAmbient);

在其他示例中,这样使用:

glMaterialfv(GL_FRONT, GL_AMBIENT, mAmbient);

所以我的问题是,这里有什么区别?在什么情况下会看起来不同,如果我的体积被所有法向量指向外部的正常包围,是否有任何性能差异?
1个回答

8

一个设置前后面材料,另一个只设置前面的。如果剔除背面,那么这不会产生太大影响。如果不剔除背面,则只能看到前面的材料。

如果您封闭了一个立体物体,通常情况下不会直接看到背面 - 除非相机在内部。如果相机在外部,则永远也看不到背面,渲染它们没有太大意义。(这就是为什么在许多游戏中,如果您将相机强制放入一个对象中,则会看起来所有多边形都是单面的:这就是背面剔除)OpenGL有能力为三角形/四边形等的前面和背面设置不同的属性。


好的,明白了。就性能而言,背面剔除是否能减少资源使用/提高性能?如果背面剔除已启用(我认为已启用,但要找到那段代码),那么指定GL_FRONT_AND_BACK还是只指定GL_FRONT是否有影响呢? - Drew Noakes
从最终渲染的角度来看,如果背面被剔除(因此不会绘制),那么应用于它们的材料不应该有影响。但是,仅调用GL_FRONT可能更快,因为OGL只需更改与正面相关的状态部分,而不是背面。 - Thanatos
2
从性能角度考虑,您应该完全跳过使用glMaterialfv。它来自旧的固定功能管道,现在已被弃用。请考虑使用着色器代替。 - David C. Bishop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接