本文整理汇总了C++中ogre::Node类的典型用法代码示例。如果您正苦于以下问题:C++ Node类的具体用法?C++ Node怎么用?C++ Node使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Node类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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;
}
示例2: assert
//-----------------------------------------------------------------------
const Ogre::Quaternion&
BasicRenderable::getWorldOrientation(void) const
{
Ogre::Node* n = mParent->getParentNode();
assert(n);
return n->_getDerivedOrientation();
}
示例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;
}
示例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");
}
}
}
示例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()));
}
}
示例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();
}
示例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());
}
}
示例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());
}
}
示例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();
}
示例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);
}
示例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);
}
}
示例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;
}
示例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));
}
示例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);
// }
}
}
}
}
}
}
}
示例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)*/));
}
}