第3回 投影

オンデマンドで受講する場合は、本題に入る前に必ず連絡の動画を見てください。

平行投影

概要

動画の解説を参照

CGツールなどで作成したモデルは3次元的につくられているため、それを構成するポリゴンの頂点は \(x, y, z\) の3つの座標を持ちます。
一方、それをもとにしてレンダリングした静止画や動画は2次元的な \(x', y'\) の座標を持ちます。
つまり、レンダリングするためには \(x, y, z\) から \(x', y'\) を計算する工程が必要になるということです。
このやり方には平行投影透視投影があります。
平行投影は、単純にモデルの方の \(z\) 座標を無視し、\(x, y\) をそのまま \(x', y'\) にするだけです。
\(x' = x\)
\(y' = y\)
下の図のように、モデルの裏側から平行光線を当ててスクリーンに当たったところの座標を使うイメージです。

課題1

※ 準備 : 学籍番号を入れて「入力」をクリック (タップ) してください。


\(A_1\) ~ \(A_8\) を頂点とする、1辺の長さが2の立方体に対し、 を順に行ったものを、 \(XY\) 平面に平行投影した座標 (四捨五入して小数第2位までにする) を計算して下のような表を完成させ、それをもとにして図を描いてください。
頂点 変換前座標 投影座標
\(x\) \(y\) \(z\) \(x''\) \(y''\)
\(A_1\) 1 1 1
\(A_2\) 1 -1 1
\(A_3\) -1 -1 1
\(A_4\) -1 1 1
\(A_5\) 1 1 -1
\(A_6\) 1 -1 -1
\(A_7\) -1 -1 -1
\(A_8\) -1 1 -1
課題用方眼画像

課題1解説
立方体の頂点はどれも同じ変換を受けます。問題文にある3つの変換は、 原点から変換前, 変換後の座標に向かう同次表現のベクトルを \(\boldsymbol{r}\), \(\boldsymbol{r}'\) とすると、 \(\psi=\) , \(\phi=\) , \(\boldsymbol{t}=(0, 0, -2)\) として
\(\boldsymbol{r}'\) \(=\boldsymbol{T}(\boldsymbol{t})\) \(\boldsymbol{R}_x(\phi)\) \(\boldsymbol{R}_y(\psi)\) \(\boldsymbol{r}\)

\( \begin{pmatrix} x'\\ y'\\ z'\\ 1 \end{pmatrix} \) \( =\begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & -2\\ 0 & 0 & 0 & 1 \end{pmatrix} \) \( \begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & \cos\phi & -\sin\phi & 0\\ 0 & \sin\phi & \cos\phi & 0\\ 0 & 0 & 0 & 1 \end{pmatrix} \) \( \begin{pmatrix} \cos\psi & 0 & \sin\psi & 0\\ 0 & 1 & 0 & 0\\ -\sin\psi & 0 & \cos\psi & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix} \) \( \begin{pmatrix} x\\ y\\ z \\ 1 \end{pmatrix} \)

\(= \begin{pmatrix} \cos\psi & 0 & \sin\psi & 0\\ \sin\phi\sin\psi & \cos\phi & -\sin\phi\cos\psi & 0\\ -\cos\phi\sin\psi & \sin\phi & \cos\phi\cos\psi & -2\\ 0 & 0 & 0 & 1 \end{pmatrix} \) \( \begin{pmatrix} x\\ y\\ z \\ 1 \end{pmatrix} \)
なので、2つの回転と平行移動を行ったあとの座標はこうなります。
\(x' = x\cos\psi + z \sin\psi\)
\(y' = x\sin\phi\sin\psi + y\cos\phi -z\sin\phi\cos\psi\)
\(z' = -x\cos\phi\sin\psi + y\sin\phi + z\cos\phi\cos\psi -2\)
これをスクリーンに平行投影した座標 \(x'', y''\) は、結局 \(x', y'\) と同じなのでこうなります。
\(x'' = x\cos\psi + z \sin\psi\)
\(y'' = x\sin\phi\sin\psi + y\cos\phi -z\sin\phi\cos\psi\)
Excelを使った解き方
\(x'', y''\) を求める式には \(\cos\psi\), \(\sin\psi\), \(\cos\phi\), \(\sin\phi\) が出てくるので、これらの計算式を特定のセルに入れておくと楽になります。
例えばG4セルに入れる式は「=COS(RADIANS(G2))」です。

\(x'' = x\cos\psi + z \sin\psi\)
\(y'' = x\sin\phi\sin\psi + y\cos\phi -z\sin\phi\cos\psi\)
なので、D2, E2セルにそれぞれ
=A2*G4+C2*G5
=A2*G7*G5+B2*G6-C2*G7*G4
と入力すればもとの座標 (1, 1, 1) の変換後の値を計算できますが、そのまま (1, -1, 1) 以降セルのにコピーすると、\(\sin\psi\), \(\cos\psi\), \(\sin\phi\), \(\cos\phi\) の値が入ったセルの参照位置がずれてしまいます。そこで、ここに入れる式を
=A2*G$4+C2*G$5
=A2*G$7*G$5+B2*G$6-C2*G$7*G$4
としてやれば、D2, E2セルをコピーしてD3~E9セルにペーストするだけですべての頂点の変換後の座標が計算できます。 また、計算した座標のセルについて「セルの書式設定」をこのようにすれば、小数第2位までになるように四捨五入した値が表示されるようになります。

透視投影

概要

動画の解説を参照

透視投影では、スクリーンをはさんでモデルと逆の側に仮想的なカメラを配置し、ポリゴンの頂点とカメラを結ぶ線分とスクリーンが交わった点の座標を使います。 こうすることで、平行投影とくらべて立体感のある図形になります。
スクリーンを \(XY\)平面とし、原点からカメラの位置に向かうベクトルを \(\boldsymbol{c} = (0, 0, c_z)\) とすると、ポリゴンの頂点 \(\boldsymbol{r} = (x, y, z)\) に対応するスクリーン上の座標は
\(x' = x \)\(\Large{\frac{c_z}{c_z-z}}\)

\(y' = y \)\(\Large{\frac{c_z}{c_z-z}}\)
となります。

課題2

課題1と同じ立方体を考え、同様に回転・移動させたものを、スクリーンが \(XY\)平面で、カメラの座標が \((0, 0, 5)\) の場合に透視投影した座標 (四捨五入して小数第2位までにする) を計算して下のような表を完成させ、それをもとにして図を描いてください。
頂点 変換前座標 投影座標
\(x\) \(y\) \(z\) \(x''\) \(y''\)
\(A_1\) 1 1 1
\(A_2\) 1 -1 1
\(A_3\) -1 -1 1
\(A_4\) -1 1 1
\(A_5\) 1 1 -1
\(A_6\) 1 -1 -1
\(A_7\) -1 -1 -1
\(A_8\) -1 1 -1
課題用方眼画像

課題2解説
課題1の立方体を回転・移動させたあとの座標は、前に計算した通り
\(x' = x\cos\psi + z \sin\psi\)
\(y' = x\sin\phi\sin\psi + y\cos\phi -z\sin\phi\cos\psi\)
\(z' = -x\cos\phi\sin\psi + y\sin\phi + z\cos\phi\cos\psi -2\)
です。これをスクリーンに平行投影した座標 \(x'', y''\) は、概要の式で \(c_z = 5\) として以下のようになります。
\(x'' = x'\) \(\Large{\frac{5}{5-z'}}\)

\(y'' = y'\) \(\Large{\frac{5}{5-z'}}\)
Excelを使った解き方
こんどは \(x'', y''\) は \(x', y'\) とは異なった値になります。
また、課題1で求めた値に加えて \(z'\) も必要になるので、列を3つ追加してこのようにし、

\(z' = -x\cos\phi\sin\psi + y\sin\phi + z\cos\phi\cos\psi -2\)
F2セルで
=-A2*J$6*J$5+B2*J$7+C2*J$6*J$4-2
としてやれば、(1, 1, 1) を変換した \(z\) 座標が計算できます。あとはこれをF3~F9セルにペーストするだけですべての頂点の変換後の \(z\) 座標が計算できます。
\(x'' = x'\) \(\Large{\frac{5}{5-z'}}\)

\(y'' = y'\) \(\Large{\frac{5}{5-z'}}\)
の計算はG2, H2セルでそれぞれ
=D2*5/(5-F2)
=E2*5/(5-F2)
とし、それを G3~H9にコピーするだけです。

提出

課題解答
計算用Excelファイル (Teamsのメンバーのみが見られます。ダウンロードして \(\phi, \psi\) の値を書きかえればそれに応じた計算になります)