0

我想渲染从波前 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将所有顶点信息存储在 object 中VertexInformation g1, g2,并将每个usemtl关于面(和使用的材料)的信息存储在FaceInformation f1, f2, f3, f4.

然后渲染将如下所示:

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

g1或者也许更好地一次加载所有顶点g2

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

4

1 回答 1

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.
};
于 2012-04-24T18:42:01.780 回答