こんにちは。
3Dの座標を2Dのスクリーン座標に変換するには
screen.x = Projection * world.x / world.z;
screen.y = Projection * world.y / world.z;
でいいと思うのですが、
問題は、その3D座標がスクリーン(カメラ)の後ろ側に
なってしまった時にその判定をしたいと思っています。
このままでは、カメラの後ろ側にその3D座標があっても、
2Dの位置は変わりません。
どのように計算すればよろしいのでしょうか?
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
>screen.x = Projection * world.x / world.z;
>screen.y = Projection * world.y / world.z;
このやり方だとworld.z<0がカメラの後ろ側の条件になるはず。
カメラ位置(0,0,0)、カメラ方向(0,0,1)で固定ということだと判断しました。
カメラの移動とかを考えるなら、
カメラの位置と方向からワールド座標をカメラ座標に変換、
投影モード(平行投影、透視投影)のパラメータからカメラ座標をビュー座標に変換、
スクリーンサイズからビュー座標をスクリーン座標に変換、
といった処理を行います。
ご返答ありがとうございます。
>このやり方だとworld.z<0がカメラの後ろ側の条件になるはず。
カメラ位置(0,0,0)、カメラ方向(0,0,1)で固定ということだと判断しました。
すみません。記述し損ねていました。
自分が行いたい処理はカメラの位置座標と向きは常に変化するので
Z座標を頼りにカメラの後方を判別できない条件なのです。
>カメラの移動とかを考えるなら、
カメラの位置と方向からワールド座標をカメラ座標に変換、
投影モード(平行投影、透視投影)のパラメータからカメラ座標をビュー座標に変換、
スクリーンサイズからビュー座標をスクリーン座標に変換、
といった処理を行います。
こちらは具体的にどういった処理になりますでしょうか?
例や計算式を出して頂けると助かるのですが…。
どうぞよろしくお願いします。
No.2
- 回答日時:
単にカメラの前後を調べるだけなら、(カメラ位置から調べる点までのベクトル)と(カメラの向きベクトル)の内積の正負でわかりますが、カメラ位置から点がどのように見えるかが分かりません。
やはりカメラ変換行列を求めるのがいいと思います。例えば、
ワールド座標で点A(10,0,0), B(0,10,0), C(0,0,10), O(0,0,0)があり、これをカメラ位置E(100,100,80), カメラ注視点R(0,0,0)のカメラで見たとき、
カメラ奥向きベクトル vec_z = R - E = (-100, -100, -80) -> (-0.62, -0.62, -0.49)
このvec_zを元にカメラの右向きベクトルと上向きベクトルを求める。仮の上向きベクトルをU(0,0,1)とすると
カメラ右向きベクトル vec_x = (奥向きベクトルと上向きベクトルの外積(左手系)) = (-0.71, 0.71, 0)
カメラ上向きベクトル vec_y = (右向きベクトルと奥向きベクトルの外積(左手系)) = (-0.35, -0.35, 0.87)
カメラ変換行列Mは、
[-0.71 -0.35 -0.62 0]
[-0.71 -0.35 -0.62 0]
[ 0 0.87 -0.49 0]
[ ? ? ? 1]
となり、カメラ座標ではカメラ位置Eが(0,0,0)になることから、E*M=(0,0,0,1)となるように?を求めて、
M =
[-0.71 -0.35 -0.62 0]
[-0.71 -0.35 -0.62 0]
[ 0 0.87 -0.49 0]
[ 0 0 162.48 1]
これにより、点Aをこのカメラで見たとき、A*M = (-7.1, -3.5, 156.3, 1)のように見えると分かります。
同様
B*M = (7.1, -3.5, 156.3)
C*M = (0, 8.7, 157.6)
O*M = (0, 0, 162.48)
参考URL:http://homepage2.nifty.com/skimp-studio/htm/craw …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(映画) 3D上映がある映画作品で、2Dのスクリーン、3Dのスクリーン両方ある劇場もありますが、客側の2Dで観 2 2022/12/24 01:41
- その他(映画) 昔の映画の3Dリメイク版。どうやって作るのか? 4 2023/02/16 10:17
- 物理学 ミンコフスキー時空図の作図の仕方について 2 2023/04/30 10:01
- 数学 線形代数の問題について教えて欲しいです。 3 2023/05/06 23:13
- 映画館 4dx スクリーン 3d版ってどんなかんじでしたか?3Dメガネかけますか。 以前、4dx3d版を観た 2 2022/12/24 14:55
- 数学 線形代数の2次元直交座標系、極座標系についての問題がわからないです。 2 2022/07/16 20:42
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- 映画館 迷っています。 アバター2を映画館で見たいのですが、どれで見ようか迷ってます。 IMAX 4DX ド 3 2022/12/24 12:27
- 数学 座標変換について 1 2022/08/04 16:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
3次元空間上の2つの座標から...
-
閉図形の座標の配列が右回りか...
-
ダイアログ内コントロールの位...
-
エクセルである点からの距離で...
-
ピクチャボックスの座標取得
-
交差する2線分の交点座標の求め方
-
エクセルシート上のマウスポイ...
-
一番近い点を見つけたい。
-
c言語でキーボードから2点の座...
-
ビットマップ画像の座標を小数...
-
VBで、開いているExcelシートの...
-
マインクラフト(pc版)で座標...
-
Tiny Basicでのグラフィック。。
-
ワード上Shapeの位置情報を統一...
-
最小二乗平面
-
エクセルで回転する座標の出し方
-
座標A(X,Y)の線分(aX,aY)(b...
-
空間上の二点を結ぶ直線上に任...
-
ClientToScreen
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マインクラフト(pc版)で座標...
-
グラフの交点の求め方(Excel)
-
エクセルで回転する座標の出し方
-
閉図形の座標の配列が右回りか...
-
3次元空間上の2つの座標から...
-
エクセルである点からの距離で...
-
求積表の計算方法
-
ダイアログ内コントロールの位...
-
空間上の二点を結ぶ直線上に任...
-
始点、終点の二つの座標と半径...
-
図形が重なりあっているかどうか
-
ワード上Shapeの位置情報を統一...
-
以下のプログラムは重心を求め...
-
シーケンサー(PLC?)で制...
-
ピクチャボックスの座標取得
-
多角形の内部かどうか判定する方法
-
Excel VBA で自在に図形を変化...
-
選択範囲の座標値の抽出
-
座標を持った平面範囲に座標を...
-
VBで、開いているExcelシートの...
おすすめ情報