2012-04-24 2 views
0

Я хочу визуализировать объект, импортированный из файла obj wavefront. Объект имеет несколько групп и материалы:Как организовать объекты для рендеринга

# group one 
g one 
v ... 
vt ... 
vn ... 
# material A 
usemtl ... 
f ... 
# material B 
usemtl ... 
f .. 

# second group 
g two 
v ... 
vt ... 
vn ... 
# material C 
usemtl ... 
f ... 
# material D 
usemtl ... 
f ... 

Различные части модели должны быть оказаны по отдельности, так как они имеют различные материалы.

Я построю контейнер с информацией о модели, и я хотел бы знать, какой лучший/общий способ организовать «очередь» объектов для рендеринга.

Моя идея, которую я не знаю, хорошо это выглядит следующим образом (с псевдокодом): для каждой группы g магазина всей информации вершины объекта VertexInformation g1, g2 и для каждого usemtl хранит информацию о лицах (и используемом материале) в FaceInformation f1, f2, f3, f4.

Тогда рендеринга будет выглядеть следующим образом:

load vertices g1 
render f1 f2 
load vertices g2 
render f3 f4 

Или, может быть, лучше, чтобы загрузить все вершины из g1 и g2 сразу?

Это так? Или у него есть некоторые гигантские недостатки?

ответ

1

Я хотел бы предложить вам объявить интерфейс IModel и реализовать ее в виде различных моделей, как WavefrontModel так:

class IModel{ 
public: 
virtual bool drawModel() =0; 
}; 

class WavefrontModel : public IModel{ 
public: 
    bool drawModel(); 
}; 

У меня есть пример для вас здесь: http://code.google.com/p/gstmultimedialib/source/browse/#svn%2Ftrunk%2Fgstmultimedialib%2FGLEngine%2FGLEngine%2FModel

Если вы хотите вы может получить модуль glEngine из этого проекта.

После этого выполните свою сцену или устройство, которое будет содержать список ваших моделей.

class Device{ 
private: 
std::list< IModel* > m_models; 

public: 
bool drawScene(); //iterate all of your models and call the draw method here. 
}; 
Смежные вопросы