2011-12-01 104 views
0

我一直在試圖圍繞我的線性和矢量Algerbra知識如何適應計算機圖形學。格外的語言C#矢量和矩陣如何處理計算機圖形,如矩陣旋轉?

我說的知識是: 點 向量 矩陣 矩陣multiplaction - 旋轉,歪斜等。

繼承人我的目標:創建一個簡單的框,應用旋轉,翻譯,並通過矩陣乘法歪曲。之後,開始弄亂相機。我希望自己做這件事,只使用實際在數據中獲取並繪製的函數。我希望在中間創建所有邏輯的東西。

繼承人什麼我已經走到這一步: 我定製的Vector3類,它擁有 -an X,Y和Z值(花車) -Several靜態矩陣(2×2 2d的浮標陣?)持有ZERO和翻譯矩陣(對於2x2和3x3) -Methods 1.旋轉(float inAngle) - 創建旋轉矩陣並將xyz乘以它。 2.翻譯(inx,iny,inz) - 將ins添加到成員變量中 3. etc ...

完成後,我將該矢量轉換回C#Vector3類並將其傳遞給繪圖類,如繪製線的DrawPrimitiveShapes。

Box類是這樣的: 4的Vector3的,UpperLeftX,UpperRightX,LowerLeftX,LowerRightX

採用4點然後渲染線,每一個

我的困惑平局類來自於本:

如何旋轉此盒?我是否在正確的軌道上使用了4個vector3's的盒子? 我只是旋轉所有四個vector3的角度,並完成它?如果紋理數據在中間,紋理如何旋轉?

+0

我對線性代數並不完全熟悉,無論你想要做什麼,但聽起來你的操作水平比XNA要低得多(我假設你使用XNA是因爲你將它標記爲這樣?)。 XNA有一個預先構建的Matrix類,它有大量有用的靜態方法來創建矩陣來轉換您的對象,無論您滿意。您可以使用Vector3.Transform根據您構建的矩陣移動頂點。有很多關於使用矩陣進行3d對象操作的教程。對不起,如果我誤解你打算在這裏做什麼。 –

+0

感謝您的評論A型。你似乎得到了我想要做的事情。任何想法我可以用什麼更好的語言輕鬆地將矢量和線條畫到屏幕上?我希望能夠保持2D,但我注意到大多數人甚至使用Vector3的二維用途,將z值保留爲0. – MintyAnt

+0

XNA當然真的很喜歡繪製簡單的矢量和線條。它適合繪製完整的模型網格。我已經看到了我的教授的物理演示,該演示使用Python在座標平面中繪製了一些矢量繪圖。看看是否可以幫助你:http://msdn.microsoft.com/en-us/library/bb196414%28v=xnagamestudio.10%29.aspx –

回答

0

我學習的方法是使用Xna方法中構建的高層,並使用'Reflector'來查看這些方法的內部,以瞭解它們的工作方式。

要旋轉盒子,需要將四個頂點中的每一個從它們所在的位置變換爲:圍繞特定軸的多個度數。

在Xna 2d中,軸始終是Z軸,並且該軸始終是貫穿世界原點,即xna中屏幕的左上角。

所以轉動你的四點矩形的頂點在XNA,你會做這樣的事情:

foreach(Vector2 vert in vertices) 
{ 
    vert = Vector2.Transform(vert, Matrix.CreateRotationZ(someRadians)); 
} 

這得到了頂點旋轉(軌道)屏幕的左上角。

爲了使盒子旋轉到位,您需要先將盒子移動到屏幕的左上角,稍微旋轉一下,然後再將其移回。所有這一切發生在一個單一的框架,所有用戶看到的是旋轉矩形。有很多方法可以做到這一點的代碼,但這裏是我最喜歡的:

// assumes you know the center of the rectangle's x & y as a Vector2 'center'  
foreach(Vector2 vert in vertices) 
    { 
     vert = Vector2.Transform(vert - center, Matrix.CreateRotationZ(someRadians)) + center; 
    } 

現在,如果你要體現「Matrix.CreateRotationZ」的方法,或「Vector2.Transform」的方法,你會看到線代碼MS用於完成這項工作。通過完成它們,你可以更有效地學習數學,而不需要太多的試驗和錯誤。

+0

非常感謝Steve的深入回覆。我想我只是想了解如何去解決這個問題。我最後一個問題:你用什麼類/方法來圖形顯示框? (Spritebatch?DrawPrimitiveLines?) – MintyAnt

+0

我很難在2D中工作,我不確定哪個更好。可能會爲這個論壇提出一個很好的問題。 –