
こんにちは。
現在自作で3Dゲームを制作しています。
ワールド座標からスクリーン座標への変換に成功したので
今度は逆にスクリーン座標からワールド座標への変換に挑戦していたのですが
どうにもうまくいかずに詰まってしまい、質問にきました。
ワールド→スクリーン変換にて得たスクリーン座標(sx, sy, sz)を使用して
スクリーン→ワールド変換を行うと成功するのですが
直接スクリーン→ワールド変換を行おうとすると失敗します。
というのも、直接スクリーン→ワールド変換時には sz にあたる値を
どうしたらいいものか・・・となってしまったからです。
今回、手計算(ヘルプ関数は使わず)で行っているのですが、計算していることは
ビューポート行列、プロジェクション行列、ビュー行列の逆行列を使用し
スクリーン座標(とりあえずszを0にして対応)に対して座標変換をおこなっています。
何か計算が足りていないのか、はたまた勘違いをしているのか・・・
詳しいご教授お願いいたします。
ワールド行列:単位行列
ビュー行列:視点と視線は動的に変動、上向き(0,1,0)
プロジェクション行列:視野角45度、アスペクト比 800/600
画面サイズ:800×600
テストに使用しているスクリーン座標:(200,300)
No.1ベストアンサー
- 回答日時:
そもそもスクリーンに映っているのは奥行き情報が消えた「2D な絵」ですよね. だとしたら, 「視点から当該スクリーン座標に向かう (無限に長い) 視線」の上にある点はすべて「3D なワールド座標」の候補になってしまいます. そして, そのうちのどれが「正しいワールド座標」なのかをこれだけの情報から求めることは不可能です.
夜空に光る星までの距離を求めるには, 「ここで光ってる」という情報だけでは不足ですよね.
もちろん, スクリーンに映っている画像を作る元になった (ワールド座標における) オブジェクトの配置がすべてわかっているなら, 「視線の先にあるオブジェクト」を調べることはできます. もっと難しくして鏡面反射とか屈折とかを考慮すると, 結局レイトレになっちゃいますがここではそこまでの処理は不要でしょう.
No.2
- 回答日時:
たとえば、ワールド座標の点をスクリーン座標への変換式を
P = M・r { P:スクリーン座標値、M:変換行列、r:ワールド座標値 }
とすると、スクリーンからワールドへの変換は
r = M^(-1)・P
となる。
スクリーン上の座標(x,y)に対して、下記式によってワールド座標の2点を求めると、
r0 = M^(-1)・(x,y,0,1)
r1 = M^(-1)・(x,y,1,1)
これら2点はそれぞれスクリーン上で(x,y)に表示され、クリッピング領域の前後方向の端に位置します。
この2点を結ぶ直線上にある点は画面上で同じ位置に表示されるため、一意にワールド座標の一点を求めることはできません。
たとえば、スクリーン座標のある点にあるオブジェクトの表面上の1点を求めたい等の場合、上記式に限らず何らかの方法で、スクリーン座標の点に対応するレイを求め、オブジェクトとの交差判定を行う、といった処理がひつようになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
始点、終点の二つの座標と半径...
-
スクリーン座標からワールド座...
-
エクセルで回転する座標の出し方
-
ガウシアンフィルタのCプログラム
-
C++でコマンドプロンプトに図形...
-
ワード上Shapeの位置情報を統一...
-
ダイアログ内コントロールの位...
-
直交(x,y)座標(struct orth)を...
-
C# 2つのベクトルのなす角を二...
-
求積表の計算方法
-
追跡のアルゴリズム
-
Excel関数で指定範囲内に有るか...
-
マインクラフト(pc版)で座標...
-
多角形の内部かどうか判定する方法
-
6点からの楕円の近似計算(最...
-
プログラム
-
C言語 配列で座標
-
最小二乗平面
-
エクセルである点からの距離で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
シーケンサー(PLC?)で制...
-
ダイアログ内コントロールの位...
-
エクセルで回転する座標の出し方
-
ワード上Shapeの位置情報を統一...
-
始点、終点の二つの座標と半径...
-
Excel VBA で自在に図形を変化...
-
C言語で制作するピラミッドアー...
-
C言語 配列で座標
-
閉図形の座標の配列が右回りか...
-
ガウシアンフィルタのCプログラム
-
任意点を中心とした回転
-
c言語でキーボードから2点の座...
-
3D→2Dの座標変換で、スクリーン...
-
求積表の計算方法
-
以下のプログラムは重心を求め...
-
複数の回転する長方形の衝突判定
-
直線上にある点の座標の求め方
おすすめ情報