第07課 OpenGL 光照和鍵盤(2)

2022-09-02 16:48:14 字數 2146 閱讀 4735

下一段**繪製貼圖立方體。我只對新增的**進行註解。如果您對沒有註解的**有疑問,回頭看看第六課。

int drawglscene(glvoid)                                //

從這裡開始進行所有的繪製

現在轉入winmain()主函式。我們將在這裡增加開關光源、旋轉木箱、切換過濾方式以及將木箱移近移遠的控制**。在接近winmain()函式結束的地方你會看到swapbuffers(hdc)這行**。然後就在這一行後面新增如下的**。

**將檢查l鍵是否按下過。如果l鍵已按下,但lp的值不是false的話,意味著l鍵還沒有鬆開,這時什麼都不會發生。

swapbuffers(hdc);                //

交換快取

if (keys['

l'] && !lp) //

l 鍵已按下並且鬆開了?

else

//否則

}

下面的**檢視是否鬆開了"l"鍵。如果鬆開,變數lp將設為false。這意味著"l"鍵沒有按下。如果不作此檢查,光源第一次開啟之後,就無法再關掉了。計算機會以為"l"鍵一直按著呢。

if (!keys['

l']) //

l鍵鬆開了麼?

然後對"f"鍵作相似的檢查。如果有按下"f"鍵並且"f"鍵沒有處於按著的狀態或者它就從沒有按下過,將變數fp設為true。這意味著這個鍵正被按著呢。接著將filter變數加一。如果filter變數大於2(因為這裡我們的使用的陣列是texture[3],大於2的紋理不存在),我們重置filter變數為0。

if (keys['

f'] && !fp) //

f鍵按下了麼?

}if (!keys['

f']) //

f鍵放開了麼?

這四行檢查是否按下了pageup鍵。若是的話,減少z變數的值。這樣drawglscene函式中包含的gltranslatef(0.0f,0.0f,z)呼叫將使木箱離觀察者更遠一點。

if (keys[vk_prior])                //

pageup按下了?

接著四行檢查pagedown鍵是否按下,若是的話,增加z變數的值。這樣drawglscene函式中包含的gltranslatef(0.0f,0.0f,z)呼叫將使木箱向著觀察者移近一點。

if (keys[vk_next])                //

pagedown按下了麼

現在檢查方向鍵。按下左右方向鍵xspeed相應減少或增加。按下上下方向鍵yspeed相應減少或增加。記住在以後的教程中如果xspeed、yspeed的值增加的話,立方體就轉的更快。如果一直按著某個方向鍵,立方體會在那個方向上轉的越快。

if (keys[vk_up])                //

up方向鍵按下了麼?

if (keys[vk_down]) //

down方向鍵按下了麼?

if (keys[vk_right]) //

right方向鍵按下了麼?

if (keys[vk_left]) //

left方向鍵按下了麼?

像前幾課一樣,我們最後還需要更正窗體的標題。

if (keys[vk_f1])                //

f1按下了麼?}}

}}

//關閉

killglwindow();

//銷毀視窗

return (msg.wparam); //

退出程式

}

這一課完了之後,您應該學會建立和使用這三種不同的紋理對映過濾方式。並使用鍵盤和場景中的物件互動。最後,您應該學會在場景中應用簡單的光源,使得場景看起來更逼真。

第七課 光照和鍵盤

這一課我會教您如何使用三種不同的紋理濾波方式。教您如何使用鍵盤來移動場景中的物件,還會教您在opengl場景中應用簡單的光照。這一課包含了很多內容,如果您對前面的課程有疑問的話,先回頭複習一下。進入後面的 之前,很好的理解基礎知識十分重要。我們要在第一課的 上進行改動就可以了。我們將要增加乙個loa...

NeHe OpenGL第七課 光照和鍵盤

nehe opengl第七課 光照和鍵盤 光照和鍵盤控制 在這一課裡,我們將新增光照和鍵盤控制,它讓程式看起來更美觀。這一課我會教您如何使用三種不同的紋理濾波方式。教您如何使用鍵盤來移動場景中的物件,還會教您在opengl場景中應用簡單的光照。這一課包含了很多內容,如果您對前面的課程有疑問的話,先回...

OpenGL 光照和材質

opengl 光照和材質 前言 很難受呀,一天又過去了,沒有達到預期的進度,等下寫完這篇部落格,抓緊研究滑鼠實現軌跡球!長路漫漫啊 注 此篇文章建立在mfc環境搭建完成後 1.渲染處理 在opengl中,可以定義頂點的顏色,但如何定義線段的顏色,如何定義平面的顏色,這就需要opengl通過各個頂點的...