質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

1回答

971閲覧

ビュー変換した画像同士の比較

seri

総合スコア422

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2017/03/04 19:59

編集2017/03/04 19:59

3D空間上でカメラ位置(10,0,0)、カメラ視点方向地点(0,0,0) の絵をレンダリングしビュー変換させます。この絵をAとします
次に
3D空間上でカメラ位置(0,0,10)、カメラ視点方向地点(0,0,0) の絵をレンダリングしビュー変換させます。この絵をBとします

ここで

Aでのピクセル位置(x、y)はBでのピクセル位置(X,Y)

と導き出す式が解りません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

一般的には次のように考えればよいと思います。

モデルの表面をMとすると、A上の(x,y)に投影される点はM上のどの点か方程式で求まります。(Mが平面なら直線と平面の交点を計算すればよいです)そのようにするとモデルの三次元上の位置が求まるのでそれをBへビュー変換すれば(X,Y)は求まります。つまりA->三次元上のモデル座標->Bのように変換します。

もしモデルが三次元空間上で表・裏を考えない単なる平面だとすると上記の計算はA,B間の単なるアフィン変換になります。

A上でのピクセル位置
a0=(0,0)
ax=(1,0)
ay=(0,1)
を考え、それぞれに対するM上の点を求めそれをp0,px,pyとし、それをB上へビュー変換して
b0=(X0,Y0)
bx=(X1,Y1)
by=(X2,Y2)
の座標となることが分かれば、a=(x,y) => b=(X,Y)への変換は以下となります
X = X0 + x * (X1 - X0) + y * (X2 - X0)
Y = Y0 + x * (Y1 - Y0) + y * (Y2 - Y0)

投稿2017/03/05 00:46

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2017/03/07 14:31 編集

横から失礼します。 質問者の例において単純な平行投影の場合、M(0,0,0) -> A(0,0) B(0,0) および M(1,0,0) -> A(0,0) B(1,0) となるかと思います。 つまりA->Bは一意に決まらない場合があることは留意すべきかと思います。
KSwordOfHaste

2017/03/07 14:50

そうですね。平行投影でなくても透視投影でも同様のことは起こります。その解決方法はないので一般的には投射結果の点の射影A->Bを考えるのではなく「あくまでモデルM上の点をベースとして考える方がよい」といえるでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問