我想用 OGRE 获得 3D 坐标点的 2D 屏幕坐标。有没有简单的食人魔功能来做到这一点?
非常感谢。
我认为没有 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;
}
当然,如果你想要相对于屏幕尺寸的坐标,你必须乘以视口的宽度和高度的点。