osgAnimation.RigTransformHardware是OpenSceneGraph动画库(osgAnimation)中一个硬件蒙皮动画节点。
该节点实现了通过硬件加速的蒙皮动画,可以在实时应用动画时提高性能。同时,它还可以在不同的线程中使用,提高多线程渲染时的效率。
要进行蒙皮动画的RigGeometry对象。
控制蒙皮动画的骨骼调色板Uniform。
控制每个实例的权重Uniform。
蒙皮动画实例的数量。
是否每帧都解除绑定。如果开启,可以在多个线程中使用。
void setRigGeometry(osgAnimation::RigGeometry* rigGeom);
设置要进行蒙皮动画的RigGeometry对象。
osgAnimation::RigGeometry* getRigGeometry();
获取要进行蒙皮动画的RigGeometry对象。
void setPaletteUniform(osg::Uniform* paletteUniform);
设置骨骼调色板Uniform。
osg::Uniform* getPaletteUniform();
获取骨骼调色板Uniform。
void setInstanceWeightsUniform(osg::Uniform* instanceWeightsUniform);
设置每个实例的权重Uniform。
osg::Uniform* getInstanceWeightsUniform();
获取每个实例的权重Uniform。
void setNumInstances(unsigned int numInstances);
设置蒙皮动画实例的数量。
unsigned int getNumInstances() const;
获取蒙皮动画实例的数量。
void setUnbindPerFrame(bool unbindPerFrame);
设置是否每帧都解除绑定。如果开启,可以在多个线程中使用。
bool getUnbindPerFrame() const;
获取是否每帧都解除绑定。
osg::ref_ptr<osgAnimation::RigTransformHardware> hwRigTransform = new osgAnimation::RigTransformHardware;
// 设置RigGeometry对象
osg::ref_ptr<osgAnimation::RigGeometry> rigGeom = createRigGeometry();
hwRigTransform->setRigGeometry(rigGeom);
// 设置骨骼调色板Uniform
osg::ref_ptr<osg::Uniform> paletteUniform = new osg::Uniform(osg::Uniform::FLOAT_MAT4, "palette", MAX_PALETTE_SIZE);
hwRigTransform->setPaletteUniform(paletteUniform);
// 设置每个实例的权重Uniform
osg::ref_ptr<osg::Uniform> instanceWeightsUniform = new osg::Uniform(osg::Uniform::FLOAT, "instanceWeights", MAX_INSTANCES);
hwRigTransform->setInstanceWeightsUniform(instanceWeightsUniform);
// 设置蒙皮动画实例的数量
hwRigTransform->setNumInstances(numInstances);
// 设置是否每帧都解除绑定
hwRigTransform->setUnbindPerFrame(true);