?

???????????????????????????????????
線框模式
????????????????????????????????????
實體模式主要是通過.BMP格式的256色高程圖來表示地形的高度,高程圖將高度信息傳給地圖生成函數,該函數計算紋理坐標,然后加載紋理圖來渲染地形。
今天起來打開電腦,莫名發現系統不能正常使用了,也懶得去搞清楚是什么原因引起的,花了10分鐘直接ghost還原了。
本來想畫張3D渲染流程圖的,但不知道為什么,word2003和visio2003老崩潰,估計是我安裝的windows主題導致的,這個主題還導致聲卡驅動的丟失.
基本上是這么一個流水線:
物體的局部坐標 -->?世界坐標?-->?物體剔除 --> 插入到渲染列表 --> 背面消除 -->?相機變換 -->?3D物體空間裁剪 --> 光照模塊 --> 透視變換 --> 圖象空間裁剪 --> 光柵化

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


愛在左,同情在右,走在生命的兩旁,隨時撒種,隨時開花,將這一徑長途,點綴的香花彌漫,使穿枝拂葉的行人,踏著荊棘,不覺得痛苦,有淚可落,卻不是悲涼.
很簡單,就是在WinProc函數里增加一個WM_ACTIVATE消息處理,然后調用ClipCursor來限制鼠標的可移動范圍.
好像WIN32沒有直接將RECT從client坐標轉換成screen坐標的,所以我自己寫了這么個函數.
當然這里給出的代碼并不是高效的,GetSystemMetrics不應該在WinProc里調用,但這里只是給出了一種解決方案,暫不考慮代碼執行效率的問題.
//-------------------------------------------------------------------------
// 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? -??開/關線框模式
I? -??開/關點光源
A? -? 開/關環境光源
按ESC鍵退出,不過還有一個小問題沒解決,就是當鼠標移到游戲窗口之外時,將激活別的窗口.

