我目前正在为我的学士论文项目实施八叉树。我的八叉树将 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。这会是一个可靠的解决方案还是实现这样的事情的常见方法?提前致谢