OSG
模型共享...
简单概述
在很多场景中,我们需要将同一个模型绘制到不同的区域并且还需要对模型进行一系列的旋转缩放等操作,同时需要使用不同的颜色,这个时候我们只需要使用一些简单的设置便可以实现这个功能功能。
伪代码:
1、读入模型
1 2 3 4 5 6 7
|
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
|
2、计算对模型的旋转、缩放、平移的操作矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform;
osg::Matrix matrix_rotate;
matrix_rotate.makeRotate(osg::vec3(0,0,1),osg::vec3(1,0,0));
osg::Matrix::rotate(osg::Vec3(),osg::Vec3());
trans->setMatrix(matrix_rotate * osg::Martix::scale(1.0,1.0,1.0) * osg::translate(osg::Vec3()));
|
3、对trans节点设置材料等属性
1 2 3 4 5 6
| osg::Material* mat = new osg::Material(); mat->setColorMode(osg::Material::ColorMode::DIFFUSE); mat->setDiffuse(osg::Material::FRONT, osg::Vec4());
trans->getOrCreateStateSet()->setAttribute(mat);
|
4、将对象作为节点添加
1
| trans.addchild(geom.get());
|
5、将操作节点添加到绘制的根节点或者是其他的叶节点