我想渲染从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
的所有顶点?
答案 0 :(得分:1)
我建议你声明接口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.
};