我正在为一个简单的二维游戏研究碰撞,我试图确保精灵不能离开屏幕的边缘,我理解这是如何做到的,但我似乎无法得到正确的坐标来执行计算。
在图像中,黑色矩形是我的精灵,它的世界位置在(2.2,0.0,0.0)左右,但是屏幕宽度在~1200左右。我知道我必须处理某种矩阵计算,但我不确定我需要使用哪种矩阵。
我在另一篇文章中试过下面的内容,但似乎没有给出正确的结果
如何将世界坐标(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);
有人知道为什么会这样吗?
好像有150-200像素的偏移量