如何组织要渲染的对象

时间:2012-04-24 18:36:51

标签: c++ opengl wavefront

我想渲染从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 个答案:

答案 0 :(得分: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.
};