投影とはカメラから見た結果として3Dモデルを平面に変換することです。投影手法により、ワールド空間で表示に使われる領域 ( ビューボリューム ) の形が異なります。MascotCapsule V4では、投影手法として平行投影と透視投影がサポートされています。
1. 平行投影 ( Parallel View )
平行投影は、ワールドにある物体を遠近関係なくそのままの大きさで表示する投影法です。ビューボリュームはニアクリッピング面とファークリッピング面で挟まれた直方体となります。
平行投影を設定するには IMICRO3Dv4es_m3dCamera_setParallel ( inst, camera, fovy, aspectRatio, near, far ) メソッドを使います。ここで fovy はビューボリュームの高さ、 aspectRatio はビューポートのアスペクト比( 横対縦の比 )、 near はカメラからニアクリッピング面までの距離、 far はカメラからファークリッピング面までの距離をそれぞれ表しています。
以下は、サンプルコードでカメラに平行投影を設定している部分です。
本サンプルの投影パラメータは、あくまで目安です。実際には、モデルの大きさ等によって設定すべき値は異なります。
pmc -> pCamera = IMICRO3Dv4es_m3dWorld_getActiveCamera ( pMe -> pIM3D, pmc -> pWorld );
( 中略 )
/* 投影パラメータの初期化 */
pmc -> cameraHeight = 10.f;
pmc -> cameraFovy = 45.f;
pmc -> cameraAspect = IMICRO3Dv4es_m3dCalc_DtoF ( pMe -> pIM3D, FDIV ( FASSIGN_INT ( pMe -> cxScreen ), FASSIGN_INT ( pMe -> cyScreen )));
pmc -> cameraFarZ = 200.f;
/* 平行投影を設定 */
IMICRO3Dv4es_m3dCamera_setParallel ( pMe -> pIM3D,
pmc -> cameraAspect,
pmc -> cameraNearZ, pmc -> cameraFarZ );

平行投影
2. 透視投影 ( Perspective View )
透視投影は、近くのものは大きく、遠くのものは小さく見えるような一般的な遠近感を表現する投影方法です。ビューボリュームは、ニアクリッピング面とファークリッピング面で挟まれた四角錐となります。
透視投影を設定するには IMICRO3Dv4es_m3dCamera_setPerspective ( inst, camera, fovy, aspectRatio, nearZ, farZ ) メソッドを使います。ここで fovy は画角、 aspectRatio はビューポートのアスペクト比( 横縦比 )、 near はカメラからニアクリッピング面までの距離、 far はカメラからファークリッピング面までの距離をそれぞれ表しています。
透視投影のレンダリングの精度はニアクリッピング面からファークリッピング面までの距離に依存します。この距離が小さいほうがレンダリング精度は良くなります。また、nearの値が極端に小さいと桁落ちによって精度が落ちる場合がありますので、nearの値は大きめにしておく ( 1.0以上 ) ことを推奨します。
以下は、サンプルコードでカメラに透視投影を設定している部分です。
pmc -> pCamera = IMICRO3Dv4es_m3dWorld_getActiveCamera ( pMe -> pIM3D, pmc -> pWorld );
( 中略 )
/* 投影パラメータの初期化 */
pmc -> cameraFovy = 45.f;
pmc -> cameraAspect = IMICRO3Dv4es_m3dCalc_DtoF ( pMe -> pIM3D,
pmc -> cameraFarZ = 200.f;
( 中略 )
/* 透視投影を設定 */
IMICRO3Dv4es_m3dCamera_setPerspective ( pMe -> pIM3D,
pmc -> cameraNearZ, pmc -> cameraFarZ );

透視投影

