如何组织要呈现的对象

How to organize objects to render

本文关键字:对象 何组织      更新时间:2023-10-16

我想渲染从波前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的所有顶点?

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

我建议您声明接口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.
};