GLES2.0 Part 4 カメラの使い方 © Sazameki & Satoshi Numata, Ph.D. カメラ関係の設定 カメラ特性(視体積) 画角、カメラの撮影範囲(近景→遠景) カメラの設置 位置、向き、回転 オブジェクトの設置 位置、向き、回転、スケール すべて4x4行列で表す。 2 OpenGLの座標系 3 y O x z カメラ設定(視体積) 4 farZ nearZ y z O この領域内の物体だけが 描画される。 x 実際のレンズの画角 (fovy) 望遠レンズ 300mmレンズで8度 135mmレンズで18度 35mmフィルムを 想定した場合 標準レンズ(肉眼に近い) 50mmレンズで45度 広角レンズ 35mmレンズで62度 24mmレンズで84度 20mmレンズで94度 fovy 5 カメラの設定行列 6 カメラ特性(視体積) Projection Matrix 画角、カメラの撮影範囲(近景→遠景) カメラの設置 View Matrix 位置、向き、回転 オブジェクトの設置 Model Matrix 位置、向き、回転、スケール すべて4x4行列で表す。 かけ算 Model-View Matrix Projection Matrix (1/3) 7 GLKMatrix4MakePerspective( float fovyRadians, float aspect, float nearZ, float farZ) 0 < nearZ < farZ 画角、アスペクト比、nearZ と farZ 実際のカメラ特性を意識しながら設定する場合に使う。 nearZ nearZ farZ farZ fovy height = z * tan(fovy / 2) * 2 aspect = width / height width = height * aspect Projection Matrix (2/3) GLKMatrix4MakeFrustum( float left, float right, float bottom, float top, float nearZ, float farZ) 8 0 < nearZ < farZ nearZ の X-Y 平面の上下左右の位置を指定する。 nearZ と farZ の位置で画角が変わる。 top nearZ farZ bottom left nearZ farZ right 目の位置や視界などの 環境条件からカメラ設定が 決まる場合に使う。 Projection Matrix (3/3) 9 GLKMatrix4MakeOrtho( float left, float right, float bottom, float top, float nearZ, float farZ) 平行投影の表示を行う。主に2D向け。 left top nearZ nearZ farZ farZ bottom right nearZ, farZ の制約は ないが、値に応じて 描画方向が変わる。 View Matrix 10 GLKMatrix4MakeLookAt( eyeX, eyeY, eyeZ, targetX, targetY, targetZ, upX, upY, upZ); up (ベクトル) y O eye (座標) target (座標) x z Model Matrix 11 // 平行移動 GLKMatrix4MakeTranslation(float tx, float ty, float tz); GLKMatrix4Translate( GLKMatrix4 matrix, float tx, float ty, float tz); // 拡大・縮小 GLKMatrix4MakeScale(float sx, float sy, float sz); GLKMatrix4Scale( GLKMatrix4 matrix, float sx, float sy, float sz); // 回転 GLKMatrix4MakeRotation(float radians, float x, float y, float z); GLKMatrix4Rotate( GLKMatrix4 matrix, float radians, float x, float y, float z); 行列のかけ算 // ビュー行列 GLKMatrix4 viewMatrix = ...; // モデル行列 GLKMatrix4 modelMatrix = ...; // モデルビュー行列 GLKMatrix4 modelViewMatrix = GLKMatrix4Multiply( viewMatrix, modelMatrix); 12 行列のセット 13 // プロジェクション行列 self.effect.transform. projectionMatrix = projectionMatrix; // モデルビュー行列 self.effect.transform. modelviewMatrix = modelViewMatrix;
© Copyright 2024 ExpyDoc