【发布时间】:2011-12-03 20:46:58
【问题描述】:
我一直在努力思考我的线性和向量代数知识如何与计算机图形学相适应。尤其是 C# 语言
我的意思是: 积分 矢量图 矩阵 矩阵乘法 - 旋转、倾斜等。
这是我的目标:创建一个简单的框,并通过矩阵乘法对其应用旋转、平移和倾斜。之后,开始摆弄相机。我希望自己做这一切,只使用实际接收数据并绘制数据的函数。我希望在两者之间创建所有合乎逻辑的东西。
这是我到目前为止所得到的: 我的自定义 Vector3 类,其中包含 - 一个 X、Y 和 Z 变量(浮点数) - 几个静态矩阵(作为 2x2 2d 浮点数组?)包含零和平移矩阵(用于 2x2 和 3x3) -方法 1. Rotate(float inAngle) - 创建一个旋转矩阵并将 xyz 乘以它。 2. Translate(inx,iny,inz) - 将ins添加到成员变量中 3.等等……
完成后,我将向量转换回 C# Vector3 类并将其传递给绘图类,例如绘制线条的 DrawPrimitiveShapes。
盒子类是这样的: 4个Vector3,UpperLeftX,UpperRightX,LowerLeftX,LowerRightX
一个 Draw 类,它使用 4 个点然后为每个点渲染线条
我的困惑在于:
如何旋转这个盒子?通过使用 4 个 vector3 的盒子,我是否走在正确的轨道上? 我只是将所有四个vector3旋转一个角度并完成它吗?如果中间有所有这些纹理数据,纹理如何旋转?
【问题讨论】:
-
我并不完全熟悉线性代数和你想要做的任何事情,但听起来你的操作水平比 XNA 要求的要低得多(我假设你正在使用 XNA因为你这样标记它?)。 XNA 有一个预先构建的 Matrix 类,其中包含大量有用的静态方法来创建一个矩阵来随心所欲地转换您的对象。您可以使用 Vector3.Transform 根据您构建的矩阵移动您的顶点。有很多关于使用矩阵进行 3d 对象操作的教程。对不起,如果我误解了你打算在这里做什么。
-
感谢 A 型的评论。你似乎明白我正在努力做的事情。知道我可以使用哪种更好的语言来轻松地将矢量和线条绘制到屏幕上吗?我希望保持 2D,但我注意到大多数人使用 Vector3 甚至用于 2D,将 z 值保留为 0。
-
XNA 在绘制简单的矢量和线条方面确实有点糟糕,老实说。它适用于绘制完整的模型网格。我看过我的教授的物理演示,其中使用 Python 在坐标平面上绘制了一些矢量图。看看这是否对你有帮助:msdn.microsoft.com/en-us/library/…
-
再次感谢。我一直在了解这些知识和史蒂夫的帖子。我目前创建了我自己的 Vector3 类(这有点傻,因为它只是在完成翻译后转换回 Vector3)和一个 Cube 类,它根据位置、长度、宽度和高度创建 8 个顶点。我使用基本效果将 36 个 VertexPositionNormalTexture 放入数组中,然后绘制它。这是真正的hacky,但它现在有效并且正在完成工作。如果我可以在某处发布代码以帮助其他人,我会的。
标签: c# xna drawing shape vector-graphics