HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > OpenGL入門

OpenGL入門
光源のパラメータ設定1

文責:遠藤 理平 (2010年11月13日) カテゴリ:OpenGL入門(27)TIPS 集(99)

光と反射で紹介されているOpenGLにおける光源の各種パラメータの意味を体感するため、値を変えてみたものを比べるプログラムを書きます。

OpenGL

基準パラメータ

基準となるパラメータから変化させて、違いを見てみます。 以下は基準となるパラメタです。

static GLfloat lightPosition[4] = { -20.0, -20.0, 100.0, 1.0 }; //光源の位置
static GLfloat lightDiffuse[3]  = { 1.0,   1.0, 1.0  }; //拡散光
static GLfloat lightAmbient[3]  = { 0.25, 0.25, 0.25 }; //環境光
static GLfloat lightSpecular[3] = { 1.0,   1.0, 1.0  }; //鏡面光

光源の設定

光源の設定は次のように「glLightfv」関数を用いることで指定することができます。

glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_DIFFUSE,  lightDiffuse);
glLightfv(GL_LIGHT0, GL_AMBIENT,  lightAmbient);
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular);

GL_AMBIENT を指定する際のパラメタを変化させます

lightAmbient[0,1,2] = 0.0 ~ 1.0 まで変化させた結果です。

GL_DIFFUSE を指定する際のパラメタを変化させます

lightDiffuse[0,1,2] = 0.0 ~ 1.0 まで変化させた結果です。

GL_SPECULAR を指定する際のパラメタを変化させます

lightSpecular[0,1,2] = 0.0 ~ 1.0 まで変化させた結果です。

GL_POSITION を指定する際の4つ目の引数変化させます

lightPosition[3] = 0~3 まで変化させた結果です。

lightPosition[3] = {x,y,z,w} の場合、実際の光源は (x/w, y/w, z/w)の点光源を意味します。 w=0 の場合は、無限遠からの照射、つまり平行光となります。 上の例で、lightPosition[3] ~ 3 で、影が大きくなってしまう理由は、点光源の位置 (x/w, y/w, z/w) が球体の中に入ってしまうためであることが分かります。
光源の設定/OpenGL de プログラミング



タグ: ,

▲このページのトップNPO法人 natural science トップ

関連記事

OpenGL入門







TIPS 集

▲このページのトップNPO法人 natural science トップ