2017-03-18 - 2018-05-30 (update) |
|
|
仮想的に配置したカメラに3次元モデルを描画したいとします.この時に必要になる座標変換について説明します.
*モデル座標系とカメラ座標系
図1の{$C$}と{$M$}はそれぞれカメラ座標系とモデル座標系の中心です.2つの座標系の違いを表す回転と並進のパラメータは,3行3列の回転行列{$R$}と3次元の並進ベクトル{$T$}で表現することにします.
[img:7tz5]
{{small:図1 3次元の座標系と位置の表現}}
**モデル座標系
一般的に3次元モデルは,それを構成する点の位置を3次元ベクトルとして保持しています.例えば,図1の3次元モデル上の点{$P$}の位置は,{$(X_M, Y_M, Z_M)$}というように保持されています.この各軸の数値は3次元モデルの原点{$M$}を基準としたモデル座標系で表現されています.
**カメラ座標系
カメラ座標系はカメラの光学中心を基準とした座標系です.カメラ座標系で物体の位置を表現できると,カメラモデルに従って2次元画像上の位置を計算できます.
*3次元の座標変換
カメラの画像上に3次元モデルを描画するには,3次元モデルを構成する点群をカメラ座標系に変換する必要があります.この座標系の変換は,2つの座標系の回転と並進のパラメータを基にして計算します.
具体的に,モデル座標系での点{$P$}の位置を{$(X_M, Y_M, Z_M)$},カメラ座標系での点{$P$}の位置を{$(X_C, Y_C, Z_C)$}と置いたとき,その両者の関係は次の式で計算できます.
{$
\begin{bmatrix} X_C\\Y_C\\Z_C \end{bmatrix} = R\begin{bmatrix} X_M\\Y_M\\Z_M \end{bmatrix} + T \tag{1}
$}
この式は,まずは回転行列{$R$}を掛けて2つの座標系の軸の方向を合わせ,次に3次元ベクトル{$T$}を足して2つの座標系の中心の位置を合わせることを意味しています.
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/gl/render
画面上に3次元モデル(stanford bunny)上の点群を表示します.
{{small:プログラムを実行するには,stanford bunnyのデータが必要です.}}
{{small:The Stanford 3D Scanning Repository: [link:https://graphics.stanford.edu/data/3Dscanrep/] }}
>> ご意見・ご質問など お気軽にご連絡ください.info