代码之家  ›  专栏  ›  技术社区  ›  jjmcc

如何使用C++和DUNCTX11转换世界坐标到屏幕坐标?

  •  0
  • jjmcc  · 技术社区  · 6 年前

    我正在为一个简单的二维游戏研究碰撞,我试图确保精灵不能离开屏幕的边缘,我理解这是如何做到的,但我似乎无法得到正确的坐标来执行计算。

    enter image description here

    在图像中,黑色矩形是我的精灵,它的世界位置在(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);
    

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

    enter image description here

    好像有150-200像素的偏移量

    0 回复  |  直到 6 年前