如何组织要呈现的对象
How to organize objects to render
我想渲染从波前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();
};
我这里有一个例子给你: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.
};
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 如何为生存时间少于对象所有者的类组织对象所有权?
- 使用部分共享界面组织对象
- 如何组织与两个对象有联系的变量
- 对象文件"Version References"从何而来?
- Winapi-如何组织许多HWND对象
- 动态对象数组在C++和Java中有何不同?
- 在没有 new 关键字的情况下初始化C++对象的内存从何而来
- 如何组织要呈现的对象
- Is STD::设置我应该使用什么来将对象组织到层次结构中
- 缺少复制构造函数与对象切片有何关系
- 如何复制国际货币基金组织的大量对象