電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
3D遊戲程式設計入門第5章心得

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2010-1-23, PM 9:46 星期六    文章主題: 3D遊戲程式設計入門第5章心得 引言回覆

前言:此乃補丁文。只講解心得,不提供完整教學,有興趣的人請自行購買此書。
代碼:
書名:3D遊戲程式設計入門-使用DirectX 9.0實作
作者:Frank D. Luna
譯者:黃聖峰
出版社:博碩文化

光線
先說光線有三個成分:
Ambient -- 環境光。會使場中的物體都帶上這個光的顏色,即使不是被照射到的一面也會帶有這顏色。
Diffuse -- 擴散光。物體被照射到時會呈現的顏色。
Specular -- 反射光。物體被照射到時,於反射角可觀察到的顏色。基本上跟上面那個差不多,不過有角度的考量在裡面。

以上光線必須跟質料做搭配才是最後顯示的顏色。
比如說,你質料Ambient是紅的,但光線Ambient是藍的,那麼物體一樣顯示不了藍色光,所以就會變黑色的,看不見。
承上,如果質料Diffuse是紅的,光線Diffuse也是紅的,那麼雖然沒被照射到的地方會是黑的,但被照射到的面就會是紅色的。
總之,想讓物體顯示怎樣的顏色,除了要有那種顏色的光線外,也要有那種顏色的質料。

質料另外還有個Emissive成份,這個成份不管有沒有打光都會產生該顏色,有點像是自發光,不過並不會照出去到其他物體上面。

視窗與dx的互動設定
再來說一下視窗與dx的設定
基本上要做個dx的應用程式我們必須先用CreateWindow建立視窗
然後用CreateDevice去建立dx的device跟視窗做聯結
視窗的大小由下面這個函式中的width跟height來決定
代碼:
   hwnd = ::CreateWindow("Direct3D9App", "Direct3D9App",
      WS_EX_TOPMOST,
      0, 0, width, height,
      0 /*parent hwnd*/, 0 /* menu */, hInstance, 0 /*extra*/);

dx的緩衝區大小則是由D3DPRESENT_PARAMETERS結構的兩個屬性來決定:
代碼:
   d3dpp.BackBufferWidth            = width;
   d3dpp.BackBufferHeight           = height;

不過呢,視窗大小跟緩衝區大小實際上是可以設成不一樣的
事實上,在這個範例中,它的大小也是有點差距的
CreateWindow裡的寬高是有考慮到標題列跟邊框的
而d3dpp裡的寬高則純粹是對應到client顯示區域
因此實際上它是有點被內縮了
不過不要緊,因為dx有自動縮放的功能
即使你視窗大小設( 100, 100 )而dx緩衝區設( 800, 800 )都是ok的
dx會自動縮小fit那個視窗client區域的大小,當然,精緻度會因縮小而提高
反過來如果是放大,那精緻度就會因而降低

另外,dx與視窗聯結的地方有兩個
第一是
代碼:
d3dpp.hDeviceWindow              = hwnd;

第二是
代碼:
   hr = d3d9->CreateDevice(
      D3DADAPTER_DEFAULT, // primary adapter
      deviceType,         // device type
      hwnd,               // window associated with device
      vp,                 // vertex processing
       &d3dpp,             // present parameters
       device);            // return created device

上面兩個的hwnd就是視窗的handle
基本上,我在我的電腦上測試時,兩者去其一沒有問題
可以把任一個設成0
當然兩個都設0的話鬼才知道dx要跟哪個視窗聯結
不過嘛,這只是我簡單測試沒問題,不確定其一設0在任何情況下都ok
所以大家還是乖乖把兩個都設成同樣的hwnd吧
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作