本文整理汇总了C++中osg::Quat::makeRotate方法的典型用法代码示例。如果您正苦于以下问题:C++ Quat::makeRotate方法的具体用法?C++ Quat::makeRotate怎么用?C++ Quat::makeRotate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osg::Quat
的用法示例。
在下文中一共展示了Quat::makeRotate方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: creation_CHARRR
osg::PositionAttitudeTransform* creation_CHARRR(float posx, float posy, osg::Node* terrain){
osg::Node* LECHARRR = osgDB::readNodeFile("t72-tank_des.flt");
osg::PositionAttitudeTransform* pos_tank = new osg::PositionAttitudeTransform;
osg::Vec3 pos, normal;
intersection_terrain(posx, posy, terrain, pos, normal);
pos_tank->setPosition(pos);
osg::Quat rotation;
rotation.makeRotate(osg::Vec3f(0, 0, 1), normal);
pos_tank->setAttitude(rotation);
pos_tank->addChild(LECHARRR);
pos_tank->setUpdateCallback(new Deplacement);
return pos_tank;
}
示例2: handle
bool GestionEvenements::handle( const osgGA::GUIEventAdapter& ea,
osgGA::GUIActionAdapter& aa)
{
switch(ea.getEventType()){
case osgGA::GUIEventAdapter::KEYDOWN :
switch(ea.getKey()){
case 'q':
noeudTourelle = rechercheTourelle.getNode();
if (noeudTourelle != NULL){
osgSim::DOFTransform* tourelleDOF = dynamic_cast<osgSim::DOFTransform*>(noeudTourelle);
tourelleDOF->setCurrentHPR(osg::Vec3(tourelleDOF->getCurrentHPR().x() + osg::DegreesToRadians(20.0), 0.0, 0.0));
}
break;
case 'd':
noeudTourelle = rechercheTourelle.getNode();
if (noeudTourelle != NULL){
osgSim::DOFTransform* tourelleDOF = dynamic_cast<osgSim::DOFTransform*>(noeudTourelle);
tourelleDOF->setCurrentHPR(osg::Vec3(tourelleDOF->getCurrentHPR().x() - osg::DegreesToRadians(20.0), 0.0, 0.0));
}
break;
case '8':
intersection_terrain(LECHARRR->getPosition().x(), LECHARRR->getPosition().y() + 3, terrain, posTank, normalTank);
LECHARRR->setPosition(posTank);
rotation.makeRotate(osg::Vec3f(0, 0, 1), normalTank);
LECHARRR->setAttitude(rotation);
fumeeTank->setPosition(LECHARRR->getPosition());
break;
case '2':
intersection_terrain(LECHARRR->getPosition().x(), LECHARRR->getPosition().y() - 3, terrain, posTank, normalTank);
LECHARRR->setPosition(posTank);
rotation.makeRotate(osg::Vec3f(0, 0, 1), normalTank);
LECHARRR->setAttitude(rotation);
fumeeTank->setPosition(LECHARRR->getPosition());
break;
case '4':
intersection_terrain(LECHARRR->getPosition().x() - 3, LECHARRR->getPosition().y(), terrain, posTank, normalTank);
LECHARRR->setPosition(posTank);
rotation.makeRotate(osg::Vec3f(0, 0, 1), normalTank);
LECHARRR->setAttitude(rotation);
fumeeTank->setPosition(LECHARRR->getPosition());
break;
case '6':
intersection_terrain(LECHARRR->getPosition().x() + 3, LECHARRR->getPosition().y(), terrain, posTank, normalTank);
LECHARRR->setPosition(posTank);
rotation.makeRotate(osg::Vec3f(0, 0, 1), normalTank);
LECHARRR->setAttitude(rotation);
fumeeTank->setPosition(LECHARRR->getPosition());
break;
case 'p':
LECHARRR->setScale(LECHARRR->getScale() + osg::Vec3(1.0, 1.0, 1.0));
LECHARRR->getOrCreateStateSet()->setMode(GL_NORMALIZE, osg::StateAttribute::ON);
fumeeTank->setScale(fumeeTank->getScale() + 5);
break;
case 'm':
LECHARRR->setScale(LECHARRR->getScale() - osg::Vec3(1.0, 1.0, 1.0));
LECHARRR->getOrCreateStateSet()->setMode(GL_NORMALIZE, osg::StateAttribute::ON);
fumeeTank->setScale(fumeeTank->getScale() - 5);
break;
case 'f':
scene->addChild(new osgParticle::ExplosionEffect(osg::Vec3(posCanonX, posCanonY, posCanonZ), 1.0f, 1.0f));
break;
}
break;
case osgGA::GUIEventAdapter::PUSH :{
int x = ea.getX();
int y = ea.getY();
if( ea.getButton() == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON)
//std::cout << "bouton gauche" << std::endl;
if (ea.getButton() == osgGA::GUIEventAdapter::MIDDLE_MOUSE_BUTTON)
//std::cout << "bouton milieu" << std::endl;
if (ea.getButton() == osgGA::GUIEventAdapter::RIGHT_MOUSE_BUTTON)
//std::cout << "bouton droit" << std::endl;
break;
}
case osgGA::GUIEventAdapter::DOUBLECLICK :
break;
}
return false; // pour que l'événement soit traité par d'autres gestionnaires
}