OGRE で 3D 座標点の 2D スクリーン座標を取得したいと考えています。これを行うための簡単な鬼の機能はありますか?
どうもありがとう。
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;
}
もちろん、画面サイズに対する座標が必要な場合は、ビューポートの幅と高さのポイントを掛ける必要があります。