本文整理汇总了C++中ogre::Node类的典型用法代码示例。如果您正苦于以下问题:C++ Node类的具体用法?C++ Node怎么用?C++ Node使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Node类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: GetBoneWorldPosition
Ogre::Vector3 GetBoneWorldPosition(Ogre::Entity* ent, Ogre::Bone* bone)
{
Vector3 world_position = bone->_getDerivedPosition();
//multiply with the parent derived transformation
Ogre::Node *pParentNode = ent->getParentNode();
Ogre::SceneNode *pSceneNode = ent->getParentSceneNode();
while (pParentNode != NULL)
{
//process the current i_Node
if (pParentNode != pSceneNode)
{
//this is a tag point (a connection point between 2 entities). which means it has a parent i_Node to be processed
world_position = pParentNode->_getFullTransform() * world_position;
pParentNode = pParentNode->getParent();
}
else
{
//this is the scene i_Node meaning this is the last i_Node to process
world_position = pParentNode->_getFullTransform() * world_position;
break;
}
}
return world_position;
}
开发者ID:zarthcode,项目名称:DecaFlex,代码行数:25,代码来源:ObjectTextDisplay.cpp
示例2: assert
//-----------------------------------------------------------------------
const Ogre::Quaternion&
BasicRenderable::getWorldOrientation(void) const
{
Ogre::Node* n = mParent->getParentNode();
assert(n);
return n->_getDerivedOrientation();
}
开发者ID:gitrider,项目名称:wxsj2,代码行数:8,代码来源:BasicRenderable.cpp
示例3: getBase
Ogre::SceneNode * WheelAnimalSceneObj::getBaseCenter()
{
if(_sn == NULL)
{
_sn = Orz::OgreGraphicsManager::getSingleton().getSceneManager()->getRootSceneNode()->createChildSceneNode(getCenterPoint());
//_sn->yaw(Ogre::Radian(Ogre::Math::PI));
for(int i=0 ; i<(BASE_ALL-BASE_0); ++i)
{
Ogre::SceneNode * base = getBase(i);
Ogre::Node * parent = base->getParent();
Ogre::Vector3 p = base->getPosition();
if(parent)
{
parent->removeChild(base);
}
base->translate(-getCenterPoint());
_sn->addChild(base);
Ogre::SceneManager * sm = OgreGraphicsManager::getSingleton().getSceneManager();
Ogre::Entity * ent = sm->createEntity("ring"+Ogre::StringConverter::toString(i), "zp_dwdzgh.mesh");
Ogre::SceneNode * node = base->createChildSceneNode("ring"+Ogre::StringConverter::toString(i),Ogre::Vector3(0.f, 10.f, 0.f));
node->setScale(0.6f,0.6f,0.6f);
node->attachObject(ent);
Orz::OgreGraphicsManager::getSingleton().getSceneManager()->getSceneNode("ring"+Ogre::StringConverter::toString(i))->setVisible(false);
}
}
return _sn;
}
开发者ID:dbabox,项目名称:aomi,代码行数:27,代码来源:WheelAnimalSceneObj.cpp
示例4: createCollision
void PlaneNodeProcessor::createCollision(Ogre::Entity *entity, DOMElement *physicsProxyElem)
{
bool collisionEnabled = false;
if (physicsProxyElem == NULL || !hasAttribute(physicsProxyElem, "collision"))
collisionEnabled = false;
else if(getAttributeValueAsBool(physicsProxyElem, "collision"))
collisionEnabled = true;
if(collisionEnabled)
{
std::vector<OgreNewt::CollisionPtr> collisions;
OgreNewt::CollisionPtr collision = OgreNewt::CollisionPtr();
OgreNewt::World* world = PhysicsManager::getSingleton()._getNewtonWorld();
const AxisAlignedBox &aab = entity->getMesh()->getBounds();
Ogre::Node* parentNode = entity->getParentNode();
Ogre::Vector3 size = (aab.getMaximum() - aab.getMinimum()) * parentNode->getScale();
const Quaternion orientation(0,0,0,0);// = parentNode->getOrientation();
const Ogre::Vector3 pos = aab.getMinimum() * parentNode->getScale() + (size/2.0);
collision = PhysicsManager::getSingleton().createCollision(entity, GT_BOX, "", Vector3::ZERO, Quaternion::IDENTITY, 0, NULL, NULL, true);
if ( collision != NULL )
{
collisions.push_back(collision);
}
// Add to physics of map
if (collisions.size() > 0)
{
PhysicsManager::getSingleton().addLevelGeometry(entity, collisions);
LOG_WARNING(Logger::RULES, " Plane '"+entity->getName()+"' in levelGeometry geladen");
}
}
}
开发者ID:BackupTheBerlios,项目名称:dsa-hl-svn,代码行数:35,代码来源:PlaneNodeProcessor.cpp
示例5: 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
示例6: _destroyAll
//-----------------------------------------------------------------------
void EntityRenderer::_destroyAll(void)
{
if (!mParentTechnique)
return;
// Delete the visual data
vector<EntityRendererVisualData*>::const_iterator it;
vector<EntityRendererVisualData*>::const_iterator itEnd = mAllVisualData.end();
for (it = mAllVisualData.begin(); it != itEnd; ++it)
{
PU_DELETE_T(*it, EntityRendererVisualData, MEMCATEGORY_SCENE_OBJECTS);
}
mAllVisualData.clear();
mVisualData.clear();
// V1.5: Destroy the created ChildSceneNodes (which leads to detaching the Entities)
if (mParentTechnique->getParentSystem())
{
Ogre::SceneNode* parentNode = mParentTechnique->getParentSystem()->getParentSceneNode();
if (parentNode)
{
String sceneNodeName;
std::stringstream ss;
unsigned short numChilds = parentNode->numChildren();
for (unsigned short i = 0; i < numChilds; ++i)
{
Ogre::Node* node = parentNode->getChild(i);
if (node)
{
Ogre::String name = node->getName();
if (name.find("ParticleUniverse") != Ogre::String::npos)
{
parentNode->removeAndDestroyChild(i);
}
}
}
}
} // V1.5
// Destroy the Entities. Do it like this, because it must be assured that the entity still exists
// and has not already been destroyed.
Ogre::SceneManager* sceneManager = mParentTechnique->getParentSystem()->getSceneManager();
for (size_t i = 0; i < mQuota; i++)
{
if (sceneManager->hasEntity(mEntityName + StringConverter::toString(i)))
{
sceneManager->destroyEntity(mEntityName + StringConverter::toString(i));
}
}
mEntities.clear();
// Reset the visual data in the pool
mParentTechnique->initVisualDataInPool();
}
开发者ID:Ketzer2002,项目名称:meridian59-engine,代码行数:57,代码来源:ParticleUniverseEntityRenderer.cpp
示例7: fillBatch
void ObjectAnimation::fillBatch(Ogre::StaticGeometry *sg)
{
std::vector<Ogre::Entity*>::reverse_iterator iter = mObjectRoot->mEntities.rbegin();
for(;iter != mObjectRoot->mEntities.rend();++iter)
{
Ogre::Node *node = (*iter)->getParentNode();
if ((*iter)->isVisible())
sg->addEntity(*iter, node->_getDerivedPosition(), node->_getDerivedOrientation(), node->_getDerivedScale());
}
}
开发者ID:Chiur,项目名称:openmw,代码行数:10,代码来源:animation.cpp
示例8: _process
//-----------------------------------------------------------------------
void ParticleSystem::_process(ParticleTechnique* technique, Real timeElapsed)
{
// Inherited from the Particle class and is only called if the Particle System is emitted.
// Update node position.
Particle::_process(technique, timeElapsed);
Ogre::Node* node = technique->getParentSystem()->getParentNode();
if (mParentNode && node)
{
// position attribute is derived, but the the parentNode position must be set in relation to its parent.
mParentNode->setPosition(position - node->getPosition());
}
}
开发者ID:Ketzer2002,项目名称:meridian59-engine,代码行数:13,代码来源:ParticleUniverseSystem.cpp
示例9: _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
示例10: setRot
void Player::setRot(float x, float y, float z)
{
Ogre::SceneNode *sceneNode = mNode;
Ogre::Node* yawNode = sceneNode->getChildIterator().getNext();
Ogre::Node* pitchNode = yawNode->getChildIterator().getNext();
// we are only interested in X and Y rotation
// Rotate around X axis
Ogre::Quaternion xr(Ogre::Radian(x), Ogre::Vector3::UNIT_X);
// Rotate around Y axis
Ogre::Quaternion yr(Ogre::Radian(-z), Ogre::Vector3::UNIT_Y);
pitchNode->setOrientation(xr);
yawNode->setOrientation(yr);
}
开发者ID:BungaDunga,项目名称:openmw,代码行数:17,代码来源:player.cpp
示例11: updateGravity
void InputListener::updateGravity(const Ogre::FrameEvent& evt)
{
for (std::list<PhysBody>::iterator it = this->_PhysicList->begin(); it != this->_PhysicList->end(); it++)
{
Ogre::Node *node = this->_SceneMgr->getRootSceneNode()->getChild(it->getName());
Worms *worm;
worm = this->_Game->findWormByName(it->getName());
if (!this->_CollisionMgr->isCollidedToStatic(it->getName(), CollisionManager::DOWN) && node->getPosition().y > 0 && !this->_Game->getTeleportActivated())
{
if (!this->_CollisionMgr->isCollidedToStatic(it->getName(), CollisionManager::DOWN))
node->translate(0, -1 * it->getWeight() * evt.timeSinceLastFrame, 0);
worm->fall(1);
}
else
worm->fall(0);
}
}
开发者ID:vladydan,项目名称:Indie-Worms-3D,代码行数:18,代码来源:InputListener.cpp
示例12: unLoad
bool FaSoundEditor::unLoad()
{
if(!mLoaded->get())
return true;
destroyBoundingBox();
if(mHandle)
{
Ogre::Node *parent = mHandle->getParent();
parent->removeChild(mHandle);
mOgitorsRoot->GetSceneManager()->destroySceneNode(mHandle);
mOgitorsRoot->GetSceneManager()->destroyEntity(mEntity);
mHandle = 0;
mEntity = 0;
}
mLoaded->set(false);
return true;
}
开发者ID:shua,项目名称:Ogitor-Facade-Plugins,代码行数:20,代码来源:FaSound.cpp
示例13: scaleAndTestMount
void scaleAndTestMount(TestModel& model, Model::ModelMount& mount, const Ogre::Node& node)
{
WFMath::AxisBox<3> axisBox(WFMath::Point<3>(0, 0, 0), WFMath::Point<3>(10, 10, 10));
model.bbox = Ogre::AxisAlignedBox(Ogre::Vector3(0, 0, 0), Ogre::Vector3(5, 5, 5));
mount.rescale(&axisBox);
CPPUNIT_ASSERT(node.getScale() == Ogre::Vector3(2, 2, 2));
model.bbox = Ogre::AxisAlignedBox(Ogre::Vector3(0, 0, 0), Ogre::Vector3(20, 20, 20));
mount.rescale(&axisBox);
CPPUNIT_ASSERT(node.getScale() == Ogre::Vector3(0.5, 0.5, 0.5));
model.bbox = Ogre::AxisAlignedBox(Ogre::Vector3(10, 10, 10), Ogre::Vector3(20, 20, 20));
mount.rescale(&axisBox);
CPPUNIT_ASSERT(node.getScale() == Ogre::Vector3(1, 1, 1));
model.bbox = Ogre::AxisAlignedBox(Ogre::Vector3(0, 10, 15), Ogre::Vector3(20, 20, 20));
mount.rescale(&axisBox);
CPPUNIT_ASSERT(node.getScale() == Ogre::Vector3(2, 1, 0.5));
}
开发者ID:bregma,项目名称:ember,代码行数:21,代码来源:ModelMountTestCase.cpp
示例14: loadPage
void EmberEntityLoader::loadPage(::Forests::PageInfo & page)
{
static Ogre::ColourValue colour(1, 1, 1, 1);
#if EMBERENTITYLOADER_USEBATCH
const int batchX = static_cast<int>(Ogre::Math::Floor(page.bounds.left/ mBatchSize));
const int batchY = static_cast<int>(Ogre::Math::Floor(page.bounds.top / mBatchSize));
EntityMap& entities(mEntities[batchX][batchY]);
#else
EntityMap& entities(mEntities);
#endif
for (EntityMap::iterator I = entities.begin(); I != entities.end(); ++I) {
ModelRepresentationInstance& instance(I->second);
Model::ModelRepresentation* modelRepresentation(instance.modelRepresentation);
EmberEntity& emberEntity = modelRepresentation->getEntity();
if (emberEntity.isVisible()) {
WFMath::Point<3> viewPos = emberEntity.getViewPosition();
if (viewPos.isValid()) {
Ogre::Vector3 pos(Convert::toOgre(viewPos));
Model::Model& model(modelRepresentation->getModel());
Ogre::Node* node = model.getParentNode();
if (node) {
const Ogre::Vector3& pos = node->_getDerivedPosition();
if (pos.x > page.bounds.left && pos.x < page.bounds.right && pos.z > page.bounds.top && pos.z < page.bounds.bottom) {
for (Model::Model::SubModelSet::const_iterator J = model.getSubmodels().begin(); J != model.getSubmodels().end(); ++J) {
// if (!(*J)->getEntity()->getParentSceneNode()) {
// model->getParentSceneNode()->attachObject((*J)->getEntity());
// }
// if ((*J)->getEntity()->isVisible()) {
addEntity((*J)->getEntity(), pos, node->_getDerivedOrientation(), modelRepresentation->getScale(), colour);
// (*J)->getEntity()->setVisible(false);
// }
}
}
}
}
}
}
}
开发者ID:junrw,项目名称:ember,代码行数:40,代码来源:EmberEntityLoader.cpp
示例15: update
//-----------------------------------------------------------------------------------------
void CollisionCameraController::update(float timeSinceLast) {
Ogre::Camera* camera = mGraphicsSystem->getCamera();
Ogre::Node* cameraNode = camera->getParentNode();
{
btTransform transform = mGhostObject->getWorldTransform();
btQuaternion q = transform.getRotation();
q *= btQuaternion(btVector3(0, 1, 0), mCameraYaw);
mGhostObject->getWorldTransform().setRotation(q);
}
camera->pitch(Ogre::Radian(mCameraPitch));
mCameraYaw = 0.0f;
mCameraPitch = 0.0f;
int camMovementZ = mKeymapState[Backward].second - mKeymapState[Forward].second;
int camMovementX = mKeymapState[Rightward].second - mKeymapState[Leftward].second;
int slideUpDown = mKeymapState[Up].second - mKeymapState[Down].second;
Ogre::Vector3 camMovementDir(camMovementX, slideUpDown, camMovementZ);
camMovementDir.normalise();
camMovementDir *= timeSinceLast * mCameraBaseSpeed * (1 + mSpeedModifier * mCameraSpeedBoost);
if (camMovementDir.y > 0) {
mCharacter->jump();
camMovementDir.y = 0;
}
mCharacter->setWalkDirection(Collision::Converter::to(Collision::Converter::to(mGhostObject->getWorldTransform().getRotation()) * camMovementDir));
{
Ogre::Node* cameraNode = camera->getParentNode();
Ogre::Quaternion q;
q = q * (Collision::Converter::to(mGhostObject->getWorldTransform().getRotation()));
q = q * Ogre::Quaternion(cameraNode->getOrientation().getPitch(), Ogre::Vector3(1, 0, 0));
cameraNode->setOrientation(q);
cameraNode->setPosition(Collision::Converter::to(mGhostObject->getWorldTransform().getOrigin() /* + btVector3(0,1.8,0)*/));
}
}
开发者ID:Swarthon,项目名称:LeDernierMorkid,代码行数:40,代码来源:CollisionCameraController.cpp
示例16: updateCam
void InputListener::updateCam(const Ogre::FrameEvent& evt, Worms *_current)
{
Ogre::Vector3 deplacement = Ogre::Vector3::ZERO;
if (this->_fixedCam)
{
if (this->_Keyboard->isKeyDown(OIS::KC_W))
{
this->_CamSupposedPosition = Ogre::Vector3(600, 250.0, 950);
}
else
{
this->_CamSupposedPosition = _current->getNode()->getPosition() - Ogre::Vector3(0, 0, -300);
}
}
if (!this->_fixedCam)
{
Ogre::Vector3 mov = this->_Mouvement;
if (this->_currentScene->getCamera()->getPosition().x < 100)
mov.x = 1;
if (this->_currentScene->getCamera()->getPosition().x > 1200)
mov.x = -1;
if (this->_currentScene->getCamera()->getPosition().y < 50)
mov.y = 1;
if (this->_currentScene->getCamera()->getPosition().y > 510)
mov.y = -1;
if (this->_currentScene->getCamera()->getPosition().z < 50)
mov.z = 1;
if (this->_currentScene->getCamera()->getPosition().z > 510)
mov.z = -1;
deplacement = mov * this->_Vitesse * evt.timeSinceLastFrame;
this->_currentScene->getCamera()->moveRelative(deplacement);
}
else
this->_currentScene->getCamera()->setPosition(this->_currentScene->getCamera()->getPosition() + ((this->_CamSupposedPosition - this->_currentScene->getCamera()->getPosition()) * 0.05f));
Ogre::Node *node = this->_WormsApp->getSceneManager()->getScene("PlayScene")->getScene()->getRootSceneNode()->getChild("CrossHair");
node->setPosition(_current->getNode()->getPosition().x + 40 * cos(_current->getAngle()), _current->getNode()->getPosition().y + 40 * sin(_current->getAngle()), 30);
}
开发者ID:vladydan,项目名称:Indie-Worms-3D,代码行数:38,代码来源:InputListener.cpp
示例17: doPhysics
void PhysicsSystem::doPhysics(float dt, const std::vector<std::pair<std::string, Ogre::Vector3> >& actors)
{
//set the DebugRenderingMode. To disable it,set it to 0
//eng->setDebugRenderingMode(1);
//set the walkdirection to 0 (no movement) for every actor)
for(std::map<std::string,OEngine::Physic::PhysicActor*>::iterator it = mEngine->PhysicActorMap.begin(); it != mEngine->PhysicActorMap.end();it++)
{
OEngine::Physic::PhysicActor* act = it->second;
act->setWalkDirection(btVector3(0,0,0));
}
playerMove::playercmd& pm_ref = playerphysics->cmd;
pm_ref.rightmove = 0;
pm_ref.forwardmove = 0;
pm_ref.upmove = 0;
//playerphysics->ps.move_type = PM_NOCLIP;
for (std::vector<std::pair<std::string, Ogre::Vector3> >::const_iterator iter (actors.begin());
iter!=actors.end(); ++iter)
{
//dirty stuff to get the camera orientation. Must be changed!
Ogre::SceneNode *sceneNode = mRender.getScene()->getSceneNode (iter->first);
Ogre::Vector3 dir;
Ogre::Node* yawNode = sceneNode->getChildIterator().getNext();
Ogre::Node* pitchNode = yawNode->getChildIterator().getNext();
Ogre::Quaternion yawQuat = yawNode->getOrientation();
Ogre::Quaternion pitchQuat = pitchNode->getOrientation();
playerphysics->ps.viewangles.x = pitchQuat.getPitch().valueDegrees();
playerphysics->ps.viewangles.y = yawQuat.getYaw().valueDegrees() *-1 + 90;
Ogre::Quaternion quat = yawNode->getOrientation();
Ogre::Vector3 dir1(iter->second.x,iter->second.z,-iter->second.y);
pm_ref.rightmove = -iter->second.x;
pm_ref.forwardmove = -iter->second.y;
pm_ref.upmove = iter->second.z;
}
mEngine->stepSimulation(dt);
}
开发者ID:DeejStar,项目名称:openmw,代码行数:54,代码来源:physicssystem.cpp
示例18: update
//-----------------------------------------------------------------------------------
void CameraController::update( float timeSinceLast )
{
Ogre::Camera *camera = mGraphicsSystem->getCamera();
if( mCameraYaw || mCameraPitch )
{
if( mUseSceneNode )
{
Ogre::Node *cameraNode = camera->getParentNode();
// Update now as yaw needs the derived orientation.
cameraNode->_getFullTransformUpdated();
cameraNode->yaw( Ogre::Radian( mCameraYaw ), Ogre::Node::TS_WORLD );
cameraNode->pitch( Ogre::Radian( mCameraPitch ) );
}
else
{
camera->yaw( Ogre::Radian( mCameraYaw ) );
camera->pitch( Ogre::Radian( mCameraPitch ) );
}
mCameraYaw = 0.0f;
mCameraPitch = 0.0f;
}
int camMovementZ = mWASD[2] - mWASD[0];
int camMovementX = mWASD[3] - mWASD[1];
int slideUpDown = mSlideUpDown[0] - mSlideUpDown[1];
if( camMovementZ || camMovementX || slideUpDown )
{
Ogre::Vector3 camMovementDir( camMovementX, slideUpDown, camMovementZ );
camMovementDir.normalise();
camMovementDir *= timeSinceLast * 10.0f * (1 + mSpeedMofifier * 5);
if( mUseSceneNode )
{
Ogre::Node *cameraNode = camera->getParentNode();
cameraNode->translate( camMovementDir, Ogre::Node::TS_LOCAL );
}
else
{
camera->moveRelative( camMovementDir );
}
}
}
开发者ID:arpd,项目名称:ogre2-sample,代码行数:47,代码来源:CameraController.cpp
示例19: OnAttributeUpdated
void EC_Mesh::OnAttributeUpdated(IAttribute *attribute)
{
if (attribute == &drawDistance)
{
if(entity_)
entity_->setRenderingDistance(drawDistance.Get());
}
else if (attribute == &castShadows)
{
if(entity_)
{
if (entity_)
entity_->setCastShadows(castShadows.Get());
//! \todo might want to disable shadows for some attachments
for (uint i = 0; i < attachment_entities_.size(); ++i)
{
if (attachment_entities_[i])
attachment_entities_[i]->setCastShadows(castShadows.Get());
}
}
}
else if (attribute == &nodeTransformation)
{
Ogre::Node* adjustmentTarget = adjustment_node_;
if (bone_tagpoint_)
adjustmentTarget = bone_tagpoint_;
if (adjustmentTarget)
{
Transform newTransform = nodeTransformation.Get();
adjustmentTarget->setPosition(newTransform.position.x, newTransform.position.y, newTransform.position.z);
Quaternion adjust(DEGTORAD * newTransform.rotation.x,
DEGTORAD * newTransform.rotation.y,
DEGTORAD * newTransform.rotation.z);
// Let's not assume the needed haxor adjustment here, but let user specify it as necessary
//adjust = Quaternion(PI/2, 0, PI) * adjust;
adjustmentTarget->setOrientation(Ogre::Quaternion(adjust.w, adjust.x, adjust.y, adjust.z));
// Prevent Ogre exception from zero scale
if (newTransform.scale.x < 0.0000001f)
newTransform.scale.x = 0.0000001f;
if (newTransform.scale.y < 0.0000001f)
newTransform.scale.y = 0.0000001f;
if (newTransform.scale.z < 0.0000001f)
newTransform.scale.z = 0.0000001f;
adjustmentTarget->setScale(newTransform.scale.x, newTransform.scale.y, newTransform.scale.z);
}
}
else if (attribute == &meshRef)
{
if (!ViewEnabled())
return;
//Ensure that mesh is requested only when it's has actually changed.
// if(entity_)
// if(QString::fromStdString(entity_->getMesh()->getName()) == meshRef.Get().ref/*meshResourceId.Get()*/)
// return;
/*
AssetTransferPtr transfer = GetFramework()->Asset()->RequestAsset(meshRef.Get());
if (transfer)
{
connect(transfer.get(), SIGNAL(Loaded(AssetPtr)), SLOT(OnMeshAssetLoaded()), Qt::UniqueConnection);
}
else
{
RemoveMesh();
}
*/
if (meshRef.Get().ref.trimmed().isEmpty())
LogDebug("Warning: Mesh \"" + this->parent_entity_->GetName().toStdString() + "\" mesh ref was set to an empty reference!");
meshAsset->HandleAssetRefChange(&meshRef);
}
else if (attribute == &meshMaterial)
{
if (!ViewEnabled())
return;
// We won't request materials until we are sure that mesh has been loaded and it's safe to apply materials into it.
// This logic shouldn't be necessary anymore. -jj.
// if(!HasMaterialsChanged())
// return;
AssetReferenceList materials = meshMaterial.Get();
// Reallocate the number of material asset reflisteners.
while(materialAssets.size() > materials.Size())
materialAssets.pop_back();
while(materialAssets.size() < materials.Size())
materialAssets.push_back(boost::shared_ptr<AssetRefListener>(new AssetRefListener));
for(int i = 0; i < materials.Size(); ++i)
{
connect(materialAssets[i].get(), SIGNAL(Loaded(AssetPtr)), this, SLOT(OnMaterialAssetLoaded(AssetPtr)), Qt::UniqueConnection);
materialAssets[i]->HandleAssetRefChange(framework_->Asset(), materials[i].ref);
}
}
else if((attribute == &skeletonRef) && (!skeletonRef.Get().ref.isEmpty()))
{
if (!ViewEnabled())
//.........这里部分代码省略.........
开发者ID:A-K,项目名称:naali,代码行数:101,代码来源:EC_Mesh.cpp
示例20: getSquaredViewDepth
Ogre::Real Canvas::getSquaredViewDepth(const Ogre::Camera* cam) const
{
Ogre::Node* node = this->getParentNode();
assert(node);
return node->getSquaredViewDepth(cam);
}
开发者ID:toglia3d,项目名称:OgreSpriteEditor,代码行数:6,代码来源:Canvas.cpp
注:本文中的ogre::Node类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论