2012-11-28 3 views
5

小さなopencenegraphアプリケーションを作成し、カメラの高さを変更する方法が必要です。本質的に、目は空間内のボールをまっすぐに見ている。私がしたいことは、カメラの高さを下げることができるので、私はボールを下から受けられるようになり、必要ならばカメラの高さを上げることができます。 oPenglコードまたはOpenScenegraphを使用してこれを達成するにはどうすればよいですか?C++ OpenSceneGraphカメラの高さを変更する

int main(int argc, char* argv[]) 
{ 
    osg::ref_ptr<osg::ShapeDrawable> shape2 = new osg::ShapeDrawable; 
    shape2->setShape(new osg::Sphere(osg::Vec3(3.0f, 0.0f, 0.0f),1.0f)); 
    shape2->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); 
    osg::ref_ptr<osg::Geode> root = new osg::Geode; 
    root->addDrawable(shape2.get());///add first osgshapeDrawable2 
    osgViewer::Viewer viewer; 
    viewer.setSceneData(root.get());///set the Geode as scenedata for the viewer 
    return viewer.run(); 
} 

答えて

3

osgViewer::Cameraの制御を引き継ぐ必要があります。基本的なOpenGLでこれを行うべきではありません。

osgViewer::Viewer::getCameraWithFocusカメラを取得する必要があります。ここから、カメラの位置と視線を設定することができます。

カメラマニピュレータは、そこにあるような基本的なアプリケーションでは、マウスの操作に基づいてカメラの位置をフレームごとに1回設定しています。

マウス入力の処理方法を決定し、カメラマニピュレータが実行しているタスクを引き継ぐ必要があります。

+0

私はマニピュレータを持ってカメラを持っています。残っているのは高さそのものを変えることです。これをどのように達成するのですか?この場合、カメラのどのプロパティを変更して上下に移動できますか? – Kobojunkie

0

CameraオブジェクトでsetViewMatrixAsLookAtメソッド(link)を使用してください。このメソッドは3つのパラメータを取ります:

  • eye:カメラの位置 - これは高さの設定に使用できます。
  • center:カメラが見ているポイント - これを観測対象の中心に設定します。
  • up:カメラのアップベクトル - これは、ビューポートがその中心を中心にどのように回転するかを制御し、従来のグラフィックス座標系で[0,1,0]と等しくなければなりません。この方法は、それがを探してだ点を指定することで、カメラの回転の世話をする

ので、あなただけのあなたが求めているものを達成するためにeyeベクトルのy座標を変更する必要があります。

「見る」ベクトルのトリプレットhereについて詳しくは、ご覧ください。

関連する問題