OpenGL入門
光源のパラメータ設定1
光と反射で紹介されている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 プログラミング