如果你渲染一个超出屏幕边界的大四边形,如果你把那个四边形分成更小的三角形/段,那么opengl会更快地渲染吗?当然,在四边形中代替两个三角形,你设法将其分成18个三角形左右。这样,离开屏幕的三角形将不会被发送到片段着色器?太多的三角形显然会破坏目的并减慢它的速度。我离开那个吗?基于我对opengl的理解,当三角形在屏幕外时,即使调用了绘制调用,它们也不会被渲染(发送到片段着色器)。片段着色器是最慢的部分,如果四边形更少,它会更有效吗?
答案 0 :(得分:1)
我不希望将大三角形分成更小的三角形,以便有利于提高性能。
剪切发生在顶点着色器和片段着色器之间的固定功能块中。片段着色器永远不会看到窗口外的片段。因此,您不必担心在窗口外处理片段。无论三角形有多大或多小,它们都会被消除。
规范建议在光栅化之前剪辑坐标空间中的顶点上发生剪切。但与往常一样,只要最终结果相同,OpenGL实现就可以自由地处理这种情况。因此,一些硬件架构可以剪切顶点,而其他硬件架构可以首先光栅化然后对结果片段执行剪切。或者他们可以在两种方法之间使用混合。
现在,如果您在片段空间中(部分地)剪辑的硬件架构上运行,理论上可能会有更多的光栅化开销,大型三角形大部分都在屏幕外。但这似乎不太可能成为真正的瓶颈。
如果几何体的大部分被剪裁,在渲染之前应用某种形式的剔除可能是有益的,这样完全在视图体外的对象永远不会被渲染。