'Polygon'在3D图形方面意味着什么?



一本旧的Direct3D书说

"...您可以获得可接受的框架 速率与硬件加速同时 显示 2000 到 4000 之间 每帧多边形..."

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

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

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

在这里,"多边形"指的是一个三角形。都。但是,正如您所指出的,决定性能的变量不仅仅是三角形的数量。

关键问题是:

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

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

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

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

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

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

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

根据此页面,多边形在 Direct3d 中是 n 侧的。

在 C# 中:

public static Mesh Polygon(
    Device device,
    float length,
    int sides
)

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

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

最新更新