2012-04-24 106 views
0

我想呈现从wavefront obj文件导入的对象。该对象有多个组和材料:如何组织对象进行渲染

# 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 

或许更好地从g1g2一次加载所有的顶点?

就是这样吗?或者它有一些巨大的缺点?

回答

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