Archive for the ‘3D’ Category

[openGL, GLSL] openGL+GLSLのメモ #2 座標系

openGLとかGLSLやっていくうえで座標系がしっかり理解できてないとこの先理解できないので、
基礎的なことだけどちゃんとメモ。

座標系と変換の流れ

1. オブジェクト座標系(モデリング座標、ローカル座標)
オブジェクトの頂点や法線を表す座標系

  •     ▼ モデリング変換 : オブジェクト座標系をワールド座標系に変換
2. ワールド座標系(グローバル座標系)
空間中のオブジェクトの位置を示す座標系
  •     ▼ 視野変換(ビューイング変換) : ワールド座標系から視点座標系への変換
3. 視点座標系(眼点座標系)
空間を視点(カメラ)から見た空間へ変換した座標系。
  •     ▼ 射影変換 : 視点座標系からクリップ座標系への変換(オブジェクトの奥行き情報を保持する変換)
4. クリップ座標系
視点からの近平面と遠平面をクリッピングする座標系(たぶん)
  •     ▼ 遠近除算 : 遠近除算(正規化)処理をすることで、クリップ座標系から正規化デバイス座標系になる
5. 正規化デバイス座標系
クリップ座標系の座標 x, y, z 成分を w で割った座標系
  •     ▼ ビューポート変換 : 正規化デバイス座標系からウインドウ座標系への変換
6. ウインドウ座標系
表示画面に対応するピクセル単位の座標系




以下は実際のopenGLでの処理。流れは逆からになる。

ビューポート変換 5 → 6

正規化デバイス座標系からウインドウ座標系への変換
ウインドウに設定される実際の描画領域の設定
通常は表示ウインドウとビューポートのサイズを一致させて作る

void glViewport(GLint x , GLint y , GLsizei width , GLsizei height);



射影変換 3 → 4, 5

視点座標系からクリップ座標系に変換
投影の設定

glMatrixMode( GL_PROJECTION );
glLoadIdentity();


射影行列を使うことを宣言してから、変換を行う

・透視投影の場合
void gluPerspective(
	GLdouble fovy , GLdouble aspect ,
	GLdouble zNear , GLdouble zFar
);


aspectをビューポート変換で設定した width / height に設定することで
図形の長さの比が保たれるようになる

・正射影の場合
void glOrtho(
	GLdouble left , GLdouble right ,
	GLdouble bottom , GLdouble top , 
	GLdouble near , GLdouble far      
);



視野変換 2 → 3

ワールド座標系から視点座標系への変換
視点の設定と中心点の設定を行う

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();


モデルビュー行列を使うことを宣言してから、変換を行う
void gluLookAt(GLdouble ex, GLdouble ey, GLdouble ez, 
			 GLdouble cx, GLdouble cy, GLdouble cz, 
			 GLdouble ux, GLdouble uy, GLdouble uz)
//例)
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);


ex, ey, ez : 視点(カメラ)の位置
cx, cy, cz : シーンの中心点
ux, uy, uz : 視体積の上方部分( 通常は 0.0, 1.0, 0.0 でおっけ)


モデリング変換 1 → 2

オブジェクト座標系をワールド座標系に変換
下記の関数を利用して変換することを「アフィン変換(モデリング変換)」という

glScale*(sx, sy, sz);
glRotate*(angle, ax, ay, az);
glTranslate*(tx, ty, tz);



オブジェクトの描画

実際に表示させるオブジェクトを描画する



参考

OpenGL+GLSLによる画像処理プログラミング―「OpenGL」と「シェーダ言語」で「レタッチ・ソフト」の仕組みを知る! (I・O BOOKS)
OpenGLの座標系





[event] LightWave Creators Night vol.7に行ってきた

LightWave Creators Night vol.7
にいってきました!!

ROXIK 城戸 雅行氏 さんと orange-suzuki.com 鈴木 克史氏 さんの
すばらしいお話をきくことができよかったです。

LightWaveがめっさほしくなりました。。
Blenderもぜんぜん使いこなせてはないんですが、今日の話を聞いてしまったらLightWaveが使いたいです。
値段もそんなに高くないですし買っちゃおうかな~。。

でもなんだかんだで城戸さんの
リアルタイムでFlashに反映されるやつが一番興奮しました。
すごかった。





[AE, Pre, 3D] えいぞうこみゅにてぃー

AfterEffectsとかPremiereとか3Dの勉強になるサイト
http://movie-create.com/modules/tips/index.php?cid=2




[3D] 床に影

C4Dで床に影をつける方法
ライトobjectsの「shadow」で[None]を[Shadow Maps]にする

1a98bbb2