当前位置: 首页>>代码示例>>C++>>正文


C++ Quaternion::UnitInverse方法代码示例

本文整理汇总了C++中ogre::Quaternion::UnitInverse方法的典型用法代码示例。如果您正苦于以下问题:C++ Quaternion::UnitInverse方法的具体用法?C++ Quaternion::UnitInverse怎么用?C++ Quaternion::UnitInverse使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ogre::Quaternion的用法示例。


在下文中一共展示了Quaternion::UnitInverse方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: OnEntityAttributeChanged


//.........这里部分代码省略.........
	else if( Name == "Scale" )
	{
		// Set the scale, if it is available
		const vec3* Data = boost::get<vec3>( Attribute );

		if( Data )
			mNode->setScale( *Data );
	}
	else if ( Name == "Model" )
	{
		// Delete all old bone names
		if ( mOgreEntity )
		{
			typedef Ogre::SkeletonInstance::BoneIterator iterator;
			Ogre::SkeletonInstance* Skeleton=
			        mOgreEntity->getSkeleton();
			for ( iterator i=Skeleton->getBoneIterator();
			      i.hasMoreElements();
			      )
			{
				Ogre::Bone* Bone=i.getNext();
				GetDataEntity()->RemoveAttribute( Bone->getName());
			}

			mNode->detachObject( mOgreEntity );
			GetSceneManager()->destroyEntity( mOgreEntity );
			mOgreEntity=0;
		}



		const std::string* Data=boost::get<std::string>( Attribute );

		if (!Data)
			return;

		// Create and attach the model entity
		const std::string EntityName = "Entity:" +
		                               boost::lexical_cast<std::string>(
		        GetDataEntity() );
		mOgreEntity = GetSceneManager()->createEntity( EntityName,
			*Data );
		mNode->attachObject( mOgreEntity );

		// Get all bones as properties
		typedef Ogre::SkeletonInstance::BoneIterator iterator;
		Ogre::SkeletonInstance* Skeleton=mOgreEntity->getSkeleton();
		Skeleton->setBindingPose();
		for ( iterator i=Skeleton->getBoneIterator(); i.hasMoreElements(); )
		{
			Ogre::Bone* Bone=i.getNext();
			Bone->setManuallyControlled( true );
			const std::string Name=Bone->getName();

			const quat Val = Bone->getOrientation();

			// if this attribute has already a attribute, do not overwrite it and inform observers (to  get visualize the orientation here)
			if ( GetDataEntity()->GetAttribute( Name ) == 0 )
			{
				GetDataEntity()->Set<quat>( Name, Val );
			}
			else
			{
				GetDataEntity()->Changed( Name,
					GetDataEntity()->GetAttribute( Name ));
			}
		}
	}
	else if (Rhs->GetAttribute( "Model" ) != 0)
	{
		const Entity::AttributeType& Attributes=Rhs->GetAttributes();
		typedef Entity::AttributeType::value_type ValueType;

		// Check if this is an angle value and a bone of this name exists
		Ogre::SkeletonInstance* Skeleton=mOgreEntity->getSkeleton();
		const quat*             Val = boost::get<quat>( Attribute );

		if ( Val && Skeleton->hasBone( Name ) )
		{
			Ogre::Bone* Bone=Skeleton->getBone( Name );

			Ogre::Quaternion CorrectorX;
			CorrectorX.FromAngleAxis( Ogre::Radian( Ogre::Degree( -
						90 ) ), vec3( 1.f, 0.f, 0.f ) );
			Ogre::Quaternion CorrectorZ;
			CorrectorZ.FromAngleAxis( Ogre::Radian( Ogre::Degree(
						90 ) ), vec3( 0.f, 0.f, 1.f ) );

			Ogre::Quaternion Corrector = CorrectorX * CorrectorZ;

			Bone->setOrientation(
				Bone->getInitialOrientation() * Corrector *
				( *Val ) *
				Corrector.UnitInverse() );

			// FIXME: is this really needed?
			mOgreEntity->getAllAnimationStates()->_notifyDirty();
		}
	}
}
开发者ID:LiMuBei,项目名称:ovise,代码行数:101,代码来源:VoodooEntityView.cpp


注:本文中的ogre::Quaternion::UnitInverse方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。