【问题标题】:How to organize objects to render如何组织要渲染的对象
【发布时间】:2012-04-24 18:36:50
【问题描述】:

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

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

【问题讨论】:

    标签: c++ opengl wavefront


    【解决方案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.
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多