一些背景信息:我正在使用C++开发一个项目,旨在根据实时剖面数据绘制物体的三维表示。剖面数据来自外部剖面硬件。系统沿着物体移动,并以每秒300次的速率向我的软件提供剖面切片。每个切片由约8000个X-Y点的列表组成。剖面仪的运动由编码器记录。编码器信息提供了扫描的第三个维度。
另一个重要的事情是,剖面仪可能会在物体上来回移动。随着这种情况的发生,我希望用新的切片替换先前读取/绘制的切片(基于编码器位置)。目前,我通过按编码器计数存储的切片循环缓冲区来实现此目的。这也意味着当缓冲区填满并开始覆盖旧的切片时,我将想要丢弃切片。为了在屏幕上显示适当数量的主题件 - 我需要一次绘制1000个剖面数据切片。现在,我将对象呈现为点云。将来,我们可能会尝试连接相邻的切片并将其呈现为三角形列表。
我对DirectX还不熟悉,但是通过书籍和在线示例,我已经实现了在3D中绘制对象的功能,但是我确信我没有有效/正确地使用顶点缓冲区。我找到的大多数示例都使用非常静态的模型。因此,它们倾向于创建一个带有点列表的单个顶点缓冲区,然后只是通过矩阵变换进行操作。相反,当我从硬件检索剖面数据时,我将非常快速地更新场景。
目前,我为每个读入的切片创建一个新的顶点缓冲区。当我绘制场景时,我循环遍历我的最多1000个缓冲区列表,并为每个缓冲区调用Draw()。我注意到,如果我将一次绘制的顶点缓冲区数量减半,我的FPS会显着增加,而如果将每个缓冲区的顶点数减半,则几乎没有改进 - 因此,我认为这表明多个顶点缓冲区不是适当的方法。
那么,对于我的问题的关键部分......我想知道当顶点频繁更改时是否可以将所有这些顶点放入单个顶点缓冲区中。我能否更新现有顶点缓冲区中的点?还是每次更新场景时都应该重新创建一个全新的缓冲区?最后要记住的一件事是,每个硬件切片的点数将有所不同 - 因此,在覆盖以前的切片时,新切片可能会具有更多或更少的点。
谢谢您的时间。任何建议都将不胜感激!
另一个重要的事情是,剖面仪可能会在物体上来回移动。随着这种情况的发生,我希望用新的切片替换先前读取/绘制的切片(基于编码器位置)。目前,我通过按编码器计数存储的切片循环缓冲区来实现此目的。这也意味着当缓冲区填满并开始覆盖旧的切片时,我将想要丢弃切片。为了在屏幕上显示适当数量的主题件 - 我需要一次绘制1000个剖面数据切片。现在,我将对象呈现为点云。将来,我们可能会尝试连接相邻的切片并将其呈现为三角形列表。
我对DirectX还不熟悉,但是通过书籍和在线示例,我已经实现了在3D中绘制对象的功能,但是我确信我没有有效/正确地使用顶点缓冲区。我找到的大多数示例都使用非常静态的模型。因此,它们倾向于创建一个带有点列表的单个顶点缓冲区,然后只是通过矩阵变换进行操作。相反,当我从硬件检索剖面数据时,我将非常快速地更新场景。
目前,我为每个读入的切片创建一个新的顶点缓冲区。当我绘制场景时,我循环遍历我的最多1000个缓冲区列表,并为每个缓冲区调用Draw()。我注意到,如果我将一次绘制的顶点缓冲区数量减半,我的FPS会显着增加,而如果将每个缓冲区的顶点数减半,则几乎没有改进 - 因此,我认为这表明多个顶点缓冲区不是适当的方法。
那么,对于我的问题的关键部分......我想知道当顶点频繁更改时是否可以将所有这些顶点放入单个顶点缓冲区中。我能否更新现有顶点缓冲区中的点?还是每次更新场景时都应该重新创建一个全新的缓冲区?最后要记住的一件事是,每个硬件切片的点数将有所不同 - 因此,在覆盖以前的切片时,新切片可能会具有更多或更少的点。
谢谢您的时间。任何建议都将不胜感激!