void DSceneManager::updateScene() { DSceneManager::SceneNodeIterator si = getSceneNodeIterator(); while (si.hasMoreElements()) { DSceneNode* n = si.getNext(); n->updateBound(); updateSceneNode(n); } }
void SceneNodeWidget::onUpdate(std::shared_ptr<SceneNode> node) { auto target=m_node.lock(); if(!target){ return; } if(node!=target){ return; } updateSceneNode(); }
SceneNodeWidget::SceneNodeWidget(std::shared_ptr<SceneNode> node, QWidget *parent) : QWidget(parent), m_node(node), ui(new Ui::SceneNodeWidget) { ui->setupUi(this); updateSceneNode(); QObject::connect(ui->q_x, SIGNAL(valueChanged(double)), this, SLOT(onValueChanged())); QObject::connect(ui->q_y, SIGNAL(valueChanged(double)), this, SLOT(onValueChanged())); QObject::connect(ui->q_z, SIGNAL(valueChanged(double)), this, SLOT(onValueChanged())); }
void ItemObject::addToScene(scene::ISceneManager *smgr) { if(m_node != NULL) return; //video::IVideoDriver* driver = smgr->getVideoDriver(); // Get image of item for showing video::ITexture *texture = getItemImage(); /* Create a mesh */ scene::SMesh *mesh = new scene::SMesh(); { scene::IMeshBuffer *buf = new scene::SMeshBuffer(); video::SColor c(255,255,255,255); video::S3DVertex vertices[4] = { /*video::S3DVertex(BS/2,-BS/2,0, 0,0,0, c, 0,1), video::S3DVertex(-BS/2,-BS/2,0, 0,0,0, c, 1,1), video::S3DVertex(-BS/2,BS/2,0, 0,0,0, c, 1,0), video::S3DVertex(BS/2,BS/2,0, 0,0,0, c, 0,0),*/ video::S3DVertex(BS/3,-BS/2,0, 0,0,0, c, 0,1), video::S3DVertex(-BS/3,-BS/2,0, 0,0,0, c, 1,1), video::S3DVertex(-BS/3,-BS/2+BS*2/3,0, 0,0,0, c, 1,0), video::S3DVertex(BS/3,-BS/2+BS*2/3,0, 0,0,0, c, 0,0), }; u16 indices[] = {0,1,2,2,3,0}; buf->append(vertices, 4, indices, 6); // Set material buf->getMaterial().setFlag(video::EMF_LIGHTING, false); buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false); buf->getMaterial().setTexture(0, texture); buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false); buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true); buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; // Add to mesh mesh->addMeshBuffer(buf); buf->drop(); } m_node = smgr->addMeshSceneNode(mesh, NULL); // Set it to use the materials of the meshbuffers directly. // This is needed for changing the texture in the future ((scene::IMeshSceneNode*)m_node)->setReadOnlyMaterials(true); mesh->drop(); updateSceneNode(); }
//! //! Creates a copy of the given scene node. //! //! \param sceneNode The scene node to copy. //! \param name The name to use for the copied scene node. //! \param sceneManager The scene manager to use for creating the scene node. //! \return A copy of the given scene node. //! Ogre::SceneNode * OgreTools::copySceneNode ( Ogre::SceneNode *sceneNode, const QString &name, Ogre::SceneManager *sceneManager /* = 0 */ ) { // make sure the given scene node is valid if (!sceneNode) { Log::error("The given scene node is invalid.", "OgreTools::copySceneNode"); return 0; } // make sure a valid scene manager is available if (!sceneManager) sceneManager = sceneNode->getCreator(); if (!sceneManager) { Log::error("No valid scene manager available.", "OgreTools::copySceneNode"); return 0; } // check if a scene node of the given name already exists if (sceneManager->hasSceneNode(name.toStdString())) { Log::error(QString("The scene manager already contains a scene node named \"%1\".").arg(name), "OgreTools::copySceneNode"); return 0; } // create the scene node copy Ogre::SceneNode *sceneNodeCopy = sceneManager->createSceneNode(name.toStdString()); if (!sceneNodeCopy) { Log::error("The scene node copy could not be created.", "OgreTools::copySceneNode"); return 0; } // create a container for the scene node copy OgreContainer *sceneNodeCopyContainer = new OgreContainer(sceneNodeCopy); sceneNodeCopy->setUserAny(Ogre::Any(sceneNodeCopyContainer)); const Ogre::Any &userAny = sceneNode->getUserAny(); userAny.isEmpty(); if (!sceneNode->getUserAny().isEmpty()) { OgreContainer *sceneNodeContainer = Ogre::any_cast<OgreContainer *>(sceneNode->getUserAny()); if (sceneNodeContainer) QObject::connect(sceneNodeContainer, SIGNAL(sceneNodeUpdated()), sceneNodeCopyContainer, SLOT(updateSceneNode())); } // copy parameters from scene node to scene node copy //sceneNodeCopy->setAutoTracking(...); //sceneNodeCopy->setCustomParameter(...); //sceneNodeCopy->setDebugDisplayEnabled(...); //sceneNodeCopy->setDirection(...); //sceneNodeCopy->setFixedYawAxis(...); sceneNodeCopy->setInheritOrientation(sceneNode->getInheritOrientation()); sceneNodeCopy->setInheritScale(sceneNode->getInheritScale()); //sceneNodeCopy->setInitialState(...); //sceneNodeCopy->setInSceneGraph(...); sceneNodeCopy->setListener(sceneNode->getListener()); sceneNodeCopy->setOrientation(sceneNode->getOrientation()); //sceneNodeCopy->setParent(...); sceneNodeCopy->setPolygonModeOverrideable(sceneNode->getPolygonModeOverrideable()); sceneNodeCopy->setPosition(sceneNode->getPosition()); //sceneNodeCopy->setRenderSystemData(...); sceneNodeCopy->setScale(sceneNode->getScale()); sceneNodeCopy->setUseIdentityProjection(sceneNode->getUseIdentityProjection()); sceneNodeCopy->setUseIdentityView(sceneNode->getUseIdentityView()); //sceneNodeCopy->getUserAny(...); //sceneNodeCopy->setVisible(...); return sceneNodeCopy; }