DirectX 11遊戲編程學習筆記之4: 第3章Transformations(變換)

        本文由哈利_蜘蛛俠原創,轉載請註明出處!有問題歡迎聯繫[email protected]

 

        注:我給的電子版是700多頁,而實體書是800多頁,所以我在提到相關概念的時候,會使用章節號而非頁碼。同樣的情況適合於“龍書”第二版。

 

        上一期的地址:

 DX 11遊戲編程學習筆記之3

 

重點回顧:

===============================================================================

        這一章還是比較重要的。當然,前兩章也很重要;但是一方面前兩章的內容比較簡單,另一方面有些比較難的部分其實並不需要掌握,只需要大概知道就行了,所以其實它們跟這一章比起來顯得不那麼重要了。這一章的內容還是需要去仔細理解的;當然具體的公式你沒有必要全部記住。

        還是把這一章的學習目標放上來吧!

1、 To understand how linear and affine transformations can be represented by matrices.(理解爲何線性變換和仿射變換可以由矩陣表示。)

2、 To learn the coordinate transformations for scaling, rotating, and translating geometry.(學會用來對幾何體進行縮放、旋轉和平移的座標變換。)

3、 To discover how several transformation matrices can be combined into one net transformation matrix through matrix-matrix multiplication.(知道爲何幾個變換矩陣可以通過矩陣之間的乘積來結合成一個矩陣。)

4、 To find out how we can convert coordinates from one coordinate system to another, and how this change of coordinate transformation can be represented by amatrix.(發現如何將座標從一個座標系變到另一個座標系,以及這個座標變換矩陣如何由矩陣表示。)

5、 To become familiar with the subset of functions provided by the XNA Math library used for constructing transformation matrices.熟悉XNA Math庫所提供的關於構造變換矩陣的那部分函數。

 

        這一章的內容和“龍書”第二版的第3章還是比較對應的,不過沒有提到射線和平面的內容。相比龍書來說,這一章沒有特別需要注意的內容,我就將重點以一個簡單的列表形式列在下面了:

1、  第3.2.1節Homogeneous Coordinates(齊次座標)這一小節提出了齊次座標的概念。這一概念很重要,是後面我們進一步學習3D圖形學的基礎。

2、  第3.5節Transformation Matrix versus Change of Coordinate Matrix(變換矩陣與座標變換矩陣)說明 “active” transformations和change of coordinate transformations是可以等同視之的。之所以這樣可能有點違反我們的直覺,並且可能和我們所接收到的數學教育不一樣;這裏我給一下我的個人理解。以前我覺得座標變換和對物體本身的變換是不一樣的,因爲座標變換會改變整個空間中所有物體的座標,而物體本身的變換隻改變物體自身的座標;但是在3D遊戲編程中,物體是“離散”的,空間中並沒有充斥着“緻密的點”(打個比方:現實世界中,空氣中充滿了塵埃,所以在黑暗環境中打開手電筒可以看見一道光束;但是在3D遊戲世界中,我們並不能夠很輕易地看到光柱,只能通過一些技巧來達到光束的效果。在3D遊戲世界中,燈光是通過與實在的物體——比如說一個遊戲角色——相互作用所表現出來的,我們並不能看到“光”本身),整個3D世界是由有限個物體(每個物體由有限個頂點組成)組成的,我們一般要爲每個物體指定一個世界矩陣(世界矩陣以後會講到),而世界矩陣本質上是座標變換,但是在3D遊戲中實際上等同於物體的“active” transformations。

3、  第3.6節XNA MathTransformation Functions(XNA Math 變換函數)列出了與變換相關的XNA函數以供參考。書上沒有給出具體的例子,不過後面的習題會讓你有機會使用的。

 

===============================================================================

 

勘誤:

===============================================================================

1、  在第3.1.4節的例3.3前的式子中,三個旋轉矩陣都以4x4維的形式表示了。儘管是正確的,但是這個現在出現得不合時宜,讀者此時可以將這三個矩陣的第4行和第4列去掉,只保留前3行和前3列。

2、  第3.2.4節的公式(eq. 3.7):


中,中間的列向量形式的矩陣應該是4x4維的,所以其實應該補充第4列——[0, 0, 0, 1]的轉置。

3、  第3.2.4節的圖3.8右邊有一個向量的箭頭畫反了,應該是這樣的(來自於書本附帶的DVD中的高清彩圖):


4、  習題部分第19題最後一句話的conjecturer 寫錯了,應該是conjecture。

===============================================================================

 

習題解答:

===============================================================================

        與上一章一樣,這一章的習題大部分是數學題(這種情況後面比較少,但是並沒有絕跡)。


1-17題:

        太簡單了,從略。

 

18-19題:

        第18題提出了一個質心(barycenter)的概念,使得點也能夠像向量一樣進行加法運算(當然係數是限制的,否則就不能滿足“運算結果仍然是點”的要求了)。第19題是第18題的承接。

 

20題:

        這道題讓我們證明線性映射的一個比較好的性質:它保持線性組合。這道題很簡單,使用定義,然後用數學歸納法證明就行了。

 

21-24題:

        很簡單,從略。

 

25題:

        提出了判斷一個(應該限制在2、3和4維的方)矩陣是旋轉矩陣的充要條件,然後讓我們用這個充要條件去證明一些簡單的結論。這一題可能要用到第2章的習題14中給出的一個結論。

 

26題:

        讓我們繼續證明關於旋轉矩陣的一些性質。也不難。

 

27題:

        這道題可能有點難度。其實竅門就是按照縮放-旋轉-平移的順序構造變換矩陣就行了。這種方法在我們以後的遊戲編程例子中會經常見到的。

 

28題:

        讓我們找到一種對長方形進行“原地縮放”的方法。也很簡單。

 

===============================================================================

 

        PS:可能大家會發現這幾章的習題部分講得太簡略了。不過請放心,後面的那些要求寫代碼的習題我都是不會放過的,哈哈!

        好啦,這一期就到這裏了,咱們下期再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章