如何使用C ++和DirectX11将世界坐标转换为屏幕坐标?

时间:2018-12-18 11:42:27

标签: directx-11 coordinate-transformation

我正在为一个简单的2d游戏进行碰撞研究,我正在尝试确保精灵不会离开屏幕的边缘,并且我知道这是如何做到的,但是我似乎无法获得正确的坐标进行计算。

enter image description here

在图像中,黑色矩形是我的精灵,其世界位置约为(2.2,0.0,0.0),但是屏幕宽度约为1200。我知道我将不得不处理某种矩阵计算,但是我不确定我需要使用哪个矩阵。

我在另一篇有关SO的文章中尝试了以下内容,但似乎并没有给我正确的结果

如何将世界坐标(2.2、0.0、0.0)转换为以像素为单位的屏幕空间坐标,以便可以将其与屏幕宽度进行比较?如果有人能指出正确的方向,那将不胜感激。

修改

此实现略有错误。

我目前正在检查矩形的中心位置是否在屏幕边界之外。

给出以下世界位置为(-2.2,0.0,0.0)的图像,将其投影到屏幕空间坐标中时,当它清晰地出现在屏幕上时,我得到的X值为-76,因此应该大于0。似乎我越移动矩形越有一些偏移,但是,在屏幕中央,X值正确,约为〜630,是屏幕宽度的一半。

这是我用来获取矩形中心屏幕空间坐标的代码。

float centerX = boundingBox.m_center.x;
XMVECTOR centerVector = XMVectorSet(centerX, 0.0f, 0.0f, 0.0f);
XMVECTOR centerProjection = XMVector3Project(centerVector, 0.0f, 0.0f, screenSize.Width, screenSize.Height, 0.0f, 1.0f, projection, view, worldMatrix);
float centerScreenSpace = XMVectorGetX(centerProjection);

有人知道为什么会这样吗?

enter image description here

似乎有150-200像素的偏移量

0 个答案:

没有答案