本文整理汇总了C++中ogre::Bone类的典型用法代码示例。如果您正苦于以下问题:C++ Bone类的具体用法?C++ Bone怎么用?C++ Bone使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Bone类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: makeManual
void gkSkeletonLoader::makeManual(gkEntity* ent)
{
Ogre::Entity* oent = ent->getEntity();
if (!oent || !oent->hasSkeleton())
return;
Ogre::SkeletonInstance* inst = oent->getSkeleton();
gkBone::BoneList::Iterator it = m_skeleton->getBoneList().iterator();
while (it.hasMoreElements())
{
gkBone* bone = it.getNext();
if (inst->hasBone(bone->getName()))
{
Ogre::Bone* obone = inst->getBone(bone->getName());
bone->_setOgreBone(obone);
obone->setManuallyControlled(true);
}
}
}
开发者ID:Draion,项目名称:Gamekit,代码行数:26,代码来源:gkOgreSkeletonLoader.cpp
示例2: initAxis
//-------------------------------------------------------------------------------------
void AxisLines::initAxis(Ogre::String boneName, Ogre::Entity* entity, Ogre::SceneManager* mSceneManager)
{
if(isXVisible) /* red */
{
xLine = new DynamicLines(Ogre::RenderOperation::OT_LINE_LIST);
entity->attachObjectToBone(boneName, xLine);
xLine->setMaterial(color1);
}
if(isYVisible) /* green */
{
yLine = new DynamicLines(Ogre::RenderOperation::OT_LINE_LIST);
entity->attachObjectToBone(boneName, yLine);
yLine->setMaterial(color2);
}
if(isZVisible) /* blue */
{
zLine = new DynamicLines(Ogre::RenderOperation::OT_LINE_LIST);
entity->attachObjectToBone(boneName, zLine);
zLine->setMaterial(color3);
}
Ogre::Bone* bone = entity->getSkeleton()->getBone(boneName);
Ogre::Quaternion q = bone->getOrientation();
this->updateLines(q.xAxis(), q.yAxis(), q.zAxis());
}
开发者ID:282114790,项目名称:ogrekinect,代码行数:29,代码来源:AxisLines.cpp
示例3: SetBornPosition
void MyLink::SetBornPosition( int name, float x, float y, float z)
{
Ogre::Bone *bone = mEntity->getSkeleton()->getBone(name);
bone->setManuallyControlled(true);
bone->setPosition(x,y,z);
}
开发者ID:whztt07,项目名称:OgreRTC,代码行数:7,代码来源:MyLink.cpp
示例4: receiveEvent
void PhysicsComponent::receiveEvent(Event* event)
{
if (event->getType() == Event::PHYSICS_UPDATE) {
btTransform transform;
transform.setIdentity();
Ogre::Vector3 position = parent->getNode()->_getDerivedPosition();
Ogre::Quaternion orientation = parent->getNode()->_getDerivedOrientation();
if (this->getParent()->getGraphicComponent()->isAnimated() && false) {
Ogre::Bone* bone = parent->getOgreEntity()->getSkeleton()->getBone(0);
Ogre::Vector3 bone_converted_pos = parent->getNode()
->convertLocalToWorldPosition(bone->_getDerivedPosition());
Ogre::Quaternion bone_converted_or = parent->getNode()
->convertLocalToWorldOrientation(bone->_getDerivedOrientation());
Ogre::Vector3 bonePos =
parent->getNode()->_getDerivedPosition() +
parent->getNode()->_getDerivedOrientation() *
bone_converted_pos;
Ogre::Quaternion boneRot = parent->getNode()->_getDerivedOrientation() * (bone
->getInitialOrientation().Inverse() * bone->_getDerivedOrientation());
position = bone_converted_pos;
orientation = boneRot;
}
transform.setOrigin(BtOgre::Convert::toBullet(position));
transform.setRotation(BtOgre::Convert::toBullet(orientation));
state->setKinematicPos(transform);
}
}
开发者ID:whztt07,项目名称:Mermelin,代码行数:35,代码来源:PhysicsComponent.cpp
示例5: setBoneLocalOrientation
void CAnimatedEntity::setBoneLocalOrientation(std::string boneName, Quaternion localQuat)
{
Ogre::Bone* bone = _entity->getSkeleton()->getBone(boneName);
bone->setManuallyControlled(true);
bone->setOrientation(localQuat);
}
开发者ID:albmarvil,项目名称:The-Eternal-Sorrow,代码行数:8,代码来源:AnimatedEntity.cpp
示例6: getBoneWorldTransform
Transform GfxBody::getBoneWorldTransform (unsigned n)
{
checkBone(n);
Ogre::Bone *bone = skeleton->getBone(n);
Transform t(from_ogre(bone->_getDerivedPosition()), from_ogre(bone->_getDerivedOrientation()), from_ogre(bone->_getDerivedScale()));
updateWorldTransform();
return worldTransform * t;
}
开发者ID:monwarez-grit,项目名称:grit-engine,代码行数:8,代码来源:gfx_body.cpp
示例7: updatePart
void CreatureWeaponAnimation::updatePart(NifOgre::ObjectScenePtr& scene, int slot)
{
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
MWWorld::ContainerStoreIterator it = inv.getSlot(slot);
if (it == inv.end())
{
scene.setNull();
return;
}
MWWorld::Ptr item = *it;
std::string bonename;
if (slot == MWWorld::InventoryStore::Slot_CarriedRight)
bonename = "Weapon Bone";
else
bonename = "Shield Bone";
scene = NifOgre::Loader::createObjects(mSkelBase, bonename, mInsert, item.getClass().getModel(item));
Ogre::Vector3 glowColor = getEnchantmentColor(item);
setRenderProperties(scene, RV_Actors, RQG_Main, RQG_Alpha, 0,
!item.getClass().getEnchantment(item).empty(), &glowColor);
if(scene->mSkelBase)
{
Ogre::SkeletonInstance *skel = scene->mSkelBase->getSkeleton();
if(scene->mSkelBase->isParentTagPoint())
{
Ogre::Node *root = scene->mSkelBase->getParentNode();
if(skel->hasBone("BoneOffset"))
{
Ogre::Bone *offset = skel->getBone("BoneOffset");
root->translate(offset->getPosition());
// It appears that the BoneOffset rotation is completely bogus, at least for light models.
//root->rotate(offset->getOrientation());
root->pitch(Ogre::Degree(-90.0f));
root->scale(offset->getScale());
root->setInitialState();
}
}
updateSkeletonInstance(mSkelBase->getSkeleton(), skel);
}
// TODO:
// type == ESM::PRT_Weapon should get an animation source based on the current offset
// of the weapon attack animation (from its beginning, or start marker?)
std::vector<Ogre::Controller<Ogre::Real> >::iterator ctrl(scene->mControllers.begin());
for(;ctrl != scene->mControllers.end();ctrl++)
{
if(ctrl->getSource().isNull())
ctrl->setSource(Ogre::SharedPtr<NullAnimationTime>(new NullAnimationTime()));
}
}
开发者ID:bwrsandman,项目名称:openmw,代码行数:57,代码来源:creatureanimation.cpp
示例8: SetBornScale
void MyLink::SetBornScale( const char*name, float sx, float sy, float sz)
{
if(mEntity->getSkeleton()->hasBone(name) == true)
{
Ogre::Bone *bone = mEntity->getSkeleton()->getBone(name);
bone->setManuallyControlled(true);
bone->setScale(sx,sy,sz);
}
}
开发者ID:whztt07,项目名称:OgreRTC,代码行数:9,代码来源:MyLink.cpp
示例9: SetBornYaw
void MyLink::SetBornYaw( const char*name, float ang)
{
if(mEntity->getSkeleton()->hasBone(name) == true)
{
Ogre::Bone *bone = mEntity->getSkeleton()->getBone(name);
bone->setManuallyControlled(true);
bone->yaw(Ogre::Degree(ang));
}
}
开发者ID:whztt07,项目名称:OgreRTC,代码行数:9,代码来源:MyLink.cpp
示例10: SetBornOrientation
void MyLink::SetBornOrientation( const char*name, float w, float x, float y, float z)
{
if(mEntity->getSkeleton()->hasBone(name) == true)
{
Ogre::Bone *bone = mEntity->getSkeleton()->getBone(name);
bone->setManuallyControlled(true);
bone->setOrientation(w,x,y,z);
}
}
开发者ID:whztt07,项目名称:OgreRTC,代码行数:9,代码来源:MyLink.cpp
示例11: bone_create_child
//Bone* createChild(unsigned short handle, const Vector3& translate = Vector3::ZERO, const Quaternion& rotate = Quaternion::IDENTITY);
BoneHandle bone_create_child(BoneHandle obj, unsigned short handle, const coiVector3* t, const coiQuaternion* r)
{
Ogre::Bone* bone = static_cast<Ogre::Bone*>(obj);
const Ogre::Vector3 translate(t->x, t->y, t->z);
const Ogre::Quaternion rotate(r->w, r->x, r->y, r->z);
Ogre::Bone* child = bone->createChild(handle, translate, rotate);
return static_cast<BoneHandle>(child);
}
开发者ID:fire-archive,项目名称:llcoi,代码行数:11,代码来源:bone_bind.cpp
示例12: setBoneWorldOrientation
void CAnimatedEntity::setBoneWorldOrientation(std::string boneName, Quaternion worldQuat)
{
Ogre::Bone* bone = _entity->getSkeleton()->getBone(boneName);
bone->setManuallyControlled(true);
Ogre::Quaternion parentQuat = _entityNode->_getDerivedOrientation();
Ogre::Quaternion boneQuat = worldQuat.Inverse() * parentQuat;
bone->_setDerivedOrientation(boneQuat);
}
开发者ID:albmarvil,项目名称:The-Eternal-Sorrow,代码行数:11,代码来源:AnimatedEntity.cpp
示例13: getBoneWorldOrientation
Quaternion CAnimatedEntity::getBoneWorldOrientation(std::string boneName)
{
Ogre::Bone* bone = _entity->getSkeleton()->getBone(boneName);
Ogre::SceneNode *parent = _entityNode; /*node of the entity that has the skeleton*/;
Ogre::Quaternion parentQuat = _entityNode->_getDerivedOrientation();
Ogre::Quaternion boneQuat = bone->_getDerivedOrientation();
Ogre::Quaternion worldQuat = boneQuat * parentQuat; // actually, it might be parentQuat * boneQuat, I forgot
return worldQuat;
}
开发者ID:albmarvil,项目名称:The-Eternal-Sorrow,代码行数:12,代码来源:AnimatedEntity.cpp
示例14: getBoneWorldPosition
Vector3 CAnimatedEntity::getBoneWorldPosition(std::string boneName)
{
Ogre::Bone* bone = _entity->getSkeleton()->getBone(boneName);
Ogre::Quaternion parentQuat = _entityNode->_getDerivedOrientation();
Ogre::Vector3 parentPos = _entityNode->_getDerivedPosition();
Ogre::Vector3 bonePos = bone->_getDerivedPosition();
Ogre::Vector3 worldPos = parentQuat * bonePos + parentPos;
return worldPos;
}
开发者ID:albmarvil,项目名称:The-Eternal-Sorrow,代码行数:12,代码来源:AnimatedEntity.cpp
示例15: getWristOrientation
///Get the orientation of the wrist bone
Ogre::Quaternion getWristOrientation()
{
Ogre::Entity* hand = this->Entity();
assert(hand);
Ogre::SkeletonInstance* ske;
Ogre::Bone* wrist;
if(ske = hand->getSkeleton())
if(wrist = ske->getBone("Wrist"))
return wrist->getOrientation();
return Ogre::Quaternion::IDENTITY;
}
开发者ID:Ybalrid,项目名称:LeapRift,代码行数:13,代码来源:HandObject.hpp
示例16: _updateLocatorPos
void VLogicModel::_updateLocatorPos()
{
for (VLocatorMap::iterator itr = mLocators.begin(); itr != mLocators.end(); ++itr)
{
VLocatorValue &tempValue = itr->second;
// 只更新创建出来的(已经使用的)locator node
if (tempValue.mLocatorNode != VNULL)
{
if (!tempValue.mBoneName.empty())
{
Ogre::Bone *bone = VNULL;
try
{
bone = mSkeleton->getBone(tempValue.mBoneName);
}
catch (const Ogre::Exception &e)
{
Ogre::LogManager::getSingleton().logMessage("LogicModel::_updateLocatorPos " + mName + e.getDescription());
continue;
}
assert(bone != VNULL);
Ogre::SceneNode *locatorNode = tempValue.mLocatorNode;
assert(locatorNode != VNULL);
locatorNode->setPosition(bone->_getDerivedPosition());
locatorNode->setOrientation(bone->_getDerivedOrientation());
if (tempValue.mTranslateFirst)
{
// 先平移,再旋转
locatorNode->translate(tempValue.mPosition, Ogre::Node::TS_LOCAL);
locatorNode->rotate(tempValue.mOrientation, Ogre::Node::TS_LOCAL);
}
else
{
// 先旋转,再平移
locatorNode->rotate(tempValue.mOrientation, Ogre::Node::TS_LOCAL);
locatorNode->translate(tempValue.mPosition, Ogre::Node::TS_LOCAL);
}
}
}
}
if (mLocators.size() != 0)
{
mModelMainNode->_update(true, false);
}
}
开发者ID:asnwerear,项目名称:VEngine,代码行数:51,代码来源:VLogicModel.cpp
示例17: _actionIdle
//This is basically just a time-waster
void NPCCharacter::_actionIdle()
{
//want the head to point straight ahead when it's idling
Ogre::Bone* headBone;
Ogre::Skeleton* skel = static_cast<Ogre::Entity*>(_movableObject)->getSkeleton();
headBone = skel->getBone("Bip01_Head");
if(headBone->isManuallyControlled())
{
//rotate it to be aligned with the body.
}
_isActFinished = true;
}
开发者ID:Dar13,项目名称:WastelandArchive,代码行数:15,代码来源:npc_character.cpp
示例18: setBoneWorldPosition
void CAnimatedEntity::setBoneWorldPosition(std::string boneName, Vector3 worldPos)
{
Ogre::Bone* bone = _entity->getSkeleton()->getBone(boneName);
bone->setManuallyControlled(true);
Ogre::Vector3 parentPos = _entityNode->_getDerivedPosition();
Ogre::Vector3 parentQuatXbonePos = worldPos - parentPos;
Ogre::Quaternion parentQuat = _entityNode->_getDerivedOrientation();
Ogre::Vector3 bonePos = parentQuat.Inverse() * parentQuatXbonePos;
Ogre::Vector3 inverseParentScale = 1.0 / _entityNode->_getDerivedScale();
bone->_setDerivedPosition(bonePos * inverseParentScale);
}
开发者ID:albmarvil,项目名称:The-Eternal-Sorrow,代码行数:15,代码来源:AnimatedEntity.cpp
示例19: _initParticle
/** See Ogre::ParticleEmitter. */
void _initParticle(Ogre::Particle *particle)
{
Ogre::Vector3 xOff, yOff, zOff;
// Call superclass
ParticleEmitter::_initParticle(particle);
xOff = Ogre::Math::SymmetricRandom() * mXRange;
yOff = Ogre::Math::SymmetricRandom() * mYRange;
zOff = Ogre::Math::SymmetricRandom() * mZRange;
#if OGRE_VERSION >= (1 << 16 | 10 << 8 | 0)
Ogre::Vector3& position = particle->mPosition;
Ogre::Vector3& direction = particle->mDirection;
Ogre::ColourValue& colour = particle->mColour;
Ogre::Real& totalTimeToLive = particle->mTotalTimeToLive;
Ogre::Real& timeToLive = particle->mTimeToLive;
#else
Ogre::Vector3& position = particle->position;
Ogre::Vector3& direction = particle->direction;
Ogre::ColourValue& colour = particle->colour;
Ogre::Real& totalTimeToLive = particle->totalTimeToLive;
Ogre::Real& timeToLive = particle->timeToLive;
#endif
Ogre::Node* emitterBone = mEmitterBones.at(OEngine::Misc::Rng::rollDice(mEmitterBones.size()));
position = xOff + yOff + zOff +
mParticleBone->_getDerivedOrientation().Inverse() * (emitterBone->_getDerivedPosition()
- mParticleBone->_getDerivedPosition());
// Generate complex data by reference
genEmissionColour(colour);
// NOTE: We do not use mDirection/mAngle for the initial direction.
Ogre::Radian hdir = mHorizontalDir + mHorizontalAngle*Ogre::Math::SymmetricRandom();
Ogre::Radian vdir = mVerticalDir + mVerticalAngle*Ogre::Math::SymmetricRandom();
direction = (mParticleBone->_getDerivedOrientation().Inverse()
* emitterBone->_getDerivedOrientation() *
Ogre::Quaternion(hdir, Ogre::Vector3::UNIT_Z) *
Ogre::Quaternion(vdir, Ogre::Vector3::UNIT_X)) *
Ogre::Vector3::UNIT_Z;
genEmissionVelocity(direction);
// Generate simpler data
timeToLive = totalTimeToLive = genEmissionTTL();
}
开发者ID:AAlderman,项目名称:openmw,代码行数:49,代码来源:particles.cpp
示例20: PushOgreBone
void IKChain::PushOgreBone(Ogre::Bone* OgreBone)
{
Ogre::Bone* oBone = OgreBone;
Ogre::Vector3 vecBonePos = oBone->getPosition();
oBone->setManuallyControlled(true);
IKJoint* oJoint = NULL;
if ( mLastPush == NULL )
{
// Root
oJoint = new IKJoint(oBone, NULL, oBone->getPosition().x + mMeshNode->getPosition().x, oBone->getPosition().y + mMeshNode->getPosition().y, oBone->getPosition().z + mMeshNode->getPosition().z);
mIKRoot = oJoint;
mJointCount = 1;
}
else
{
// Not root
Ogre::Vector3 vecParent = mLastPush->GetOgreBone()->_getDerivedPosition();
Ogre::Vector3 vecDerived = oBone->_getDerivedPosition();
Ogre::Vector3 vecJointPos = oBone->_getDerivedPosition() + mMeshNode->getPosition();
oJoint = new IKJoint(oBone, mLastPush, vecJointPos.x, vecJointPos.y, vecJointPos.z);
mLastPush->SetChild(oJoint);
mJointCount++;
mChainLength += vecParent.distance(oBone->_getDerivedPosition());
}
mLastPush = oJoint;
mIKEffector = oJoint;
cout << "Joint count " << mJointCount << endl;
}
开发者ID:sandsmark,项目名称:loom,代码行数:28,代码来源:IKChain.cpp
注:本文中的ogre::Bone类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论