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个基本操作的矩阵变换堆栈,该节点可以被加入场景图中并进行渲染。