Store the RigGeometry's source vertices and normals directly

pull/918/head
scrawl 9 years ago
parent 6f31b3d79f
commit 7a347e3483

@ -82,12 +82,14 @@ RigGeometry::RigGeometry(const RigGeometry &copy, const osg::CopyOp &copyop)
, mLastFrameNumber(0)
, mBoundsFirstFrame(true)
{
setSourceGeometry(copy.mSourceGeometry);
mSourceVertices = copy.mSourceVertices;
mSourceNormals = copy.mSourceNormals;
}
void RigGeometry::setSourceGeometry(osg::ref_ptr<osg::Geometry> sourceGeometry)
{
mSourceGeometry = sourceGeometry;
mSourceVertices = static_cast<osg::Vec3Array*>(sourceGeometry->getVertexArray());
mSourceNormals = static_cast<osg::Vec3Array*>(sourceGeometry->getNormalArray());
osg::Geometry& from = *sourceGeometry;
@ -223,8 +225,8 @@ void RigGeometry::update(osg::NodeVisitor* nv)
mSkeleton->updateBoneMatrices(nv);
// skinning
osg::Vec3Array* positionSrc = static_cast<osg::Vec3Array*>(mSourceGeometry->getVertexArray());
osg::Vec3Array* normalSrc = static_cast<osg::Vec3Array*>(mSourceGeometry->getNormalArray());
osg::Vec3Array* positionSrc = mSourceVertices;
osg::Vec3Array* normalSrc = mSourceNormals;
osg::Vec3Array* positionDst = static_cast<osg::Vec3Array*>(getVertexArray());
osg::Vec3Array* normalDst = static_cast<osg::Vec3Array*>(getNormalArray());

@ -41,6 +41,7 @@ namespace SceneUtil
/// Initialize this geometry from the source geometry.
/// @note The source geometry will not be modified.
/// @note The source geometry's normal and vertex arrays must be an osg::Vec3Array.
void setSourceGeometry(osg::ref_ptr<osg::Geometry> sourceGeom);
// Called automatically by our CullCallback
@ -50,7 +51,8 @@ namespace SceneUtil
void updateBounds(osg::NodeVisitor* nv);
private:
osg::ref_ptr<osg::Geometry> mSourceGeometry;
osg::ref_ptr<osg::Vec3Array> mSourceVertices;
osg::ref_ptr<osg::Vec3Array> mSourceNormals;
Skeleton* mSkeleton;
osg::NodePath mSkelToGeomPath;

Loading…
Cancel
Save