2012-05-01 4 views
0

Im в настоящее время реализует проект Octree для моего бакалавриата. Моего Octree принимает зЬй :: вектора в качестве аргумента:Вершины магазинов DirectX C++

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))); 
    } 
} 

Im просит за то, что, как правило, используются для хранения вершин перед визуализацией их и сделать любой тест забоя и т.д., чтобы им.

Я сохранил это очень просто, теперь у меня есть функция, которая отображает сетку. Некоторые фрагменты:

#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); 

Теперь при визуализации этого я использую мой пользовательских STRUCT GridVertex, то будет экономит D3DXVECTOR9 для поз и DWORD для значения цвета и скажите GPU, установив гибкий формат вершин в GRIDFVF. Но в моем Octree я хочу только сохранить позиции для выполнения теста, если определенные вершины находятся внутри узлов в пределах моего Octree и так далее. Поэтому я подумал о создании другого класса SceneManager и сохранении всех значений в std :: vector и, наконец, передать его моему классу Octree, который выполняет тест, а затем передает проверенные вершины на графический процессор. Будет ли это прочное решение или что-то общее для реализации чего-то подобного? Заранее благодарен

ответ

1

Как правило, одни и те же геометрические вершины рендеринга не помещаются в октете или какую-либо структуру пространственного разделения. Этот уровень детализации не пригодится, потому что если набор вершин, составляющих модель, охватывает узлы разделов, так что некоторые подмножества этих вершин будут отбракованы, вы не смогли бы правильно нарисовать модель.

Что вы обычно хотели бы сделать, это иметь объект, представляющий сущность и ее границы в мире (ориентированные по оси рамки или ограничивающие сферы - простые и эффективные ограничивающие тома, например). Каждая сущность также связана с геометрией рендеринга (или может быть связана с некоторой другой подсистемой). Сами сущности сортируются в пределах окта.

Затем вы используете свой октет, чтобы определить, какие объекты видны, и отправьте все связанной с ними геометрии рендеринга на карту.

+0

Спасибо, Джош, но у меня все еще есть один вопрос: а как насчет больших сущностей? Например, сетка, которая определяет землю мира. Как я могу отделить это от менее сущностей? Поскольку сетка будет охватывать себя по всей октете – Chris

+1

Из-за именно этой причины (и других) не рекомендуется хранить «мир» как единую гигантскую сетку; разбить его на более мелкие куски, которые можно отбросить по мере необходимости. –