2

一本旧的 Direct3D 书说

“......您可以通过硬件加速实现可接受的帧速率,同时每​​帧显示 2000 到 4000 个多边形......”

Direct3D 中的一个多边形是什么?它们是指一个基元(索引或其他)还是一个三角形?

4

5 回答 5

7

那本书的意思是三角形。否则,如果我想要 1000 面的多边形怎么办?我还能达到每帧 2000-4000 个这样的形状吗?

于 2008-10-27T07:02:26.993 回答
4

在实践中,您唯一希望它是一个三角形,因为如果一个多边形不是三角形,它通常会被细分为一个三角形。(例如,一个四边形由两个三角形组成,等等)。一个基本的三角测量(镶嵌)算法非常简单;您只需遍历顶点并将每三个顶点变成一个三角形。

于 2008-10-27T07:02:48.117 回答
3

这里,“多边形”是指三角形。全部 。但是,正如您所指出的,除了决定性能的三角形数量之外,还有更多变量。

重要的关键问题是:

  • 存储格式(索引与否;列表、扇形或条形)
  • 存储位置(主机内存顶点数组、主机内存顶点缓冲区或 GPU 内存顶点缓冲区)
  • 渲染模式(是完全从主机发出的绘制原语命令,或通过实例化)
  • 三角形尺寸

这些变量加在一起可以产生远大于 2 倍的性能变化。

同样,运行应用程序的硬件在现实世界中的性能可能相差 10 倍或更多:2005 年低端的 GPU(或集成图形处理器)在任何有意义的指标上都将比当前的性能慢 10-100 倍顶级GPU。

总而言之,任何使用 2-4000 个三角形的建议都已经过时了,以至于今天应该完全忽略它。即使是今天的低端硬件也可以在合理的条件下轻松地将 100,000 个三角形推入一个框架中。此外,当今大多数视觉上有趣的应用程序都以像素着色性能为主,而不是三角形计数。

当今实现良好三角形吞吐量的一般经验法则:

  • 使用 [indexed] 三角形(或四边形)列表
  • 将数据存储在 GPU 内存顶点缓冲区中
  • 使用每个绘制图元调用(数千个图元)绘制大批量
  • 在屏幕上主要使用 >= 16 像素的三角形
  • 不要使用几何着色器(尤其是几何放大)

做所有这些事情,今天的任何机器都应该能够轻松渲染数万或数十万个三角形。

于 2008-11-17T01:26:52.767 回答
2

根据这个页面,多边形在 Direct3d 中是 n 边的。

在 C# 中:

public static Mesh Polygon(
    Device device,
    float length,
    int sides
)
于 2008-10-27T06:52:37.137 回答
0

正如其他人已经说过的,这里的多边形意味着三角形。三角形的主要优点是,由于 3 个点定义了一个平面,因此三角形根据定义是共面的。这意味着三角形内的每个点都被精确地定义为多边形点的线性组合。更多的顶点不一定是共面的,它们也没有定义一个唯一的曲面。

与图形相比,机械建模的一个优势是三角形也是不可变形的。

于 2009-02-13T13:56:26.540 回答