Open Gl ES剪裁和背面剔除

3

我需要在我的项目中提高性能,因此考虑实现剪裁和后续的背面剔除。

所以我在我的顶点着色器中查找顶点是否面向我,如果是真的,我就渲染它,如果不是,则不渲染。但是如何在顶点着色器中表示不渲染呢?

同样的,在剪裁方面,我该如何在顶点着色器中只渲染这一部分呢?或者我理解有误?我对OpenGl还很陌生,我的项目是为iPhone开发的,使用的是OpenGl ES 2.0。

2个回答

5

顶点没有正面或反面之分。当3个或更多的顶点相遇时,根据约定(顺/逆时针),他们组成的平面(三角形)面向前方或背后。

您只需启用剔除,在着色器中不需要进行任何其他操作。

一些感兴趣的API是:(在iOS中也应该差不多,但iOS不完全符合OGLES)

glDisable / glEnable with argument GL_CULL_FACE
glCullFace  with argument GL_FRONT, GL_BACK or GL_FRONT_AND_BACK
glFrontFace with argument GL_CW or GL_CCW

0

你可以在你的片段中使用discard


同意,但我理解他想要丢弃不匹配的像素。 - unique_ptr
实际上,他想要剔除那些不朝向屏幕的面,以节省一半的像素处理。 - Mohit Jain
除非你真的需要(例如alpha测试),否则永远不要使用discard;它很昂贵,会禁用大量GPU优化。将其用于剔除是一个非常糟糕的想法。 - solidpixel
我同意弃用它很昂贵。 - unique_ptr

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