В настоящее время я реализую Octree для своего проекта бакалаврской диссертации. Мой Octree принимает 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, которая сохраняет D3DXVECTOR9 для pos и DWORD для значения цвета и сообщает GPU, устанавливая гибкий формат вершины в GRIDFVF. Но в моем октодереве я хочу хранить только позиции для выполнения теста, если определенные вершины находятся внутри узлов в моем октодереве и так далее. Поэтому я подумал о создании другого класса с именем SceneManager и хранении всех значений в std::vector и, наконец, передаче его моему классу Octree, который выполняет тест, а затем передает проверенные вершины в графический процессор. Будет ли это надежным решением или что общего для реализации чего-то подобного? заранее спасибо