UE4 如何判定一个点是否在屏幕范围内

参考官方UGameplayStatics::ProjectWorldToScreen()函数的方法,进行一些修改调整。用来判定三维世界中一个点是否在屏幕范围内。

bool AMyActor::IsInScrrenViewport(const FVector& WorldPosition)
{
	APlayerController *Player = UGameplayStatics::GetPlayerController(this, 0);
	ULocalPlayer* const LP = Player ? Player->GetLocalPlayer() : nullptr;
	if (LP && LP->ViewportClient)
	{
		// get the projection data
		FSceneViewProjectionData ProjectionData;
		if (LP->GetProjectionData(LP->ViewportClient->Viewport, eSSP_FULL, /*out*/ ProjectionData))
		{
			FMatrix const ViewProjectionMatrix = ProjectionData.ComputeViewProjectionMatrix();
			FVector2D ScreenPosition;
			bool bResult = FSceneView::ProjectWorldToScreen(WorldPosition, ProjectionData.GetConstrainedViewRect(), ViewProjectionMatrix, ScreenPosition);
			if (bResult && ScreenPosition.X > ProjectionData.GetViewRect().Min.X && ScreenPosition.X < ProjectionData.GetViewRect().Max.X
				&& ScreenPosition.Y > ProjectionData.GetViewRect().Min.Y && ProjectionData.GetViewRect().Y < LensPadding.Max.Y)
			{
				return true;
			}
		}
	}
	return false;
}//本文由CSDN博主执手画眉弯原创,未经允许不得转载!

 


版权声明:本文为l346242498原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。