osgAnimation.MorphTransformSoftware是OpenSceneGraph中的一个类,用于在软件渲染中应用形态变形动画。通过该类,用户可以创建和管理MorphTarget。MorphTarget是一个包含所有形态变形目标的几何体对象,可以根据用户指定的动画曲线,将MorphTarget中的顶点对应于源几何体中的顶点进行插值,从而实现形态变形动画效果。
默认构造函数,创建一个空的MorphTransformSoftware对象。
重载构造函数,创建一个包含指定MorphTarget的MorphTransformSoftware对象。
设置MorphTransformSoftware对象的MorphTarget列表。
获取MorphTransformSoftware对象的MorphTarget列表。
设置指定MorphTarget的权重值。
获取指定MorphTarget的权重值。
设置所有MorphTarget的权重值。
获取所有MorphTarget的权重值。
更新MorphTransformSoftware对象的状态,返回值表示是否有状态更新。
获取MorphTransformSoftware对象的Transform指针。
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry();
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
osg::ref_ptr<osg::DrawArrays> drawArrays = new osg::DrawArrays(osg::PrimitiveSet::TRIANGLES, 0, vertices->size());
geom->setVertexArray(vertices.get());
geom->addPrimitiveSet(drawArrays.get());
geode->addDrawable(geom.get());
osg::ref_ptr<osgAnimation::MorphTarget> target1 = new osgAnimation::MorphTarget();
osg::ref_ptr<osg::Vec3Array> verticesTarget1 = new osg::Vec3Array();
verticesTarget1->push_back(osg::Vec3(-1.0f, -1.0f, 1.0f));
verticesTarget1->push_back(osg::Vec3(1.0f, -1.0f, 1.0f));
verticesTarget1->push_back(osg::Vec3(-1.0f, 1.0f, 1.0f));
target1->setVertexArray(verticesTarget1.get());
osg::ref_ptr<osgAnimation::MorphTarget> target2 = new osgAnimation::MorphTarget();
osg::ref_ptr<osg::Vec3Array> verticesTarget2 = new osg::Vec3Array();
verticesTarget2->push_back(osg::Vec3(-1.0f, -1.0f, -1.0f));
verticesTarget2->push_back(osg::Vec3(1.0f, -1.0f, -1.0f));
verticesTarget2->push_back(osg::Vec3(-1.0f, 1.0f, -1.0f));
target2->setVertexArray(verticesTarget2.get());
osg::ref_ptr<osgAnimation::MorphTransformSoftware> morphTransform = new osgAnimation::MorphTransformSoftware();
morphTransform->setMorphTargets(osgAnimation::MorphTargetList{target1.get(), target2.get()});
morphTransform->setWeights(std::vector<float>{0.0f, 1.0f});
geom->setInitialBound(osg::BoundingBox(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f));
geom->setComputeBoundingBoxCallback(new osg::Drawable::ComputeBoundingBoxCallback());
geom->addDrawable(morphTransform.get());
以上示例代码创建了一个平面几何体,然后为其创建两个MorphTarget,最后创建一个包含这两个MorphTarget的MorphTransformSoftware对象,并将其加入到几何体中。在每帧更新时,用户可以通过设置权重值的方式实现几何体的形态变形动画效果。