IntersectPoint::IntersectPoint(SceneManipulator* sceneManipulator) : HitIndicator(sceneManipulator) , mIntersectNode(NULL) , mIntersectEntity(NULL) { // Create intersection node and entity mIntersectNode = getIndicatorRootSceneNode()->createChildSceneNode(); Real radius = 1; int rings = 16; int segments = 16; Ogre::MeshPtr sphereMesh = createCommonSphere(radius, rings, segments); Ogre::MaterialPtr material = createColourMaterial( Ogre::ColourValue(1, 0, 0, 0.75), Ogre::ColourValue(0, 1, 0), 1); mIntersectEntity = getSceneManager()->createEntity(mIntersectNode->getName(), sphereMesh->getName()); mIntersectEntity->setQueryFlags(0); mIntersectEntity->setNormaliseNormals(true); mIntersectEntity->setMaterialName(material->getName()); mIntersectEntity->setRenderQueueGroup(Ogre::RENDER_QUEUE_7); mIntersectNode->attachObject(mIntersectEntity); mIntersectNode->setVisible(false); reshape(); }
JunctionPoints::JunctionPoints(SceneManipulator* sceneManipulator) : HitIndicator(sceneManipulator) , mBaseMesh() , mScale(1) { Real radius = 1; int rings = 8; int segments = 8; mBaseMesh = createCommonSphere(radius, rings, segments); reshape(); }
Indicator(const ObjectPtr &object, SceneManipulator *sceneManipulator) : mProxy(NULL) { assert(sceneManipulator); mUserAny = Ogre::Any(); mProxy = new ObjectProxy(object); // 根据光源位置来定节点位置 Ogre::Vector3 pos = VariantCast<Ogre::Vector3>(object->getProperty("position")); mIndicatorSceneNode = sceneManipulator->getIndicatorRootSceneNode()->createChildSceneNode(pos); Real radius = 5; int rings = 16; int segments = 16; Ogre::MeshPtr sphereMesh = createCommonSphere(radius, rings, segments); Ogre::MaterialPtr material = createPureColourMaterial( Ogre::ColourValue(1, 0, 0, 0.75) ); mIndicatorEntity = sceneManipulator->getSceneManager()->createEntity(mIndicatorSceneNode->getName(), sphereMesh->getName()); //david-<< //mIndicatorEntity->setNormaliseNormals(true); //david->> mIndicatorEntity->setMaterialName(material->getName()); setUserObject(mProxy); mIndicatorSceneNode->attachObject(mIndicatorEntity); // 选择时不考虑粒子系统的包围盒,用的是指示器的包围盒 ParticleSystemObject *particleSystemObject = static_cast<ParticleSystemObject *> (object.get()); Ogre::ParticleSystem *system = particleSystemObject->getParticleSystem(); if (system) system->setQueryFlags(0); // 根据光源类型来挂接模型 showIndicator(false); }