bambooflow Note

メモ

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

OpenGLメモ



投影座標変換


遠近感を出す処理。

透視投影(遠近投影法)の行列を用いる準備。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();


モデルビュー座標変換


視点にたいしてモデル位置づけ。

モデルビュー行列を用いる準備。
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

平行移動

glTranslate( 0.0f, 5.0f, 0.0f ); // y方向に5.0平行移動

拡大縮小

glScalf( 2.0f, 2.0f, 2.0f ); // 2倍に拡大

回転

glRotatef( 45.0f, 1.0f, 0.0f, 0.0f ); // x軸で45度回転


ポートビュー座標変換


glViewport(Left, Bottom, Width, Height);

  • 透視変換
glViewport( 0, 0, w, height );

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective( 30.0f, w/h, 1.0, 100.0 ); // 視野角, 視体積のアスペクト比, 近クリップ距離, 遠クリップ距離

glMatirxMode(GL_MODELVIEW);


光源の設定


  1. 環境光(ambient)
  2. 拡散光(diffuse)
  3. 鏡面光(specular)
  4. 放射光(emission)

設定例)
GLfloat light0_amb[]  = {0.1f, 0.1f, 0.1f, 1.0f};
GLfloat light0_diff[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat light0_spec[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat light0_pos[]  = {0.0f, 0.0f, 10.0f, 0.0f};

void setLight() {
    glLightfv( GL_LIGHT0, GL_AMBIENT, light0_amb );
    glLightfv( GL_LIGHT0, GL_DIFFUSE, light0_diff );
    glLightfv( GL_LIGHT0, GL_SPECULAR, light0_spec );
    glLightfv( GL_LIGHT0, GL_POSITION, light0_pos );

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
}


マテリアルの設定


  1. 環境光(ambient)
  2. 拡散光(diffuse)
  3. 鏡面光(specular)
  4. 放射光(emission)


物体に光沢を付ける(第三パラメータを大きくするとつやっぽくなる)
glMaterialfv(GL_FRONT, GL_SHININESS, 100.0f);


法線の設定


ライト有効時(glEnable(GL_LIGHTING))、照明モデルがオブジェクトに正しく作用させるには、オブジェクトに法線ベクトルを指定する必要があります。
オブジェクトの各頂点設定と一緒に法線ベクトルを設定します。


// 地面
void drawPrimPlane(float gsize)
{
    glBegin( GL_TRIANGLE_STRIP );
    glNormal3f( 0,0,1 ); // z方向に法線ベクトルを設定
    glVertex3f(-gsize,-gsize,0.0f);
    glVertex3f( gsize,-gsize,0.0f);
    glVertex3f(-gsize, gsize,0.0f);
    glVertex3f( gsize, gsize,0.0f);
    glEnd();
}


シェーディング・モデル


  • スムース・シェーディング
  • フラット・シェーディング

glShadeModel(GL_SMOOTH);
glShadeModel(GL_FLAT);


デプス・テスト


多角形に影を付ける。
デプステストは、多角形の前後関係を決める。

glEnable(GL_DEPTH_TEST);

初期化時にしておけばOK。

デプステスト有効時は、バッファをクリアしてからレンダリングする。
glClaer( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );



隠面消去処理




描画処理




フレーム・バッファ




行列スタック




ディスプレイ・リスト



#include <GL/gl.h>

 
GLuint theList;
 
void init()
{
    theList = glGenLists(1);
    glNewList(theList, GL_COMPILE);
    {
        draw();
    }
    glEndList();
}
 
void display()
{
    glPushMatrix();
 
    glCallList(theCapsule);
 
    glPopMatrix();
}
 
 

テクスチャ・マッピング




混合処理




アンチエリアシング


スクリーン上の線のジャギー(ギザギザ)を滑らかに見せる処理。

glEnable(GL_LINE_SMOOTH);


フォグ




頂点配列

タグ:

OpenGL
記事メニュー
目安箱バナー