OpenGL之光照

OpenGL之光照

OpenGL光的顏色由紅綠藍(RGB)的分量確定,當光照到表面時,由表面的材質的確定反射的光的顏色(RGB).

OpenGL光有四類 簡介
環境光 無特定照射方向,太陽光
漫射光 有照射方向的光,遇表面光將朝反方向照射, 如燈光不受相機位置影響.
反射光 有照射方向,遇表面光將朝反方向照射.如亮光但受相機位置影響.
放射光 只增加物體的亮度

 

OpenGL光照影響因素 簡介
光源 環境光、漫射光、反射光、放射光
材質 確定反射光RGBA值
法線 由表面的頂點計算方向
相機位置 當光折射時, 相機位置影響反射光的計算

 

光的顏色、位置、方向的設定:
void glLightfv (GLenum light, GLenum pname, const GLfloat *params);

 

glLightfv()參數 簡介
light GL_LIGHT0~ GL_LIGHT7

OpenGL最多可以指定8個光源

pname 光源的參數名見下表
Params 光源的參數值

 

光源的參數名Pname 簡介
GL_AMBIENT 環境光向所有方向照射
GL_DIFFUSE 漫射光具有方向,碰撞到FACE會進行反射
GL_SPECULAR 鏡面反射光
GL_POSITION 光的位置
GL_SPOT_DIRECTION 聚光燈的矢量方向
GL_SPOT_EXPONENT 聚光燈的指數
GL_SPOT_CUTOFF 聚光燈的邊界
GL_CONSTANT_ATTENUATION 衰減值係數常量
GL_LINEAR_ATTENUATION 線性衰減值係數
GL_QUADRATIC_ATTENUATION 二次衰減值係數

 

環境光 簡介
Pname=GL_AMBIENT 環境光
Params=(x,y,z,w) 顏色分量
w=alpha w=0透明

w=1實體

float Light_Ambient[] = { 1.0f,1.0f,1.0f,1.0f};

glLightfv(GL_LIGHT0,GL_AMBIENT, Light_Ambient);

亮白的環境光示例

 

漫射光 簡介
GL_DIFFUSE 漫射光
Params=(x,y,z,w) 顏色分量
w=alpha w=0透明

w=1實體

float Light_Diffuse[] = { 1.0f,1.0f,1.0f,1.0f};

glLightfv(GL_LIGHT0,GL_DIFFUSE, Light_Diffuse);

亮白的漫射光示例

 

光源的位置 簡介
Pname= GL_POSITION 設定光源的位置
Params=(x,y,z,w) 向量或坐標
w=0 定向光源(x,y,z)為向量定義光的照射方向,如太陽.
W=1 定點光源(x,y,z)為坐標定義光源的位置,如燈泡.
float Light_Position[] = {0.0f,0.0f,0.0f,1.0f };

glLightfv(GL_LIGHT0,GL_POSITION,Light_Position);

光源的位置設在原點

 

光衰減(OpenGL支持三類光衰減) 默認值 簡介
ATTENUATION 光線隨著距離的增大其強度減小,但只適用於定點光源,但定向光源是無窮遠的設置衰減是無意義.

衰減因子*光強度 = 光衰減

GL_CONSTANT_ATTENUATION 1.0f 衰減值係數常量
GL_LINEAR_ATTENUATION 0.0f 線性衰減值係數
GL_QUADRATIC_ATTENUATION 0.0f 二次衰減值係數

光照亮度演示程式,定點光源並且全方位輻射.如上圖:下載

  1. 按+/-鍵增加或減小光照亮度
  2. 按SPACE(空格)鍵啟用或禁用光照
  3. 按UP/DOWN鍵正方形繞X軸旋轉
  4. 按LEFT/RIGHT鍵正方形繞Y軸旋轉
  5. 按Z+LEFT/Z+RIGHT鍵繞Z軸旋轉
  6. 按F1鍵打開幫助
  7. 按ESC鍵重置模型旋轉角度

 

評論