2011-12-01 103 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中工作,我不确定哪个更好。可能会为这个论坛提出一个很好的问题。 –