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

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

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


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

2673.35 果凍幣

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

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

此書範例程式MtrlAlpha有個bug
在Display函式中
原程式碼為:
代碼:
      // increase/decrease alpha via keyboard input
      if( ::GetAsyncKeyState('A') & 0x8000f )
         TeapotMtrl.Diffuse.a += 0.01f;
      if( ::GetAsyncKeyState('S') & 0x8000f )
         TeapotMtrl.Diffuse.a -= 0.01f;

這樣是不行的
我是不知道當初作者測試時用的電腦有多爛
但我用我家的爛電腦都會造成更新過快使得茶壺瞬隱瞬現的狀況
沒有那種混合透明的過程
所以code應該要改成跟timeDelta有關係才行
代碼:
      // increase/decrease alpha via keyboard input
      if( ::GetAsyncKeyState('A') & 0x8000f )
         TeapotMtrl.Diffuse.a += 1.0f * timeDelta;
      if( ::GetAsyncKeyState('S') & 0x8000f )
         TeapotMtrl.Diffuse.a -= 1.0f * timeDelta;

像這樣才能使此範例不管在多快或多慢的電腦上執行都維持一定的混合速度
也才能夠觀察
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

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


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