前 言
以前是用VC 作電腦圖形學的,大約在一年前,公司接到一個用C#+DirecX的項目,從那時起便開始學習Mangaged DirectX ,現將在開發過程中的一點總結髮表出來,和同行們共同參考,共同學習,共同進步,前面是一些基礎內容,算是入門篇吧,現在正將開發過程中所用到的一些演算法整理中,算是中級篇吧。1:在整理過程中,有些內容為從網上找的資料,部分為翻譯國外文章,正所謂“天下文章一大抄,就看會抄不會抄。”,如果侵犯了你的個人權益,可同我聯絡;2:以前的開發環境為VS.NET2003 1.1+DirectX9.0。現在開發環境為VS2005,有些程式開發環境記不清了。但應不受影響。3:有些內容為GDI+所做,所有的範例都儲存有原始碼,但受限於網路情況,有些沒有傳上去,有需要的可以聯絡;4:由於才學疏淺,個人水平有限,希望大蝦們批評指正;5:連絡方式:mail:tongabcd@yeah.net QQ:50759188 (加我時註明Managed DirectX)
第一章 向量 在這一部分中將介紹一些基本的數學知識,主要討論的內容是向量、矩陣和變換,另外還有一些關於空間點、線、面、體的相關知識,如果你已經掌握了《線性代數》和《空間解析幾何》這兩門課程,讀起來會很輕鬆,如果以前沒接觸過它們,也沒有關係,只不過會感到有點吃力;在這裡會結合D3DX類中相關的數學模型和有關函數結合程式介紹它們;在本部分中主要介紹四個方面的內容:(1)、向量的概念及三維概念;(2)、矩陣的概念及在DirectX10中的應用;(3)、如何在DirectX10產生線和面;(4)、三維數學運算公式及相關類。比如向量的點積、向量的叉積等;
1:向量 在三維歐氏空間直角座標系中,用有向線段表示向量,我們知道,空間中兩點決定一條直線段,如果把這兩點的方向也包解在內,就成為有向線段,就是向量,可以看出,向量的兩個屬性是它的長度和頂點所指的方向。這樣,就可以使用向量來類比既有大小又有方向的物理模型;比如:在三維遊戲中經常要出現粒子系統,可以使用向量來類比粒子的速度和加速度;再比如:直線燈光不僅有燈光的位置,還有光線的方向,攝像機也有位置及視角。因此,向量為在三維空間中表示方向提供了方便;顯示的都是空間向量;(圖一) 向量有大小有方向,但是和位置無關,長度和方向都相同但起始點位置不同的兩個向量是相等的。現在看上面的圖中,向量u和v是相等的。
2:座標系 三維空間中,當固定了X軸方向和Y軸方向之後,Z軸方向可以朝裡,也可以朝外,稱為左手座標系和右手座標系;
3:向量的表示 因為向量與位置無關,因此可以通過平移使向量的起點和座標系的原點重合。因此,一個向量的標準位置可以只用一個點來描述就可以了,比如說向量v(1,2,3),就是指起點為(0,0,0),終點為v(1,2,3)的有向線段; 通常,使用一個字母來表示一個向量,大小寫無關,另外,有時,只需要使用X,Y座標而不使用Z座標,比如對一個二維遊戲來說,Z值有時是多餘的,但有時對一個點來說,除了用X、Y、Z來表示它的位置之外,還需要一個數值來表示它的顏色、變換等資訊。因此,在DirectX中,有二維、三維、四維向量。如2、3和4維向量分別是:u = (ux, uy), N = (Nx, Ny, Nz), c = (cx, cy, cz, cw)。
4:單位向量 只有1個單位長度的向量叫做單位向量。如果它們的方向恰好又在座標軸上,稱為單位基向量;它們被叫做i, j和k向量,分別沿著座標系的x軸,y軸和z軸,並且有1的單位長:i = (1, 0, 0), j = (0, 1, 0), and k = (0, 0, 1)。 在DirectX中,定義一個二維、三維、四維向量的類在Microsoft.DirectX命名空間中,分別為Vector2、Vector3、Vector4
5:樣本 下面代碼定義一個二維向量,並繪出一條直線,在這裡唯寫出相關代碼,完整代碼見源檔案;private void Render() { Vector2[] vecs = new Vector2[2]; vecs[0]=new Vector2(300,300); device.Clear(ClearFlags.Target, System.Drawing.Color.White , 1.0f, 0); device.BeginScene(); using (Line l = new Line(device)) { l.Draw(vecs, Color.Red ); } device.EndScene(); device.Present(); }執行結果如下:轉自:dandancool http://blog.csdn.net/dandanCool/archive/2007/06/26/1666597.aspx