xna在固定屏幕坐标上显示3d对象为2d

时间:2012-06-03 08:25:05

标签: c# 3d xna screen 2d

helllo,我正在尝试创建一个类似Minecraft的库存,它会在不同的插槽中呈现屏幕上的项目和块。我有一个块的顶点数组,我想在特定大小的特定屏幕坐标处绘制它。

顺便说一句,这是我目前正在使用的代码,它正在运行,但我无法确定特定位置或大小:

 Vector2 coord = new Vector2(-4, 0); //Screen coord.
 int distance = 20; //Distance of the camera from the block(control the size).

  BlockRenderer.basicTextureEffect.View = Matrix.Identity * Matrix.CreateLookAt(new Vector3(-distance, distance * 0.6f, -distance), Vector3.One / 2, Vector3.Up) *  Matrix.CreateTranslation(coord.X, coord.Y, 0);
  BlockRenderer.basicTextureEffect.CurrentTechnique.Passes[0].Apply();
  graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertex, 0, vertex.Length / 3);

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您的矩阵需要交换。您希望身份矩阵在最后。矩阵翻译从右到左解释。 matrix.identity是指摄像机视图的原点。如果你有view.lookat(matrix.identity * myMatrix);如果您依赖于您的对象位于视口原点,则myMatrix无法正确解释。

这是一个很好的参考。

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Coll_Detection_Matrices.php