私は現在、私の学士論文プロジェクトのために八分木を実装しています。私の八分木は引数として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に通知されます。しかし、私のOctreeでは、特定の頂点が私のOctree内のノード内にある場合など、テストを実行するための位置のみを保存したいと思います。したがって、SceneManagerという別のクラスを作成し、すべての値をstd :: vector内に格納し、最後にそれをOctreeクラスに渡すことを考えました。これにより、テストが実行され、チェックされた頂点がGPUに渡されます。これは固溶体でしょうか、それともこのようなものを実装するのに一般的なことでしょうか?前もって感謝します