代码之家  ›  专栏  ›  技术社区  ›  Agnel Kurian

“多边形”在3D图形方面是什么意思?

  •  2
  • Agnel Kurian  · 技术社区  · 16 年前

    一本旧的Direct3D书说

    “…你可以达到一个可接受的框架 硬件加速时的速率 显示2000到4000之间 每帧多边形。.."

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

    5 回复  |  直到 16 年前
        1
  •  7
  •   Jim Buck    16 年前

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

        2
  •  4
  •   Jasper Bekkers    16 年前

    在实践中,你唯一想要的是一个三角形,因为如果一个多边形不是三角形,它通常会被镶嵌成三角形。(例如,一个四边形由两个三角形组成,以此类推)。一个基本的三角剖分(镶嵌)算法非常简单;你只需遍历顶点,并将每三个顶点变成一个三角形。

        3
  •  3
  •   jrk    16 年前

    在这里,“多边形”是指三角形。全部。然而,正如您所指出的,决定性能的变量远不止三角形的数量。

    重要的关键问题是:

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

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

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

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

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

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

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

        4
  •  2
  •   David Segonds    16 年前

    据此 page ,在Direct3d中,多边形是n边的。

    在C#中:

    public static Mesh Polygon(
        Device device,
        float length,
        int sides
    )
    
        5
  •  0
  •   stevenvh    16 年前

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

    机械建模比图形建模的一个优点是三角形也是不可变形的。

    推荐文章