OpenGLでトラックボールを実装する方法は?
変換について多くのことを読んだ後、アプリにトラックボールを実装するときが来ました。原点からマウスがクリックされた場所までのベクトルを作成し、次に原点からマウスがクリックされた場所まで別のベクトルを作成する必要があることを理解しています。 私の質問は、(x、y)ピクセル座標を世界座標に変換する必要がありますか、または画像空間ですべてを行う必要がありますか(画像空間はピクセルで測定されたシーンの2D投影であると考えてください)? 編集 リッチー・サムズの答えはとても良いものです。しかし、私は少し異なるアプローチを取っていると思います。間違っているか何かを誤解している場合は修正してください。 私のアプリケーションでは、私は持ってSimplePerspectiveCamera受け取り、クラスpositionのカメラの、position of the target私たちは、見ているup、ベクトルfovy、aspectRatio、nearとfarの距離を。 それらを使用して、ViewマトリックスとProjectionマトリックスを作成します。今、ズームイン/ズームアウトしたい場合、視野を更新し、投影マトリックスを更新します。パンしたい場合は、カメラの位置を移動して、マウスが生成するデルタを確認します。 最後に、回転には、角度軸変換またはクォータニオンのいずれかを使用できます。このために、マウスが押されたピクセル座標を保存し、マウスが移動したときにピクセル座標も保存します。 座標の各ペアについて、球の公式、すなわちsqrt(1-x ^ 2-y ^ 2)を与えられたZ値を計算し、targetto PointMousePressedからtargetto PointMouseMovedに行くベクトルに計算し、外積を行います。回転軸を取得し、任意の方法を使用して新しいカメラ位置を計算します。 しかし、私の最大の疑問は、(x、y、z)値がピクセル座標で与えられていることtargetであり、使用しているベクトルを計算するとき、これは世界座標のポイントです。この座標系の混合は、私がやろうとしている回転の結果に影響していませんか?