Windows資源文檔的編譯與讀取

Windows資源文檔的編譯與讀取

Windows程式就是單獨的.exe執行文件.但若程式需要讀取文檔才能運行.可以將其與.exe文件一起放置,但這樣就失去保密性.更好處理方法是將文檔編譯進.exe執行文件.這樣執行程式就無需附帶其它文檔.以VC為例:

把資源文檔編譯進.exe執行文件

  1. 在VC工程目錄創建名為”res”的目錄(其它名都可以)
  2. 把資源文檔當拷貝進”res”的目錄
  3. 以文本方式編輯rc文檔,寫入資源文檔的路徑
  4. name/ID flag   path
  5. 編譯器把所以資源文檔編譯成.RES文檔,最後與其它.obj文檔連接並生.exe執行文件
定義資源文檔 簡介
resources.rc

Heightmap  RAW  “res\\heightmap.raw”

通過字符串名定義

RAW為類型名

Heightmap為資源名

resource.h

#define  ID_MAP   1500

resources.rc

ID_MAP  RAW  “res\\heightmap.raw”

通過整數標識符定義

ID_MAP為資源ID

也可直接使用數字

讀取資源文檔示例

  1. 查找資源FindResource()
  2. 加載資源LoadResource()
  3. 獲取文檔的長度SizeofResource()
  4. 鎖定資源並獲取指針LockResource()

C代碼版本

hInstance:程式的實例句柄

filename:資源文檔名

type:類型名

PBYTE Read_RES(HINSTANCE hInstance,char *filename,char * type)

{//  查找資源

HRSRC hRsrc =::FindResource((HMODULE)hInstance,filename,type);

if(hRsrc == NULL)

return false;

//加載資源

HMODULE hGlobal = (HMODULE)::LoadResource((HMODULE)hInstance,hRsrc);

// 獲取文檔的字節長度

int size =::SizeofResource((HMODULE)hInstance,hRsrc);

// 鎖定資源並獲取指針

PBYTE res = (PBYTE) ::LockResource(hGlobal);

// 分配內存空間

PBYTE data = (PBYTE)malloc(size);

// 拷貝數據

memcpy(data,res,size);

if(hGlobal)

FreeResource(hGlobal); // 釋放資源句柄

return data;

}

OpenGL之煙霧

OpenGL之煙霧

煙霧(Fog)使遠距離的物體變暗,近距離的物體變得清晰.是遊戲中常用特效.OpenGL煙霧將每個像素煙霧色進行混合處理.

煙霧演示程式:下載

  1. 按+/-鍵移動煙霧距離
  2. 按ESC鍵重置聚煙霧

煙霧函式演示:

  1. glEnable(GL_FOG);
  2. GLfloat fogColor[] = { 0f, 0.0f, 0.0f };
  3. glFogfv(GL_FOG_COLOR, fogColor);
  4. glFogi(GL_FOG_MODE, GL_LINEAR);
  5. glFogi(GL_FOG_COORD_SRC,GL_FRAGMENT_DEPTH);
  6. glFogf(GL_FOG_START, start);
  7. glFogf(GL_FOG_END, end);
  8. glFogf(GL_FOG_DENSITY, 2f);
  9. Draw_Terrain();
  10. glDisable(GL_FOG);

OpenGL通過glFog()函式設定的距離、顏色、密度生成煙霧

參數 簡介
glFogi(GL_FOG_MODE, GL_LINEAR); 設定混合方程式

GL_LINEAR:線性混合

GL_EXP:指數混合(默認值)

GL_EXP2:二次指數指數混合

glFogf(GL_FOG_DENSITY, 1.2f); 煙霧的單位密度,數值需為正,默認值為1.0
glFogf(GL_FOG_START, start); 煙霧距離視口的近端距離
glFogf(GL_FOG_END, end); 煙霧距離視口的遠端距離
glFogi(GL_FOG_INDEX, 0); 設定煙霧顏色8位調色版索引
GLfloat fogColor[] = { 0.5f, 0.5f, 0.5f };

glFogfv(GL_FOG_COLOR, fogColor);

設定煙霧顏色(RGB),默認為黑色.
glFogi(GL_FOG_COORD_SRC,

GL_FRAGMENT_DEPTH);

深度值

GL_FRAGMENT_DEPTH:視口與煙霧的距離(默認值)

GL_FOG_COORD:使用glFogCoordf();設定煙霧坐標

 

混合方程式 簡介
Color=blendFactor*in + (1-blendFactor)*fog 混合方程式
blendFactor 混合因子
in 輸入顏色
fog 煙霧顏色
Color 輸出顏色

 

混合因子方程式 簡介
GL_LINEAR 線性混合

blendFactor=(end-depth)/(end-start)

GL_EXP 指數混合(默認值)

blendFactor= EXP (e, -density*depth)

GL_EXP2 二次指數指數混合

blendFactor= EXP(EXP (e, -density*depth),2)

 

Windows菜單之多選與單選

Windows菜單之多選與單選

Windows菜單可以通過實現單選(點選)與多選(勾選)展現當前狀態.你無需更改MENU結構,只需運行時更改菜單項MENUITEM的標記.

菜單多選與單選(函式示例) 簡介
HMENU menu = GetSubMenu(main_menu,1); 獲取子菜單句柄
CheckMenuRadioItem(

menu,

ID_FIRST,

ID_LAST,

ID_CHECK,

MF_BYCOMMAND);

單項選擇

ID_FIRST第一個菜單

ID_LAST最後一個菜單ID

ID_CHECK單選(點選)菜單ID

 

CheckMenuItem(menu,

ID_CHECK,

MF_BYCOMMAND|MF_CHECKED);

選擇多個菜單項(多項選擇)
CheckMenuItem(menu,

ID_CHECK,

MF_BYCOMMAND|MF_UNCHECKED);

取消選擇菜單項(多項選擇)

 

 

 

 

 

 

 

OpenGL之顏色混合

OpenGL之顏色混合

OpenGL之顏色混合alpha通過glBlendFunc()設定的混合因子生成透明效果,但通過其它的混合因子可產生更多不同的混合效果.令外OpenGL的顏色混合是無需啟用光照的glEnable(GL_LIGHTING); 但需要啟動多邊形隱面裁剪::glEnable(GL_CULL_FACE);否則會有一面會繪畫錯誤.

混合因子演示程式.下載

  1. 設定Sour Factor選擇”來源混合因子”
  2. 設定Dest Factor選擇”目標混合因子”
  3. 設定Blend Equation選擇”混合公式”
glBlendFunc()的混合公式 簡介
GL_FUNC_ADD C =(Cs*S)+(Cd*D) 默認值
GL_MIN C =MIN(Cs,Cd)
GL_MAX C =MAX(Cs,Cd)
GL_FUNC_SUBTRACT C =(Cs*S)-(Cd*D)
GL_FUNC_REVERSE_SUBTRACT C =(Cd*S)-(Cs*D)

 

公式因子 簡介:混合因子的簡介可通過最下表查閱
Cs: 來源顏色
S: 來源混合因子
Cd: 目標顏色
D: 目標混合因子

 

S來源混合因子 簡介
GL_ZERO sour (r,g,b,a) *{0,0,0,0}
GL_ONE sour (r,g,b,a) * (1,1,1,1)
GL_DST_COLOR sour (r,g,b,a) * dest (r,g,b,a)
GL_ONE_MINUS_DST_COLOR sour (r,g,b,a) * ((1,1,1,1)- dest(r,g,b,a))
GL_SRC_ALPHA sour (r,g,b,a) * sour(alpha)
GL_ONE_MINUS_SRC_ALPHA sour (r,g,b,a) * (1- sour(alpha))
GL_DST_ALPHA sour (r,g,b,a) * dest(alpha)
GL_ONE_MINUS_DST_ALPHA sour (r,g,b,a) * (1- dest(alpha))
GL_SRC_ALPHA_SATURATE sour (r,g,b,a) * MIN(sour(alpha),1-dest(alpha))
GL_CONSTANT_COLOR sour (r,g,b,a)* Color(r,g,b,a)
GL_ONE_MINUS_CONSTANT_COLOR sour (r,g,b,a)*( (1,1,1,1)- Color(r,g,b,a))
GL_CONSTANT_ALPHA sour (r,g,b,a)* Color(alpha)
GL_ONE_MINUS_CONSTANT_ALPHA sour (r,g,b,a)*(1-Color(alpha))

 

D目標混合因子 簡介
GL_ZERO dest (r,g,b,a) *{0,0,0,0}
GL_ONE dest (r,g,b,a) * (1,1,1,1)
GL_SRC_COLOR dest (r,g,b,a) * sour (r,g,b,a)
GL_ONE_MINUS_SRC_COLOR dest (r,g,b,a) * ((1,1,1,1)- sour (r,g,b,a))
GL_SRC_ALPHA dest (r,g,b,a) * sour (alpha)
GL_ONE_MINUS_SRC_ALPHA dest (r,g,b,a) * (1- sour (alpha))
GL_DST_ALPHA dest (r,g,b,a) * dest (alpha)
GL_ONE_MINUS_DST_ALPHA dest (r,g,b,a) * (1- dest (alpha))
GL_SRC_ALPHA_SATURATE dest (r,g,b,a) * MIN(sour(alpha),1-dest(alpha))
GL_CONSTANT_COLOR dest (r,g,b,a)* Color(r,g,b,a)
GL_ONE_MINUS_CONSTANT_COLOR dest (r,g,b,a)*( (1,1,1,1)- Color(r,g,b,a))
GL_CONSTANT_ALPHA dest (r,g,b,a)* Color(alpha)
GL_ONE_MINUS_CONSTANT_ALPHA dest (r,g,b,a)*(1-Color(alpha))

上表的Color混合常量通過glBlendColor()設定

設定混合常量 簡介
Void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha; 混合常量默認為(0,0,0,0)作為混合權重係數

 

OpenGL之顏色混合alpha

OpenGL之顏色混合alpha

顏色混合(alpha)可實現透明的視角效果,可以模擬液體、玻璃等.當你啟動混合OpenGL將輸入源的顏色與和在幀緩存裏的顏色混合

函式 簡介
glEnable(GL_BLEND); 啟用混合
glDisable(GL_BLEND); 禁用混合
函式 簡介
Void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); 設定顏色和透明度
red, green, blue 顏色
alpha 透明度數值範圍:0.0f-1.0f

0:全透明

1:完全不透明

函式示例

  1. glEnable(GL_BLEND);// 啟用混合
  2. glDepthMask(GL_FALSE);// 將深度環存設置為只讀
  3. glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 透明效果
  4. glColor4f(1.0f, 1.0f, 1.0f,alpha);//月球模型顏色
  5. auxSolidSphere(1.0f);// 繪畫
  6. glDepthMask(GL_TRUE);// 將深度環存設置為可讀可寫
  7. glDisable(GL_BLEND);// 禁用混合
混合函式 簡介
void glBlendFunc (GLenum sfactor, GLenum dfactor); 設定來源和目標混合係數
sfactor 輸入源數據的混合係數
dfactor 當前幀緩存的混合係數

 

混合係數 簡介
GL_ZERO 將顏色設為{0,0,0,0}
GL_ONE 不改變當前顏色(r,g,b,a)*(1,1,1,1)
GL_SRC_COLOR 目標與來源相乘dest (r,g,b,a)* sour (r,g,b,a)
GL_DST_COLOR 來源與目標相乘sour (r,g,b,a)* dest (r,g,b,a)
GL_ONE_MINUS_SRC_COLOR (r,g,b,a)*((1,1,1,1)- sour(r,g,b,a))
GL_ONE_MINUS_DST_COLOR (r,g,b,a)*((1,1,1,1)- dest(r,g,b,a))
GL_SRC_ALPHA (r,g,b,a) * sour(alpha)
GL_DST_ALPHA (r,g,b,a) * dest(alpha)
GL_ONE_MINUS_SRC_ALPHA (r,g,b,a) * (1- sour(alpha))
GL_ONE_MINUS_DST_ALPHA (r,g,b,a) * (1- dest(alpha))
GL_SRC_ALPHA_SATURATE (r,g,b,a) *MIN (sour(alpha),1-dest(alpha))

 

函式 簡介
glEnable(GL_DEPTH_TEST); 打開深度檢測(Z軸緩存), 一定要調用.保證光照正確繪製和模形前後正確繪製

Alpha演示程式示例,分別有太陽,地球和月球.下載程式

  1. 按+/-鍵增加或減小月球透明度
  2. 按SPACE(空格)鍵啟用或禁用聚光燈
  3. 按UP/DOWN鍵相機前後移動
  4. 按LEFT/RIGHT鍵相機左右旋轉
  5. 按F1鍵打開幫助
  6. 按ESC鍵重置聚光燈參數

OpenGL之鏡面反射光

OpenGL之鏡面反射光

鏡面反射產生閃耀的光輝,此光照效果很有趣,需要分別設置光源材質.

光源和材質 簡介
Light_Specular[] = {1.0f,1.0f,1.0f,1.0f};

glLightfv(light,GL_SPECULAR, Light_Specular);

鏡面反射光顏色{r,g,b,a}分量
Material_Specular[] = {1.0f,1.0f,1.0f,1.0f};

glMaterialfv(GL_FRONT,GL_SPECULAR, Material_Specular);

材質的鏡面反射光顏色,反射出去的顏色不大於材質顏色

{1.0f,1.0f,1.0f,1.0f}:光照完全反射出去,

glMaterialf (GL_FRONT,GL_SHININESS,10); 鏡面反射光聚焦度

0:不聚焦

128:高度聚焦

函式示例

  1. float Light_Specular[] = {0f,1.0f,1.0f,1.0f};// 鏡面反射光分量
  2. float Light_Position[] = {0f,0.0f,1.0f,1.0f};// 燈光位置
  3. glLightfv(light,GL_SPECULAR, Light_Specular);// 鏡面反射光分量
  4. glLightfv(light,GL_POSITION, Light_Position);// 光源位置
  5. Material_Specular[] = {0f,1.0f,1.0f,1.0f};// 鏡面反射光材質
  6. glMaterialfv(GL_FRONT,GL_SPECULAR, Material_Specular);// 鏡面反射光材質
  7. glMaterialf (GL_FRONT,GL_SHININESS,10);// 鏡面反射光聚焦度

鏡面反射光程式示例,行星發出閃耀的光輝,而衛星繞行星旋轉並且發光,分別使用聚光燈和定點光.但無使用環境光.下載程式

  1. 按(/)鍵增加或減小聚光燈焦點指數
  2. 按</>鍵增加或減小聚光燈張角
  3. 按+/-鍵增加或減小多邊形表面的鏡面反射光聚焦度
  4. 按123鍵切換衛星的顏色與光線(紅綠藍)
  5. 按SPACE(空格)鍵啟用或禁用聚光燈
  6. 按UP/DOWN鍵衛星上下移動
  7. 按LEFT/RIGHT鍵衛星左右移動
  8. 按F1鍵打開幫助
  9. 按ESC鍵重置聚光燈參數

 

OpenGL之材質

OpenGL之材質

OpengGL為多邊形設置材質屬性,根據紅綠藍RGB的分量而確定反射光顏色:如下表:

材質 光源的光顏 反射光顏色, 簡介
綠色(0,1,0) 白色(1,1,1) 綠色(0,1,0) 只反射綠光
綠色(0,1,0) 紅色(1,0,0) 黑色(0,0,0) 只反射黑光

 

材質 簡介
void glMaterialf(GLenum face, GLenum pname, GLfloat param); 為多邊形設置材質屬性用於光照計算,它是全局性的, 影響所有繪製的多邊形,直到在次調用
void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params); glMaterialf()數組版本

 

face 簡介
GL_FRONT 材質僅應用於多邊形正面
GL_BACK 多邊形反面
GL_FRONT_AND_BACK 多邊形的正反面

 

pname 數值 簡介
GL_AMBIENT {r,g,b,a} 材質的環境光顏色
GL_DIFFUSE {r,g,b,a} 材質的散射光顏色
GL_AMBIENT_AND_DIFFUSE {r,g,b,a} 同時設置材質的環境光和散射光顏色
GL_SPECULAR {r,g,b,a} 材質的鏡面反射光顏色,反射出去的顏色不大於材質顏色

{1.0f,1.0f,1.0f,1.0f}:光會完全反射出去

GL_SHININESS 0-128 鏡面反射光指數

0:不聚焦

128:高度聚焦

GL_EMISSION {r,g,b,a} 材質的反射光顏色

設置多邊形材質的環境光和散射光,函式示例:

  1. glEnable(GL_LIGHTING); // 啟用光照
  2. float white[] = {0f,1.0f,1.0f,1.0f};// 白色
  3. glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);// 設置材質

OpenGL之聚光燈

OpenGL之聚光燈

聚光燈:在定點光源的基礎加上光線輻射方向,因此光線呈圓錐.

聚光燈參數 範圍 簡介
GL_SPOT_DIRECTION (x,y,z) 聚光燈指向/方向3D矢量

默認值:(0,0,-1)

GL_SPOT_EXPONENT 0-128 焦點/指數:光線從焦點到圓錐的邊界,光的強度不斷衰減,直到邊界消失.

指數越大焦點越小

指數越小焦點越大

GL_SPOT_CUTOFF 0.1-90 圓錐面與指向軸的角度(圓錐角),所以聚光燈的張角為圓錐角的2倍.

張角=圓錐角*2

聚光燈函式使用示例

  1. float Spot_Direction[] = {0f,0.0f,-1,0.0f}; // 聚光燈的指向
  2. float Light_Ambient[] = {0f,1.0f,1.0f,1.0f};// 環境光
  3. float Light_Diffuse[] = {0f,1.0f,1.0f,1.0f};// 散射光
  4. float Light_Position[] = {0f,0.0f,1.0f,1.0f};// 光源位置
  5. glEnable(GL_LIGHTING); // 啟用光照
  6. glLightfv(light,GL_AMBIENT, Light_Ambient);// 環境光分量
  7. glLightfv(light,GL_DIFFUSE, Light_Diffuse);// 散射光分量
  8. glLightfv(light,GL_POSITION,Light_Position);// 光源位置
  9. glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 0f); // 設置聚光燈的角度
  10. glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION, Spot_Direction); // 設置聚光燈的
  11. glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 0f); // 設置聚光燈的指數
  12. glEnable(GL_LIGHT0); // 啟用燈光

聚光燈程式示例,可分別設定張角與焦點.下載

  1. 按(/)鍵增加或減小聚光燈焦點指數
  2. 按[/]鍵增加或減小聚光燈張角
  3. 按+/-鍵增加或減小聚光燈亮度
  4. 按SPACE(空格)鍵啟用或禁用聚光燈
  5. 按UP/DOWN鍵正方體繞X軸旋轉
  6. 按LEFT/RIGHT鍵正方體繞Y軸旋轉
  7. 按F1鍵打開幫助
  8. 按ESC鍵重置聚光燈參數

 

OpenGL之法線

OpenGL之法線

法線:即垂直於其表面的單位矢量

OpenGL在進行光照運算前需先計算法線,光與表面相交的角度利用法先計算出反射角度,結合光照與材質計算表面的顏色

法線函式 簡介
void glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); 設置法線

(nx,ny,nz):法線坐標分量

法線函式示例

glBegin(GL_POLYGON);

glNormal3f(0.0f,1.0f,0.0f);// 法線

glVertex3f( 0.5f, 0.5f, 0.5f);

glVertex3f( 0.5f, 0.5f,-0.5f);

glVertex3f(-0.5f, 0.5f,-0.5f);

glVertex3f(-0.5f, 0.5f, 0.5f);

glEnd();

法線的計算 簡介
A*B=(Ax*Bz-Az*By, Az*Bx-Ax*Bz, Ax*By-Ay*Bx) 矢量A和B叉積方程

計算兩個3D向量的法線(叉積)

void Cross(float pa[3], float pb[3], float pc[3],float normal[3])

{

float va[3],vb[3];//矢量1,矢量2

float length;//矢量長度

// 計算矢量1

va[0] = pa[0] – pb[0];

va[1] = pa[1] – pb[1];

va[2] = pa[2] – pb[2];

// 計算矢量2

vb[0] = pb[0] – pc[0];

vb[1] = pb[1] – pc[1];

vb[2] = pb[2] – pc[2];

// 計算叉積

normal[0] = va[1]vb[2] – va[2]vb[1];

normal[1] = va[2]vb[0] – va[0]vb[2];

normal[2] = va[0]vb[1] – va[1]vb[0];

// 計算長度

length = sqrt(normal[0]normal[0] + normal[1]normal[1] + normal[2]*normal[2]);

// 計算單位矢量

normal[0] = normal[0] / length;

normal[1] = normal[1] / length;

normal[2] = normal[2] / length;

}

法線演示程式,旋轉正方體觀看光照的變化如上圖:下載

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

 

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鍵重置模型旋轉角度