如何组织对象进行渲染
问题描述:
我想呈现从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
或许更好地从g1
和g2
一次加载所有的顶点?
就是这样吗?或者它有一些巨大的缺点?
答
我会建议你申报界面IModel,并在不同的车型,如WavefrontModel这样实现:
class IModel{
public:
virtual bool drawModel() =0;
};
class WavefrontModel : public IModel{
public:
bool drawModel();
};
如果你想你可以从这个项目中获得glEngine模块。
之后,执行您的场景或设备,其中将包含您的模型列表。
class Device{
private:
std::list< IModel* > m_models;
public:
bool drawScene(); //iterate all of your models and call the draw method here.
};