gpt4 book ai didi

c++ - 存储顶点 DirectX C++

转载 作者:行者123 更新时间:2023-11-28 08:05:21 25 4
gpt4 key购买 nike

我目前正在为我的学士论文项目实现八叉树。我的八叉树以 std::vector 作为参数:

octree::Octree::Octree(std::vector<const D3DXVECTOR3*> vec) : 
m_vertices(std::vector<D3DXVECTOR3*>()),
m_size(m_vertices.size())
{
int i=0;
for(;i<m_size;++i) {
m_vertices.push_back(new D3DXVECTOR3(*vec.at(i)));
}
}

在渲染顶点并对它们进行任何剔除测试等之前,我询问通常用于存储顶点的内容。

我暂时保持这个非常简单,我所拥有的只是一个渲染网格的函数。一些片段:

#define GRIDFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)

struct GridVertex {
D3DXVECTOR3 position;
DWORD color;
};


g_dev->SetTransform(D3DTS_WORLD, &matIdentity);
g_dev->SetStreamSource(0, g_buffer, 0, sizeof(GridVertex));
g_dev->SetTexture(0, NULL);
g_dev->DrawPrimitive(D3DPT_LINELIST, 0, GridSize * 4 + 2);

现在渲染这个时,我使用我的自定义结构 GridVertex,这会为 pos 保存一个 D3DXVECTOR9,为颜色值保存一个 DWORD,并通过将灵活的顶点格式设置为 GRIDFVF 来告诉 GPU。但是在我的八叉树中,如果某些顶点在我的八叉树中的节点内,我只想存储执行测试的位置等等。因此,我想创建另一个名为 SceneManager 的类,并将所有值存储在 std::vector 中,最后将其传递给我的 Octree 类,该类进行测试,然后将检查的顶点传递给 GPU。这会是一个可靠的解决方案,还是实现这样的东西很常见?提前致谢

最佳答案

通常,不会将实际渲染几何顶点本身放入八叉树或任何使用的空间分区结构中。这种粒度级别没有用,因为如果构成模型的一组顶点跨越分区节点,那么这些顶点的某些子集将被剔除,您将无法正确绘制模型。

您通常想要做的是让一个对象代表一个实体及其在世界范围内的边界(例如,面向轴的边界框或边界球是简单而高效的边界体积)。每个实体还与渲染几何体相关联(或可以与其他一些子系统相关联)。实体本身在八叉树中排序。

然后,您使用八叉树确定哪些实体可见,并将它们的所有关联渲染几何体提交到卡片。

关于c++ - 存储顶点 DirectX C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10398761/

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