osgUtil.TransformAttributeFunctor是一个实用程序类,用于将变换矩阵应用于几何图形的顶点属性。它是osg::Drawable的一个可选线路状态属性,允许用户在绘制之前对几何图形进行变换或变形。
构造函数。
构造函数,初始化变换矩阵。
参数:
将变换矩阵应用于给定的顶点。
参数:
获取TransformAttributeFunctor是否使用缩放参数。
返回值:
设置TransformAttributeFunctor是否使用缩放参数。
参数:
设置变换矩阵。
参数:
获取变换矩阵。
返回值:
#include <osg/Geometry>
#include <osg/MatrixTransform>
#include <osgViewer/Viewer>
int main()
{
osg::ref_ptr<osg::Geometry> geo = new osg::Geometry;
osg::ref_ptr<osg::Vec3Array> verts = new osg::Vec3Array;
verts->push_back(osg::Vec3(0,0,0));
verts->push_back(osg::Vec3(1,0,0));
verts->push_back(osg::Vec3(1,1,0));
verts->push_back(osg::Vec3(0,1,0));
geo->setVertexArray(verts);
osg::ref_ptr<osg::DrawElementsUInt> tris = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
tris->push_back(0); tris->push_back(1); tris->push_back(2);
tris->push_back(2); tris->push_back(3); tris->push_back(0);
geo->addPrimitiveSet(tris);
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(geo);
osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;
mt->addChild(geode);
osg::Matrixf matrix;
matrix.makeRotate(osg::PI_4, osg::Vec3(0,0,1));
matrix.setTrans(osg::Vec3(1,0,0));
osgUtil::TransformAttributeFunctor functor(matrix);
osg::Vec3Array* vertexArray = static_cast<osg::Vec3Array*>(geo->getVertexArray());
std::for_each(vertexArray->begin(), vertexArray->end(), functor);
osgViewer::Viewer viewer;
viewer.setSceneData(mt);
return viewer.run();
}
在这个例子中,我们创建了一个矩形的几何图形,并创建了一个MatrixTransform节点,将几何图形添加为其子节点。我们使用TransformAttributeFunctor将变换矩阵应用于几何图形的顶点,这里我们旋转了45度并将其平移了一个单位。最后,我们将MatrixTransform节点添加到查看器中以进行渲染。