FVector2D FRTSHelpers::Project(FVector WorldPosition, ULocalPlayer* Player) { FVector2D retVal = FVector2D::ZeroVector; if (Player != NULL && Player->ViewportClient != NULL && Player->ViewportClient->Viewport != NULL && Player->PlayerController != NULL) { FSceneViewProjectionData ProjectionData; if (Player->GetProjectionData(Player->ViewportClient->Viewport, eSSP_FULL, /*out*/ ProjectionData)) { FMatrix viewProjectionMatrix = ProjectionData.ViewMatrix * ProjectionData.ProjectionMatrix; float testx = viewProjectionMatrix.M[0][0] * WorldPosition.X + viewProjectionMatrix.M[1][0] * WorldPosition.Y + viewProjectionMatrix.M[2][0] * WorldPosition.Z + viewProjectionMatrix.M[3][0]; float testy = viewProjectionMatrix.M[0][1] * WorldPosition.X + viewProjectionMatrix.M[1][1] * WorldPosition.Y + viewProjectionMatrix.M[2][1] * WorldPosition.Z + viewProjectionMatrix.M[3][1]; float testw = viewProjectionMatrix.M[0][3] * WorldPosition.X + viewProjectionMatrix.M[1][3] * WorldPosition.Y + viewProjectionMatrix.M[2][3] * WorldPosition.Z + viewProjectionMatrix.M[3][3]; //FPlane Result = viewProjectionMatrix.TransformFVector4(FVector4(WorldPosition, 1)); //float testx = Result.X; //float testy = Result.Y; //float testw = Result.W; FIntRect theViewRect = ProjectionData.GetViewRect(); retVal.X = (int)((((1 + (testx / testw)) / 2.f) * theViewRect.Width()) + 0.5f); retVal.Y = (int)((((1 - (testy / testw)) / 2.f) * theViewRect.Height()) + 0.5f); } } return retVal; }