目標は、カメラ画面に投影された 3D 空間内のポイントを取得することです (最終的な目標は、ポイント クラウドを生成することです)。
これはセットアップです:
カメラ位置: px,py,pz 上方向: ux,uy,uz look_at_direction: lx,ly,lz screen_width screen_height screen_dist
空間内の点: p = (x,y,z)
と
初期 U、V、W
w = || position - look_at_direction || = || (px,py,pz) - (ux,uy,uz) ||
u = || (ux,uy,uz) cross-product w ||
v = || w cross-product u ||
これにより、カメラの u、v、w 座標が得られます。
これは、私が実装することになっている手順であり、それらを理解する方法です。翻訳で何かが失われたと思います。
(1) カメラから点への光線を求める
カメラの位置で点を引く
ray_to_point = p - 位置
(2) ポイントへの光線と画面の中心 (カメラ方向) への正規化された光線の間の内積を計算します。結果を sc_dist で割ります。これにより、ポイントの距離とカメラの画面までの距離の比率が得られます。
比率 = (ray_to_point * w)/screen_dist
ここで、w、カメラの元のルックアット値、またはカメラ空間の単位ベクトルである w ベクトルを使用する必要があるかどうかはわかりません。
(3) ポイントへの光線を手順 2 で求めた比率で分割し、カメラ位置に追加します。これにより、カメラ画面上のポイントの投影が得られます。point_on_camera_screen = ray_to_point / 比率
(4) カメラの画面の中心と投影点の間のベクトルを見つけます。画面の中心ピクセルを見つけることになっていますか? どうやってやるの?
ありがとう。