ホームに戻る
 光源

図01_00:物体の手前 -1.0 に点光源 減衰率 I=1/(1+0.5*d)

ソースコード:glut01_light.c
 解説

光源

光源はモデルビュー空間の座標上に存在します。
光源は通常8個まで同時に使用でき、
利用する際にはライティングを有効にし、
各ライトについても有効にする必要があります。

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

光源には点光源と平行光源があります。
これは GL_POSITION の第4引数で設定します。

第4引数が 0 のとき平行光源となり、それ以外は点光源です。

平行光源の時は第1〜3引数は向きのみの情報ですが、
点光源の場合はモデルビュー空間上の直接の座標となります。

点光源の場合はスポットライトのような表現も可能。
パラメータは以下、

GL_SPOT_DIRECTION:向き
GL_SPOT_EXPONENT:中心からの減衰率
GL_SPOT_CUTOFF:ライトの広がり(0.0-180.0)

点光源の距離 d に対する減衰率 I は次のようにも設定できる。

I = 1 / (constant + linear * d + quadratic * d^2)

パラメータは以下、

GL_CONSTANT_ATTENUATION:式中のconstant
GL_LINEAR_ATTENUATION:式中のlinear
GL_QUADRATIC_ATTENUATION:式中のquadratic

その他のパラメータ、
要素は RGBW であり最終的には R/W、G/W、B/W が適応される。

GL_AMBIENT:光が当たっていない部分の明るさ
GL_DIFFUSE:ライト自体の光の明るさ
GL_SPECULAR:光が当たっている部分の明るさ

その他の設定、

GL_LIGHT_MODEL_AMBIENT:ライトが無い状態での明るさ
GL_LIGHT_MODEL_LOCAL_VIEWER:視点を考慮した鏡面反射
GL_LIGHT_MODEL_TWO_SIDE:面の裏も照らす

初期値のリスト、

glLightfv or glLightf

GL_AMBIENT:(0, 0, 0, 1)
GL_DIFFUSE:GL_LIGHT0=(1, 1, 1, 1)、GL_LIGHT1-7=(0, 0, 0, 0)
GL_SPECULAR:GL_LIGHT0=(1, 1, 1, 1)、GL_LIGHT1-7=(0, 0, 0, 0)
GL_POSITION:(0, 0, 1, 0)
GL_SPOT_DIRECTION:(0, 0, -1)
GL_SPOT_EXPONENT:0
GL_SPOT_CUTOFF:180
GL_CONSTANT_ATTENUATION:1
GL_LINEAR_ATTENUATION:0
GL_QUADRATIC_ATTENUATION:0

glLightModelfv or glLightModelf

GL_LIGHT_MODEL_AMBIENT:(0.2,0.2,0.2,1.0) 
GL_LIGHT_MODEL_LOCAL_VIEWER:GL_FALSE 
GL_LIGHT_MODEL_TWO_SIDE:GL_FALSE 

物体の設定

光源のベクトルと物体の法線のベクトルが逆向きであれば、
物体の面は最も明るい。
逆に光源のベクトルと物体の法線のベクトルが垂直であれば、
平行光源の場合に物体の面には光が当たらない。

この計算をするために、
物体の頂点を指定するごとに法線も指定する必要がある。
このときの glNormal は向きだけの情報で良い。

物体のパラメータ、

GL_AMBIENT:光の当たっていない部分の反射
GL_DIFFUSE:ライトの光にたいする反射
GL_SPECULAR:光が当たっている部分の反射(初期値は0)
GL_SHININESS:GL_SPECULARの強さ(0.0-128.0)

発光する物体

GL_EMISSION を用いて発光する物体を作成できるが、
光源にはなり得ないので物体と同じ位置に光源を置く、
などの工夫が必要になる。

初期値のリスト、

glMaterialf or glMaterialfv

GL_AMBIENT:(0.2, 0.2, 0.2, 1)
GL_DIFFUSE:(0.8, 0.8, 0.8, 1)
GL_SPECULAR:(0, 0, 0, 1)
GL_EMISSION:(0, 0, 0, 1)
GL_SHININESS:0

inserted by FC2 system