5

小さなopenscenegraphアプリケーションを作成していて、カメラの高さを変更する方法が必要です。基本的に、目は空間内のボールをまっすぐ見ています。私がやりたいのは、カメラの高さを下げてボールを下から見ることができるようにすることと、必要に応じてカメラの高さを上げることです。oPenglコードまたは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();
}
4

2 に答える 2

2

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

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

そこにあるような基本的なアプリでは、Camera Manipulator はフレームごとに 1 回 (マウス操作に基づいて) カメラの位置を設定していることに注意してください。

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

于 2012-12-12T22:46:54.797 に答える
0

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

  • eye: カメラの位置 - これを使用して高さを設定できます。
  • center: カメラが見ているポイント - これを観測対象の中心に設定します。
  • up: カメラのアップベクター - これは、ビューポートがその中心を中心に回転する方法を制御し、従来のグラフィックス座標系で [0, 1, 0] に等しい必要があります。

このメソッドは、カメラが見ているポイントを指定することによってカメラの回転を処理するため、eye求めていることを達成するには、ベクトルの y 座標のみを変更する必要があります。

「look at」ベクトル トリプレットの詳細については、こちらを参照してください

于 2012-12-27T00:51:12.613 に答える