osgAnimation.StackedMatrixElement是OpenSceneGraph中的一个类,用于实现一个由多个矩阵组成的堆栈,可以用于实现动画序列中的矩阵变换。
osg::Object -> osgAnimation::AnimationElement -> osgAnimation::StackedMatrixElement
StackedMatrixElement()构造函数。
StackedMatrixElement(const StackedMatrixElement& element, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY)拷贝构造函数。
virtual const char* libraryName() const返回类库名称,固定为“osgAnimation”。
virtual const char* className() const返回类名称,固定为“StackedMatrixElement”。
virtual void update(double dt)更新堆栈中矩阵的状态,dt为时间步长。
virtual void reset()重置矩阵堆栈。
void setMatrix(const osg::Matrix& matrix)设置堆栈顶部的矩阵。
void pushMatrix(const osg::Matrix& matrix)将矩阵压入堆栈。
void popMatrix()从堆栈中弹出顶部的矩阵。
osg::Matrixd getMatrix() const获取堆栈顶部的矩阵。
std::vector<osg::Matrixd> getMatrices() const获取堆栈中的所有矩阵。
#include <osg/MatrixTransform>
#include <osgAnimation/StackedMatrixElement>
osg::ref_ptr<osg::MatrixTransform> createAnimatedNode()
{
osg::ref_ptr<osg::MatrixTransform> node = new osg::MatrixTransform;
osg::ref_ptr<osgAnimation::StackedMatrixElement> stack = new osgAnimation::StackedMatrixElement;
node->setUpdateCallback(stack.get());
// 添加动画序列
stack->pushMatrix(osg::Matrix::translate(osg::Vec3(0, 0, 0)));
stack->pushMatrix(osg::Matrix::rotate(osg::PI, osg::Vec3(1, 0, 0)));
stack->pushMatrix(osg::Matrix::scale(osg::Vec3(1, 2, 1)));
return node;
}
以上示例代码创建了一个可动画变换的矩阵节点,并添加了一个包含3个基本操作的矩阵变换堆栈,该节点可以被加入场景图中并进行渲染。