Sazameki Satoshi Numata, Ph.D. GLES2.0 Part 4 カメラの使い方

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;