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

Google
3D遊戲程式設計入門第15章心得[未解之疑問篇]

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


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

2673.35 果凍幣

發表發表於: 2010-2-25, PM 9:18 星期四    文章主題: 3D遊戲程式設計入門第15章心得[未解之疑問篇] 引言回覆

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


這一章又有看不懂的地方~"~
總之,先來說一下心得吧
Display函式中必須在
代碼:
static float angle = 0.0f;

下面加個
代碼:
static bool  add   = true;

然後把
代碼:
if( r >= 8.0f )
   v = -v; // reverse direction

if( r <= 0.0f )
   v = -v; // reverse direction

改成
代碼:
if( r >= 8.0f && add )
{
   v = -v; // reverse direction
   add = false;
}

if( r <= 0.0f && !add )
{
   v = -v; // reverse direction
   add = true;
}

為什麼呢?
因為不知為何,只要點中了茶壺,在
代碼:
::MessageBox(0, "Hit!", "HIT", 0);

呼叫出訊息視窗後,主視窗就不會再更新了
是因為卡住嗎?還是因為Device暫時遺失?或者其他原因?
我不清楚,總之,主視窗不會再更新
而當你等個30秒後才把訊息視窗點掉
使主視窗再次更新時
茶壺距離中心點的差距就會因為
代碼:
r += v * timeDelta;

上式中timeDelta的大增而直接爆出視窗外
爆出視窗外頂多點不到,重點是它還大於了8.0f這個界線
讓我們再看一次原本的算式:
代碼:
if( r >= 8.0f )
   v = -v; // reverse direction

我們可以看出來,當r >= 8.0f時,v就會反向
此時我們的r已經遠大於8.0f
而在正常情況下,一個frame中timeDelta的量不可能使r直接減回到小於8.0f的程度
因此,v就會再次反向,你就會發現r變成了減一次、加一次、減一次、加一次……
永遠也不會縮回來中心點了
這顯然是錯誤的
於是我們需要加個bool變數,來判斷目前v到底該是正數還是負數
也就是像上面所述那樣改善了

接著就要來說疑問了…
疑問一:
就是上面說過的,為什麼「呼叫出訊息視窗後,主視窗就不會再更新」?
是因為卡住嗎?還是因為Device暫時遺失?或者其他原因?
還請知道的大大幫忙解答一下

疑問二:
CalcPickingRay函式中,求得px、py的式子:
代碼:
px = ((( 2.0f*x) / vp.Width)  - 1.0f) / proj(0, 0);
py = (((-2.0f*y) / vp.Height) + 1.0f) / proj(1, 1);

為什麼要分別除以proj(0, 0)及proj(1, 1)呢?
或者說,為什麼只需要這樣做就可以從投影平面轉回到視覺空間?
書上是說「因為投射矩陣會縮放投射視窗上的點以便模擬不同的觀察區域」
但是難道投射矩陣就不會把點給平移或旋轉之類的嗎?
為什麼只要分別除以proj(0, 0)及proj(1, 1)就可以逆推回視覺空間?

疑問三:
承上,書上說這兩個式子是因為視埠轉化矩陣中的X及Y通常是0的關係
所以才可以簡化為這樣的式子
但是,為什麼視埠轉化矩陣中的X及Y通常為0?
又是什麼狀況下會不為0?
不為0時又該怎麼計算呢?

共三點疑問,謝謝。
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

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


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