XNA 2D将世界位置转换为屏幕位置

XNA 2D将世界位置转换为屏幕位置,xna,position,screen,2d,Xna,Position,Screen,2d,好了,伙计们,我花了整整两周的时间想弄明白这一点。我已经尝试了一些我自己的方法,仅通过数学来解决这个问题,但没有成功。我也到处看看,看到有人推荐Viewport.Project 这并不是那么简单。我看过的所有地方,包括MSDN区域和所有论坛,都只是建议能够使用它,但当我尝试使用它时,它们并没有解释它工作所需的矩阵和值。我没有找到关于如何正确使用这种方法的有用信息,这让我发疯。请帮助这个可怜的家伙 我要做的第一件事就是发布我当前的代码。我有五个左右不同的版本,没有一个有效。我最接近的是NAN,我不

好了,伙计们,我花了整整两周的时间想弄明白这一点。我已经尝试了一些我自己的方法,仅通过数学来解决这个问题,但没有成功。我也到处看看,看到有人推荐Viewport.Project

这并不是那么简单。我看过的所有地方,包括MSDN区域和所有论坛,都只是建议能够使用它,但当我尝试使用它时,它们并没有解释它工作所需的矩阵和值。我没有找到关于如何正确使用这种方法的有用信息,这让我发疯。请帮助这个可怜的家伙

我要做的第一件事就是发布我当前的代码。我有五个左右不同的版本,没有一个有效。我最接近的是NAN,我不明白。我正试图在我的屏幕上显示基于小行星位置的文本,如果它们非常远,文本将作为指南,以便玩家可以前往小行星

Vector3 camLookAt = Vector3.Zero;
Vector3 up = new Vector3(0.0f, 0.0f, 0.0f);

float nearClip = 1000.0f;
float farClip = 100000.0f;
float viewAngle = MathHelper.ToRadians(90f);
float aspectRatio = (float)viewPort.Width / (float)viewPort.Height;

Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, 0), camLookAt, up);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(viewAngle, aspectRatio, nearClip, farClip);

Matrix world = Matrix.CreateTranslation(camPosition.X, camPosition.Y, 0);

Vector3 projectedPosition = graphicsDevice.Viewport.Project(new Vector3(worldPosition.X, worldPosition.Y, 0), projection, view, Matrix.Identity);

screenPosition.X = projectedPosition.X;
screenPosition.Y = projectedPosition.Y;


if (screenPosition.X > 400) screenPosition.X = 400;
if (screenPosition.X < 100) screenPosition.X = 100;
if (screenPosition.Y > 400) screenPosition.Y = 400;
if (screenPosition.Y < 100) screenPosition.Y = 100;
return screenPosition;  
据我所知,项目是摄像机的位置。我的游戏是2D的,所以vector3很烦人,我想我的Z可能是CameraZoom,投影可能是我们想要转换成2D屏幕的对象,视图可能是相机能看到的大小,最后一个我不确定

在搜索了大约两周的信息后,代码或知识没有任何可能的改进,当我看到MDSN教程时更加困惑,我决定发布一个问题,因为我非常接近于不实现世界位置转换为屏幕位置。感谢所有帮助,谢谢:


另外,我使用的是2D游戏,当大多数人谈论Z轴时,它确实会增加混乱。当2D游戏没有Z轴时,它只是变换精灵,使其看起来像缩放或移动。再次感谢:

我可能有点误解,但我认为您不需要使用XNA提供的3D摄像头进行2D游戏。除非你想用3D制作一个2.5D的游戏,比如视差系统之类的,否则你根本不需要使用它。看看这些:

XNA中的2D与3D的工作原理不同。您不需要担心3D视口、3D摄影机或其他任何东西。没有近剪裁或远剪裁。2D在XNA中处理得很好,我认为您对XNA的工作原理有点误解


附言:你不需要使用矢量。相反,使用矢量2。我想你会发现在2D游戏中使用它们要容易得多^^

所以你要做的就是在2d游戏中的世界里有一个摄像头?我已经有了摄像头设置,我试图找到2D相机在2D世界中的位置,然后将世界中对象的位置转换为屏幕坐标,以显示文本,如对象的名称或健康状况等。P.S我的相机具有缩放功能,它也可以旋转,但我不使用旋转。你不只是从对象的世界中减去相机的世界位置吗获取屏幕位置的位置?然后您需要考虑缩放。我一直在做的就是给所有东西分配一个世界位置,除了抬头显示器,然后在渲染时将其转换为屏幕位置我编写了使用世界位置而不是屏幕位置的自定义绘制命令嘿kevin wang到Simpler 2D camera的链接是我的相机:D但我将相机位置从屏幕中间更改为0,0以获取鼠标世界坐标我将继续阅读其他教程并让你知道吗