三角形是gpu限制还是有其他渲染途径?

时间:2012-09-19 13:15:06

标签: opengl graphics directx driver gpu

为了解释这个问题,我对OpenGL及其背后的数学有了深入的了解,虽然我从未接触过与DirectX相关的任何内容,但我想这些概念是相似的。

有很多关于为什么三角形用于3D图形的信息(它们必须是平面的,除了小三角形之外是不可分割的等等)。但是,我想知道三角形是否只是存储和操作3D数据的简便方法(关于插值的简单数学等),或者如果图形卡中存在硬件限制,只能实际允许渲染三角形(例如基本上只能应用于三角形的指令。

接下来,是否有任何方法可以实现图像渲染的逐像素控制(正如this question的回答简要概述)。虽然我很欣赏通过驱动程序对单个像素进行直接控制,但是有什么办法可以在渲染环境中实现这种控制吗?有没有完全避免三角形?

2 个答案:

答案 0 :(得分:18)

是和否。那种。

当前的GPU设计用于渲染三角形,因为三角形很适合使用。而因为当前的GPU设计用于三角形,人们使用三角形,所以GPU只需要处理三角形,因此它们只能处理三角形。

正如您所说,三角形具有使其便于使用的优点。可以创建(并且已经制作)来本地渲染其他原语,但这并不值得。如果你告诉现代GPU渲染一个四边形,它会将它分成两个三角形并渲染它们。

不是因为有技术原因导致GPU无法原生渲染四边形,而是因为不值得在上花费晶体管。将GPU专注于尽可能快地完成三角形更有用,然后在需要时模拟其他基元。

所以,是的,现代GPU具有硬件限制,因此它们不适用于四边形,例如,但不是因为设计一个适用于四边形的GPU是不可能的。这样做效率会低一些。 :)

至于“避免三角形”,当然,这基本上就是片段着色器的作用:它填充一个像素。 GPU只需并行运行几百万次就可以填满整个屏幕。您可以绘制两个大三角形,形成一个填充整个屏幕的四边形,然后只需指定一个片段着色器,用您喜欢的内容填充它。

如果您想要更多地控制过程,请在软件中进行操作:将一个像素一次绘制到内存表面,然后将其作为纹理加载到GPU上。但它很慢。 :)

答案 1 :(得分:-2)

据我所知,每个现代CAN渲染四边形和一些偶数N-gons,但它比较四边形到2个三角形的渲染时间显示了三角形的优势。 这主要是因为GPU已经过优化以渲染三角形,并且精确硬件具有更多的蒸汽处理器" (对于三角形)然后是其他如纹理的。 GPU上的其他一些处理器类型可以直接渲染四边形,但通常你会发现一些纹理处理器的蒸汽 请注意,让纹理单元渲染四边形非常困难。这在理论上是可能的,但没有人使用pricip作为一个连续案例。

除非您使用非常硬件关闭操作,否则软件将处理三角形(例如,从四边形自动转换它们)