本文整理汇总了C++中ogre::SkeletonPtr::getNumBones方法的典型用法代码示例。如果您正苦于以下问题:C++ SkeletonPtr::getNumBones方法的具体用法?C++ SkeletonPtr::getNumBones怎么用?C++ SkeletonPtr::getNumBones使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ogre::SkeletonPtr
的用法示例。
在下文中一共展示了SkeletonPtr::getNumBones方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PrepareMesh
Ogre::Mesh* EC_Mesh::PrepareMesh(const std::string& mesh_name, bool clone)
{
if (!ViewEnabled())
return 0;
if (renderer_.expired())
return 0;
RendererPtr renderer = renderer_.lock();
Ogre::MeshManager& mesh_mgr = Ogre::MeshManager::getSingleton();
Ogre::MeshPtr mesh = mesh_mgr.getByName(SanitateAssetIdForOgre(mesh_name));
// For local meshes, mesh will not get automatically loaded until used in an entity. Load now if necessary
if (mesh.isNull())
{
try
{
mesh_mgr.load(mesh_name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
mesh = mesh_mgr.getByName(mesh_name);
}
catch (Ogre::Exception& e)
{
LogError("Could not load mesh " + mesh_name + ": " + std::string(e.what()));
return 0;
}
}
// If mesh is still null, must abort
if (mesh.isNull())
{
LogError("Mesh " + mesh_name + " does not exist");
return 0;
}
if (clone)
{
try
{
mesh = mesh->clone(renderer->GetUniqueObjectName("EC_Mesh_clone"));
mesh->setAutoBuildEdgeLists(false);
cloned_mesh_name_ = mesh->getName();
}
catch (Ogre::Exception& e)
{
LogError("Could not clone mesh " + mesh_name + ":" + std::string(e.what()));
return 0;
}
}
if (mesh->hasSkeleton())
{
Ogre::SkeletonPtr skeleton = Ogre::SkeletonManager::getSingleton().getByName(mesh->getSkeletonName());
if (skeleton.isNull() || skeleton->getNumBones() == 0)
{
LogDebug("Mesh " + mesh_name + " has a skeleton with 0 bones. Disabling the skeleton.");
mesh->setSkeletonName("");
}
}
return mesh.get();
}
示例2: length
//-------------------------------------------------------------------------
void
AFile::addTo( Ogre::SkeletonPtr skeleton, const String& name ) const
{
if( skeleton->hasAnimation( name) ) return;
Ogre::Real length( ( m_frames.size() - 1 ) * FRAME_DURATION );
Ogre::Animation *anim( skeleton->createAnimation(name, length ));
uint16 track_handle( 0 );
Ogre::Bone* bone( skeleton->getBone( "root" ) );
Ogre::NodeAnimationTrack* track;
track = anim->createNodeTrack( track_handle++, bone );
Ogre::Real time;
size_t index( 0 );
for( FrameList::const_iterator frame( m_frames.begin())
;frame != m_frames.end(); ++frame )
{
time = (index++) * FRAME_DURATION;
Ogre::TransformKeyFrame* key_frame( track->createNodeKeyFrame( time ) );
key_frame->setTranslate( frame->root_translation );
setFrameRotation( key_frame, frame->root_rotation );
}
for( uint32 i(0); i < m_bone_count; ++i )
{
if (i + 1 >= skeleton->getNumBones())
{
// TODO: Figure out why this happens/fix it
LOG_ERROR("Bone " + std::to_string(i + 1) + " is out of bounds " + std::to_string(skeleton->getNumBones()) + " for: " + name + " in: " + skeleton->getName());
}
else
{
bone = skeleton->getBone(i + 1);
track = anim->createNodeTrack(track_handle++, bone);
time = 0;
for (FrameList::const_iterator frame(m_frames.begin())
; frame != m_frames.end(); ++frame)
{
const Ogre::Vector3& rot(frame->bone_rotations[i]);
Ogre::TransformKeyFrame* key_frame(track->createNodeKeyFrame(time));
setFrameRotation(key_frame, rot);
time += FRAME_DURATION;
}
}
}
}