9

作为这个问题的序言,我对 OpenGL 及其背后的数学有充分的了解,虽然我从未接触过与 DirectX 相关的任何东西,但我想这些概念是相似的。

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

在此之后,有没有什么方法可以实现图形渲染的逐像素控制(正如这个问题的答案所简要概述的那样)。虽然我很欣赏通过驱动程序对单个像素进行直接控制,但有什么方法可以让我对渲染环境进行这种控制?有没有完全“避免三角形”?

4

2 回答 2

21

是和不是。有点儿。

当前的 GPU 旨在渲染三角形,因为三角形很好用。而且由于当前的 GPU 设计用于处理三角形,人们使用三角形,因此 GPU 只需要处理三角形,因此它们被设计为只处理三角形。

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

不是因为 GPU 无法原生渲染四边形有技术原因,而是因为不值得在. 将 GPU 集中在尽可能快地完成三角形上,然后在需要时模拟其他基元会更有用。

所以,是的,现代 GPU 有硬件限制,因此它们不能与四边形一起工作,但并不是因为不可能设计出与四边形一起工作的 GPU。这样做只会降低效率。:)

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

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

于 2012-09-19T13:22:10.767 回答
-2

据我所知,每个现代 CAN 渲染四边形甚至 N 边形,但将四边形的渲染时间与 2 个三角形进行比较显示了三角形的优势。这主要是因为 GPU 已针对渲染三角形进行了优化,并且实际硬件具有比其他(例如纹理)更多的“蒸汽处理器”(用于三角形)。GPU 上的其他一些处理器类型可以直接渲染四边形,但通常你会发现几个纹理处理器会产生一千个蒸汽。请注意,让一个纹理单元渲染一个四边形是非常困难的。理论上这是可能的,但没有人将 pricip 用于严重病例。

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

于 2015-01-27T21:12:58.440 回答