1

gluLookAt に相当する Qt を使用してビュー マトリックスを設定し、シーン内のあらゆる場所に移動して移動しました。今度は、カメラをオブジェクトに近づけたいと思います。

オブジェクト座標と他の座標の両方でオブジェクトの位置を知っています (そのオブジェクトのモデルマトリックスがあります) が、カメラの位置を取得するにはどうすればよいですか?

カメラがオブジェクトにどんどん近づくようにアニメーション化するには、次の 2 つのポイントを取得する必要があると思います。

  • オブジェクトが存在するポイント
  • カメラのあるポイント

そして、次のようなことをします

QVector3D direction_to_get_closer = point_where_object_is - point_where_camera_is

カメラの位置を取得するにはどうすればよいですか? または、これが必要ない場合は、オブジェクトに到達するためにカメラが従わなければならない方向にベクトルを取得するにはどうすればよいですか?

4

1 に答える 1

1

gluLookAt(eye, target, headUp) は、カメラ/目の位置、見たいオブジェクトの位置、およびロール/ヘッドアップ方向を制御する単位ベクトルの 3 つのパラメータを取ります。

ズームインするには、目/カメラの位置をベクトル direction_to_get_closer の一部だけ移動します。例えば、

point_where_camera_is += 0.1f * direction_to_get_closer; // move 10% closer

現在の距離の 10% ではなく、一定量だけ移動する方が便利です (そうしないと、距離が長いと非常に速く移動し、その後徐々に遅くなります)。したがって、正規化された方向を使用する必要があります。

 QVector3D unitDir = direction_to_get_closer.normalized();
 point_where_camera_is += 0.1f * unitDir; // move 0.1 units in direction

point_where_camera_is が point_where_object_is と等しくなると、カメラの変換が壊れます。

より良い方法は、ズームする必要がない場合、新しい「ズームされた」point_where_camera_is を変換/回転して、位置間を補間することです。

float t = some user input value between 0 and 1 (0% to 100% of the line camToObj)
QVector3D point_on_line_cam_obj = t * point_where_camera_is + (1-t) * point_where_object_is;

このように、t を制限することで、ユーザーがオブジェクトにズームインするのを止めることができます。また、t=0 で開始位置に戻ることもできます。

于 2012-07-22T12:14:06.160 に答える