Y
プロジェクトで3Dクロスでマークされた、世界の軸を中心にカメラを回転させようとしています。
私が達成したのは、それをそれ自体の軸を中心に回転させることです。これはクールですが、それは私が望んでいたものではありません。
四元数といくつかの数学を使用してそれを達成する方法、または osg::PositionAttitudeTransforms
使いやすいが理解しにくいインフラストラクチャ。
その背後にある数学に触れたいと思います。
関連するコードは次のとおりです。
osg::Matrixd camM;
std::stringstream oss;
osg::Quat x_rot_q(osg::DegreesToRadians(-DEG), osg::Vec3d(1.0, 0.0, 0.0));
osg::Quat y_rot_q(osg::DegreesToRadians(DEG), osg::Vec3d(0.0, 1.0, 0.0));
camM = cameraManipulator->getMatrix();
camM.makeRotate(x_rot_q * y_rot_q);
camM.setTrans(250.0, 300.0, 250.0);
cameraManipulator->setByMatrix(camM);
osg::Quat y_delta_trans(osg::DegreesToRadians(DEG_DELTA), osg::Vec3d(0.0, 1.0, 0.0));
while(!viewer.done()) {
oss.str(std::string());
oss.clear();
camM = cameraManipulator->getMatrix();
camM.makeRotate(camM.getRotate() * y_delta_trans);
camM.setTrans(250.0, 300.0, 250.0);
cameraManipulator->setByMatrix(camM);
oss << getMatrixRepresentation(camM);
hudGeode->setStatus(oss.str());
viewer.frame();
}
これはファイルの下部にありますSimple.cpp
。プロジェクト全体は、このリビジョンの要点にあります。
GNU / Linuxボックスでは、入力するだけmake
で、適切なツールがインストールされていれば、箱から出してすぐに機能するはずです。