opengl – 三角形是gpu限制还是有其他渲染路径?

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

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

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

最佳答案
是的,不是.的种类.

当前的GPU设计用于渲染三角形,因为三角形很适合使用.并且因为当前的GPU设计用于三角形,所以人们使用三角形,因此GPU只需要处理三角形,因此它们被设计为仅处理三角形.

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

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

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

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

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

转载注明原文:opengl – 三角形是gpu限制还是有其他渲染路径? - 代码日志