視線方向に基づいて画像の透視投影を作成しようとしています。しかし、私はこの分野の経験がなく、自分でそれを行うことはできません。手伝ってくれませんか。
画像とオブザーバー(カメラ)があります。カメラが見えない球上のオブジェクトと見なされ、画像が球の中央を通過する平面であると見なすことができる場合、カメラの位置は次のように表すことができます。
x = dcos(θ)cos(φ)
y = dsin(θ)
z = dsin(φ)cos(θ)
ここで、θは緯度、φは経度、dは画像の中央がある球の中央からの距離(半径)です。
これらの式はどこかで見つかりましたが、座標についてはわかりません(わかりませんが、xはzである必要があるように見えますが、座標系によって異なると思います)。
今、私がする必要があるのは、カメラから見たように(適切な視点で)見えるように、画像を適切に変換することです。これをどのように行うことができるか、いくつかの言葉を教えていただけませんか。どのような手順を踏む必要がありますか?
私はiOSアプリを開発していて、QuartzCoreから次の方法を使用できると思いました。しかし、この方法にどの角度を渡す必要があるのか、カメラの位置から新しいx、y、z座標を導出する方法がわかりません。
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle,
CGFloat x, CGFloat y, CGFloat z)
これまでのところ、次の方法で簡単な表示パースペクティブを作成することに成功しました。
- .m34が1/-1000に設定された単位行列(CATransform3Dパラメーターとして)を使用し、
- (0、1、0)ベクトルを使用してφの角度で画像を回転させます。
- 結果をθおよび(1、0、0)ベクトルによる回転と連結します。
- dに基づくスケーリングは無視されます(他の基準に基づいて画像をスケーリングします)。
しかし、私が得た結果は私が望んでいたものではありませんでした(それは明白でした):-/。これらの2つの角度のいずれかが0に近い限り、遠近法は現実的に見えます。したがって、適切な変換を実現するために、適切な角度とx、y、z座標を計算する方法があるのではないかと思いました(これは間違っている可能性があります)それは私の推測です)。