2

我想用 OGRE 获得 3D 坐标点的 2D 屏幕坐标。有没有简单的食人魔功能来做到这一点?

非常感谢。

4

1 回答 1

6

我认为没有 OGRE 函数可以直接执行此操作,但您可以轻松获得相同的结果。

您在世界空间中有一个 3D 点,并且您想将您的点投影到屏幕空间中。因此,您需要将投影矩阵和视图矩阵的点相乘,然后需要将结果点从坐标空间 [-1 1] 映射到 [0 1]。

例如:

Vector2 GetScreenspaceCoords(const Vector3& iPoint, const Camera& iCamera)
{
    Vector3 point = iCamera.getProjectionMatrix() * (iCamera.getViewMatrix() * iPoint);

    Vector2 screenSpacePoint = Vector2::ZERO;
    screenSpacePoint.x = (point.x / 2.f) + 0.5f;
    screenSpacePoint.y = (point.y / 2.f) + 0.5f;

    return screenSpacePoint;
}

当然,如果你想要相对于屏幕尺寸的坐标,你必须乘以视口的宽度和高度的点。

于 2012-12-03T11:45:33.010 回答