我一直试图围绕我的线性和矢量Algerbra知识如何适应计算机图形。特别是用C#语言
我的意思是: 点 矢量 矩阵 矩阵多平面 - 旋转,倾斜等。
继承我的目标:创建一个简单的框,并通过矩阵乘法对其应用旋转,平移和倾斜。然后,开始搞乱相机。我希望自己这样做,只使用实际接收数据的函数并绘制它。我希望在中间创建所有逻辑内容。
到目前为止我得到了什么: 我自定义的Vector3类,它拥有 -an X,Y和Z变量(浮点数) - 几个静态矩阵(如2x2 2d浮点数组?),包含ZERO和TRANSLATION矩阵(2x2和3x3) -方法 1.旋转(float inAngle) - 创建旋转矩阵并将xyz乘以它。 2.翻译(inx,iny,inz) - 将ins添加到成员变量中 等等......
完成后,我将向量转换回C#Vector3类并将其传递给绘图类,例如绘制线条的DrawPrimitiveShapes。
盒子类是这样的: 4 Vector3,UpperLeftX,UpperRightX,LowerLeftX,LowerRightX
一个Draw类,它使用4个点然后为每个点渲染线
我的困惑在于此:
如何旋转此框?通过使用4个vector3的盒子,我是在正确的轨道上吗? 我只是按角度旋转所有四个vector3并完成它吗?如果纹理在中间得到所有纹理数据,纹理如何旋转?
答案 0 :(得分: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”方法,您会看到用于实现该工作的代码行。通过完成它们,您可以更有效地学习背后的数学,而不需要那么多的反复试验。