gpt4 book ai didi

directx-9 - DirectX 9.0 顶点缓冲区更新

转载 作者:行者123 更新时间:2023-12-03 22:28:58 28 4
gpt4 key购买 nike

我使用 DirectX 9.0 制作了一个小型 3D 查看器应用程序。现在我想添加一些编辑功能。假设我想编辑一个大多边形。当用户编辑形状时,顶点将被添加、删除和移动。现在每个多边形都存储为顶点缓冲区。
我的问题是,在用户编辑形状时存储和显示形状的最佳方式是什么?如果每次发生更改时我都销毁并重新创建顶点缓冲区,我相信它会占用太多资源并且不是最理想的。

我想我也应该在主要帖子中提出我的问题,所以这里是:

我有三个不同的任务,其中两个我不知道如何实现:
1) 编辑顶点:很简单,我将在 VB 中用新位置更新旧顶点。
2)删除一个顶点:这里会发生什么?如何在不创建新 VB 的情况下删除它?我应该只添加一个空白的VB吗?
3)添加一个顶点:这里呢?我可以更改动态 VB 的长度并在最后添加顶点吗?

另一个我认为可行的想法:
1)编辑很容易
2)删除只是意味着我可能会用前一个或下一个顶点的位置覆盖已删除的顶点,因此它将不可见。
3) Addition 将创建一个新的顶点缓冲区,但会像 Vector 或 List 一样调整大小。每次重新创建它的大小都会像
NewSize = OldSize * 1.1(增加 10%)
这样连续添加就不必重新创建 VB。
所以 1 & 2 永远不会创建一个新的 VB 并且 3 有时可能会创建一个。这听起来如何?

最佳答案

您不必每帧都销毁缓冲区。创建动态缓冲区。
查看文章 Using Vertex Buffers With DirectX ,如果你还没有:

For dynamic vertex buffers, which contain information about primitives that change often in the scene, we need to specify the D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY flags for the Usage and the D3DPOOL_DEFAULT flag for the Pool.


但请记住,每次更新时仍必须将数据发送到管道。因此,与具有一致数据的静态缓冲区相比,肯定会有一些性能成本。
此外,您应该真正尝试将缓冲区更新和缓冲区切换保持在最低限度。您的应用程序中有很多这样的可编辑多边形吗?如果答案是肯定的,也许可以考虑将它们放入一个缓冲区。

图形/游戏开发者的官方问答网站: https://gamedev.stackexchange.com/

更新
听起来不错。

Dynamic Vertex Buffers, on the other hand, are filled and tossed away every frame.


这是摘自文章,几乎是 的答案。 1. 2. .我只是更新整个缓冲区内容,而不是更新单个顶点或仔细选择应该覆盖哪些顶点。无论如何都必须将完整的缓冲区发送到设备。你必须测试它,只是为了确定。
关于 3. :创建缓冲区后不能更改其大小,但可以创建比实际需要更大的缓冲区。所以试着估计一个好的利润。如果缓冲区仍然太小,则必须创建一个新缓冲区。对此没有其他解决方案。您已经找到了一种动态增加缓冲区大小的可能算法。
说到图形性能,参数太多,几乎不可能给出明确的答案。您是否已经遇到限制?如果没有,不要太费心。在您仍在开发中时,请慷慨地使用您的资源。

关于directx-9 - DirectX 9.0 顶点缓冲区更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537837/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com