如果我有4个顶点,我按照这个顺序渲染:
2-3 |\| 0-1
使用GL_TRIANGLE_STRIP,然后我启用背面剔除,正面定义为CCW,那么左下角的三角形是否会面向我而另一个不面向我?如果是这样,渲染正方形的最有效方法是什么,以便两面都可见?我必须使用GL_TRIANGLES并向下传递6个顶点而不是4个吗?
GL_TRIANGLE_STRIP
GL_TRIANGLES
qoefvg9y1#
strip基元在背面剔除方面做得很好。你可以认为tris的缠绕顺序是被管理的,以便strip中的每个三角形的顺序是一致的-例如,你可以认为GPU渲染(0,1,2),(2,1,3)...
ctrmrzij2#
三角形带中的所有三角形保持相同的方向/缠绕顺序。它们不会一个接一个地翻转。因此,两个三角形都将朝向您或远离您(假设您的图元是平坦的正方形(即凸形且不相交),其中所有顶点都属于同一平面)。P.S.你知道,你可以在OpenGL应用程序中渲染trianglestrip原语,并启用剔除,然后自己看看。
jhiyze9q3#
其他答案中的“做正确的事情”或“保持相同的缠绕顺序”描述不够明确。为了说明缠绕顺序是如何精确定义的,让我引用规范,即图10.2(在OpenGL≥4.3中,或旧版本中的图2.3)。
图10.2(a)一个三角形带。(B)一个三角形扇。(c)独立三角形。这些数字给予了顶点数组中顶点的顺序。注意,在(a)和(b)中,三角形边的顺序由第一个三角形决定,而在(c)中,每个三角形边的顺序与其他三角形无关。
3条答案
按热度按时间qoefvg9y1#
strip基元在背面剔除方面做得很好。你可以认为tris的缠绕顺序是被管理的,以便strip中的每个三角形的顺序是一致的-例如,你可以认为GPU渲染(0,1,2),(2,1,3)...
ctrmrzij2#
三角形带中的所有三角形保持相同的方向/缠绕顺序。它们不会一个接一个地翻转。因此,两个三角形都将朝向您或远离您(假设您的图元是平坦的正方形(即凸形且不相交),其中所有顶点都属于同一平面)。
P.S.你知道,你可以在OpenGL应用程序中渲染trianglestrip原语,并启用剔除,然后自己看看。
jhiyze9q3#
其他答案中的“做正确的事情”或“保持相同的缠绕顺序”描述不够明确。为了说明缠绕顺序是如何精确定义的,让我引用规范,即图10.2(在OpenGL≥4.3中,或旧版本中的图2.3)。
图10.2(a)一个三角形带。(B)一个三角形扇。(c)独立三角形。这些数字给予了顶点数组中顶点的顺序。注意,在(a)和(b)中,三角形边的顺序由第一个三角形决定,而在(c)中,每个三角形边的顺序与其他三角形无关。