我想知道如果绘制一个尺寸部分位于平截头体之外的三角形将花费更长的时间,而不是计算三角形被平截头体束缚的位置并制作一个(可能是两个)新三角形来绘制那个三角形而不是较大的三角形导致相同的像素变化。
所以问题是是否存在片段着色器为屏幕上甚至不存在的位置运行?或者是针对此问题优化的光栅化阶段。
答案 0 :(得分:2)
现代GL硬件确实非常擅长在视口上剪切三角形。
片段着色器仅在视口剪辑后的像素上运行。
不要尝试在三角形级别进行视锥体剔除,在对象/图块级别进行。您的CPU和顶点着色器单元将感谢您:)
答案 1 :(得分:1)
这完全是司机的事情。任何超出范围的三角形都会由您的驱动程序自动处理,理论上将三角形细分为两个较小的三角形;我怀疑你能比GPU更快地完成它。
虽然可以使用一些技术来优化绘图范围之外的三角形而不进行细分;您可以指定一个不需要细分的区域(一种边界),如果该点恰好位于内部,则会发出特殊处理,但通常它会跳过不必要的片段计算。
TL; DR:信任您的GPU。
答案 2 :(得分:0)
简短回答:
不,片段着色器不会针对截头体外的像素运行
但你应该真正担心的是顶点着色器。即使整个三角形在平截头体之外,它也会运行,因为如果三角形最终会出现在屏幕上,GPU无法预测(不是我知道某种方式)。