)Managed DirectX +C# 開發(入門篇)(一)

來源:互聯網
上載者:User

前      言

       以前是用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、Vector45:樣本       下面代碼定義一個二維向量,並繪出一條直線,在這裡唯寫出相關代碼,完整代碼見源檔案;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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.