osgAnimation.UpdateMorph:该类表示在运行时更新网格变形动画的计算类。它将使用通过节点图连接的目标几何体之间的权重进行计算,以产生变形动画。
以下是在 osgAnimation.UpdateMorph 类中可用的所有公共函数的列表。
构造函数。创建UpdateMorph实例。
构造函数。创建UpdateMorph实例,并复制在 copy 变量中给定的属性。
元对象支持。
更新函数。在每一帧中使用。
参数:
克隆函数。返回一个克隆其自身的新对象。
参数:
返回值:克隆的新对象。
以下是在 osgAnimation.UpdateMorph 类中可用的所有属性的列表。
获取指定目标的权重值。
参数:
返回值:目标的权重值。
设置指定目标的权重值。
参数:
获取指定目标的目标值。
参数:
返回值:指向目标的指针。
设置指定目标的目标值。
参数:
设置目标列表。
应用函数。将变形动画应用于指定的绘制对象。
参数:
以下是使用 osgAnimation.UpdateMorph 的示例。
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry();
geode->addDrawable(geom.get());
osg::Vec3Array* positions = new osg::Vec3Array();
positions->push_back(osg::Vec3(0.0, 0.0, 1.0));
positions->push_back(osg::Vec3(1.0, 0.0, 0.0));
positions->push_back(osg::Vec3(0.0, 1.0, 0.0));
osg::Vec3Array* targetPositions1 = new osg::Vec3Array();
targetPositions1->push_back(osg::Vec3(0.0, 0.0, 0.0));
targetPositions1->push_back(osg::Vec3(1.0, 0.0, 0.0));
targetPositions1->push_back(osg::Vec3(0.0, 1.0, 0.0));
osg::Vec3Array* targetPositions2 = new osg::Vec3Array();
targetPositions2->push_back(osg::Vec3(0.5, 0.0, 0.0));
targetPositions2->push_back(osg::Vec3(0.0, 1.0, 0.0));
targetPositions2->push_back(osg::Vec3(0.0, 0.0, 1.0));
osg::Vec3Array* normals = new osg::Vec3Array();
normals->push_back(osg::Vec3(0.0, 0.0, -1.0));
normals->push_back(osg::Vec3(1.0, 0.0, 0.0));
normals->push_back(osg::Vec3(0.0, 1.0, 0.0));
osg::ref_ptr<osgAnimation::UpdateMorph> updateMorph = new osgAnimation::UpdateMorph;
geom->setVertexArray(positions);
geom->setNormalArray(normals, osg::Array::BIND_PER_VERTEX);
geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::TRIANGLES, 0, 3));
geom->setUpdateCallback(updateMorph);
osg::ref_ptr<osgAnimation::MorphGeometry> morphgeom1 = new osgAnimation::MorphGeometry(targetPositions1, normals);
osg::ref_ptr<osgAnimation::MorphGeometry> morphgeom2 = new osgAnimation::MorphGeometry(targetPositions2, normals);
osgAnimation::Morph::TargetList targets;
targets.push_back(morphgeom1.get());
targets.push_back(morphgeom2.get());
updateMorph->setTargets(targets);
osgViewer::Viewer viewer;
viewer.setSceneData(geode.get());
viewer.realize();
while (!viewer.done()) {
updateMorph->setWeight(0, 1.0 - viewer.getFrameStamp()->getSimulationTime() / 5.0);
updateMorph->setWeight(1, viewer.getFrameStamp()->getSimulationTime() / 5.0);
viewer.frame();
}