?

???????????????????????????????????
線框模式
????????????????????????????????????
實(shí)體模式主要是通過.BMP格式的256色高程圖來表示地形的高度,高程圖將高度信息傳給地圖生成函數(shù),該函數(shù)計(jì)算紋理坐標(biāo),然后加載紋理圖來渲染地形。
一日一日生命積累,一時(shí)一刻我們歡喜悲哀。
所有認(rèn)真受苦的眼淚,將匯集成為,另一片汪洋。
來自伊能靜的《生生世世》,一段感人的心靈獨(dú)白。
今天起來打開電腦,莫名發(fā)現(xiàn)系統(tǒng)不能正常使用了,也懶得去搞清楚是什么原因引起的,花了10分鐘直接ghost還原了。
本來想畫張3D渲染流程圖的,但不知道為什么,word2003和visio2003老崩潰,估計(jì)是我安裝的windows主題導(dǎo)致的,這個(gè)主題還導(dǎo)致聲卡驅(qū)動(dòng)的丟失.
基本上是這么一個(gè)流水線:
物體的局部坐標(biāo) -->?世界坐標(biāo)?-->?物體剔除 --> 插入到渲染列表 --> 背面消除 -->?相機(jī)變換 -->?3D物體空間裁剪 --> 光照模塊 --> 透視變換 --> 圖象空間裁剪 --> 光柵化

書店本身不大,但書的選擇都是很嚴(yán)格的,大多都是好書,而且氛圍很好。
有時(shí)候自己并不喜歡太大的書店,逛以來很累,而小一點(diǎn)卻有一些情調(diào)的書店卻讓人感覺愜意從而產(chǎn)生購買的欲望。


愛在左,同情在右,走在生命的兩旁,隨時(shí)撒種,隨時(shí)開花,將這一徑長(zhǎng)途,點(diǎn)綴的香花彌漫,使穿枝拂葉的行人,踏著荊棘,不覺得痛苦,有淚可落,卻不是悲涼.
很簡(jiǎn)單,就是在WinProc函數(shù)里增加一個(gè)WM_ACTIVATE消息處理,然后調(diào)用ClipCursor來限制鼠標(biāo)的可移動(dòng)范圍.
好像WIN32沒有直接將RECT從client坐標(biāo)轉(zhuǎn)換成screen坐標(biāo)的,所以我自己寫了這么個(gè)函數(shù).
當(dāng)然這里給出的代碼并不是高效的,GetSystemMetrics不應(yīng)該在WinProc里調(diào)用,但這里只是給出了一種解決方案,暫不考慮代碼執(zhí)行效率的問題.
//-------------------------------------------------------------------------
// Translates rect from client coordinate to screen coordinate.
//-------------------------------------------------------------------------
void RectFromClientToScreen(LPRECT rect)
{
????POINT tmp;
?
????tmp.x = rect->left;
????tmp.y = rect->top;
????ClientToScreen(g_mainWindowHandle, &tmp);
????rect->left = tmp.x;
????rect->top? = tmp.y;
????tmp.x = rect->right;
????tmp.y = rect->bottom;
????ClientToScreen(g_mainWindowHandle, &tmp);
????rect->right? = tmp.x;
????rect->bottom = tmp.y;
}
//-------------------------------------------------------------------------
// Main windows event procedure.
//-------------------------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
??? PAINTSTRUCT ps;???? // used in WM_APINT
??? HDC hdc;??????????? // handle to a device context
????int screenWidth? = GetSystemMetrics(SM_CXSCREEN);
????int screenHeight = GetSystemMetrics(SM_CYSCREEN);
?
????RECT screenRect = {0, 0, screenWidth, screenHeight};
????RECT clientRect;?
?
????// what is the message
????switch (msg)
????{
????case WM_CREATE:
????????// do initialization stuff here
????????return 0;
????case WM_PAINT:
????????// start painting
????????hdc = BeginPaint(hwnd, &ps);
????????// end painting
????????EndPaint(hwnd, &ps);
????????return 0;
????case WM_ACTIVATE:
???????if(LOWORD(wParam) == WA_ACTIVE)
???????{
??????????GetClientRect(g_mainWindowHandle, &clientRect);???
??????????RectFromClientToScreen(&clientRect);???
??????????ClipCursor(&clientRect);
???????}
??? else if(LOWORD(wParam) == WA_INACTIVE)
?????? ClipCursor(&screenRect);
???????break;
????case WM_DESTROY:
??????? // kill the application
??????? PostQuitMessage(0);
??????? return 0;
??? }
??? // process any messages that we did not take care of
??? return DefWindowProc(hwnd, msg, wParam, lParam);
}
增加了彩色光源和紋理映射,支持背景切換(按N).
按鍵說明:
W? -??開/關(guān)線框模式
I? -??開/關(guān)點(diǎn)光源
A? -? 開/關(guān)環(huán)境光源
按ESC鍵退出,不過還有一個(gè)小問題沒解決,就是當(dāng)鼠標(biāo)移到游戲窗口之外時(shí),將激活別的窗口.

