1 / 20

カメラ座標に関する操作

カメラ座標に関する操作. 牧之内研究室4年 増尾 源哉 2002年7月19日. 参考文献: ・ DirectX SDK ヘルプ ・「3次元コンピュータグラフィックス」     昭晃堂 中前栄八労・西田友是 共著. Hawk's Eye Web ページ http://www.db.is.kyushu-u.ac.jp/hawks_publications/. カメラ座標. y. z. x. ワールド座標. y ’. x ’. z ’. カメラ座標とは?. カメラ座標とは、ワールド座標に対し、「視点」を置く位置を原点とした座標である。

tristana
Download Presentation

カメラ座標に関する操作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. カメラ座標に関する操作 牧之内研究室4年 増尾 源哉 2002年7月19日 参考文献: ・DirectX SDK ヘルプ ・「3次元コンピュータグラフィックス」     昭晃堂 中前栄八労・西田友是 共著 Hawk's Eye Web ページ http://www.db.is.kyushu-u.ac.jp/hawks_publications/

  2. カメラ座標 y z x ワールド座標 y’ x’ z’ カメラ座標とは? • カメラ座標とは、ワールド座標に対し、「視点」を置く位置を原点とした座標である。 • また、そのとき、視線はz’軸の方向となる。そして、z’の方向を向いたときにカメラ座標での「上側」はy’軸の方向となり、「右側」はx’軸の方向となる。

  3. 注意点 • DirectXでは、左手系座標を利用しているので、ある軸に関する「回転」や「ベクトルの外積」は次のようになる。 A×B A B

  4. DirectXでのカメラ座標の設定 • DirectXでカメラ座標を設定する際は、ビュー行列という4×4型の行列に値を設定すればよい。 • このビュー行列は、ワールド座標からカメラ座標に座標変換をする際に用いられる。 • ビュー行列に単位行列を与えると、カメラ座標はワールド座標と等しくなる。

  5. カメラの操作 • カメラで必要な操作は次のようなものである。

  6. 行列の意味

  7. y z x 1.視点切り替え • ワールド座標から右図のPにビュー座標を移す変換行列がMで与えられているとする。 • 現在のカメラ位置をC(c1, c2, c3)、移動する先のカメラ位置をC’(c1’, c2’, c3’)(どちらもワールド座標系での座標)とする。 (c1’-c1, c2’-c2, c3’-c3)だけ平行移動すればよい。この平行移動の行列は、 C(c1, c2, c3) C’(c1’, c2’, c3’) であり、ビュー行列として、 を設定すればよい。

  8. 2.ズーム(注視点に近づく、遠ざかる) • カメラ座標系では、カメラ位置Cは原点(0, 0, 0)、 注視点Pは(0, 0, s)(sは正)と表すことができる。 • このとき、カメラをPに近づいたり、遠ざかったりするには、z軸方向に平行移動をすればよい。よって、 平行移動 C C’ P で与えられる。よって、ビュー行列として、 を設定すればよい。 また、0<k<sのとき注視点に近づき、k<0のとき注視点から遠ざかる。

  9. y C(c1, c2, c3) P(p1, p2, p3) z Q(q1, q2, q3) x 3.特定の注視点にカメラを向ける • 下の図のように、カメラの位置がC、注視点がPのとき、カメラを回転させて点Qを注視点とすることを考える。

  10. y n C(c1, c2, c3) P(p1, p2, p3) θ z Q(q1, q2, q3) x • 三角形CPQの単位法線ベクトルをnとすると、  と表され、点PからQに注視点を移すには、このベクトルnを軸とし、nの周りにθ回転すればよい。 • よって、nのまわりの回転を表す行列を求めればよいことになる。

  11. y C(c1, c2, c3) v = (v1, v2, v3) z P(p1, p2, p3) x ある平面に対する法線ベクトルを求める方法 • ワールド座標において、カメラの位置C(c1, c2, c3)(ワールド座標における座標)、 点P(p1, p2, p3)(ワールド座標における座標)、Pを始点とするベクトルv=(v1, v2, v3)の2点とベクトルが与えられたとする。これらが作る平面に対する法線を求めることを考える。 ワールド座標

  12. ある平面に対する法線ベクトルを求める方法 y C(c1, c2, c3) n=(n1, n2, n3) v = (v1, v2, v3) z P(p1, p2, p3) x •  2点C, Pとベクトルvが作る平面に対する法線は、C, P, vが作る3角形の法線のことである。 •  ここで、ベクトルCPを考えると、この三角形の法線は、ベクトルCPとベクトルvの外積であることから、法線ベクトルは、次のように与えらる。 ゆえに、

  13. 単位ベクトルnの周りの回転を表す行列 • n=(u, v, w)を単位ベクトルとする。座標をnの周りにθ回転させる変換行列は、 で与えられる。よって、ビュー行列に、 を設定すればよい。

  14. 単位ベクトルnの周りの回転を表す行列(補足)単位ベクトルnの周りの回転を表す行列(補足) • 前述の単位ベクトルがx軸方向、y軸方向、z軸方向であった場合の行列はそれぞれ以下のとおりである • 単位ベクトルがx軸方向 • 単位ベクトルがy軸方向 • 単位ベクトルがz軸方向

  15. 4.注視点を固定したカメラ位置の回転 • 注視点を固定し、現在の視点Cを始点とするベクトルvの方向にθ回転するための変換を考える。 y P(p1, p2, p3) C(c1, c2, c3) θ v=(v1, v2, v3) z C’(c1’, c2’, c3’) x

  16. P(p1, p2, p3) |C P| |C P| θ y z C(c1, c2, c3) x C’(c1’, c2’, c3’) x軸、y軸方向へのカメラ位置の回転 • まず、簡単のため、vをカメラ座標系でのx軸方向、y軸方向として考える。(カメラ座標系でのz軸は視点の方向なので、z軸の方向に回転する、ということは考えなくてよい) • x軸方向にθ回転することを考える。 • まず回転後の座標C’に平行移動 • 向きをPに向ける(これは3で行った変換) Cを原点とするカメラ座標から見たC’の座標は、 となり、「1.平行移動」で説明した行列をM’とする。

  17. P(p1, p2, p3) y θ z C’(c1’, c2’, c3’) x P(p1, p2, p3) • 平行移動後、C’を原点とする座標系を考え、y軸の周りに-θ回転すれば注視点はPを向く。 • この回転は「3.特定の注視点にカメラを向ける」での説明のうち、単位ベクトルnをy軸方向の単位ベクトル(0, 1, 0)とし、-θ回転するような行列を与えればよい。   この行列をM’’とする。 • 変換前の座標系Cにカメラを移す行列がMで与えられているとすると、   ビュー行列に   を設定すればよい。 |C P| |C P| θ y z y z C(c1, c2, c3) x 平行移動 x C’(c1’, c2’, c3’) θ

  18. 同様に、y軸方向にθ回転する場合の行列も求めることが出来る。同様に、y軸方向にθ回転する場合の行列も求めることが出来る。 • Cを原点とするカメラ座標から見たC’の座標は、   となり、この平行移動の行列をM’とする。 • 次に、C’を原点とした座標系で回転では、単位ベクトルnをx軸方向の単位ベクトル(1, 0, 0)とし、その周りをθ回転を考えればよい。   この回転の行列をM’’とする。 • 変換前の座標系Cにカメラを移す行列がMで与えられているとすると、   ビュー行列に   を設定すればよい

  19. P(p1, p2, p3) P C’(c1’, c2’, c3’) |C P| C’ P |C P| θ |C P| C’ θ y θ z C v C x v v C(c1, c2, c3) 任意の方向へのカメラ位置の回転 • 任意のベクトルv(vはxy平面上のベクトル)の方向にθ回転することを考える。 • まず、x座標とベクトルvの向きが等しくなるようにz軸のまわりに座標系を回転させる。その角度は • 次に、x軸方向にθ回転させればよい x軸方向とvの方向を 等しくする x軸方向に回転

  20. x軸をベクトルvの方向と等しくするためにz軸の周りに座標系を回転させるための行列は、「単位ベクトルnの周りの回転を表す行列(補足)」の中で説明した「単位ベクトルをz軸方向」とした場合の行列である。x軸をベクトルvの方向と等しくするためにz軸の周りに座標系を回転させるための行列は、「単位ベクトルnの周りの回転を表す行列(補足)」の中で説明した「単位ベクトルをz軸方向」とした場合の行列である。 (回転角は         である。)   この行列をM’とする。 • 次にx軸方向に回転させるための行列は、「x軸、y軸方向へのカメラ位置の回転」の中で説明した「x軸方向への回転」とした場合の行列である。   (回転角はθである。) この行列をM’’とする。 • 変換前の座標系Cにカメラを移す行列がMで与えられているとすると、   ビュー行列に を設定すればよい。

More Related