From 2f310aa9f3f1cb1d51e8f62a6d5e3dda4821b82b Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 22 Sep 2021 19:25:56 +0800 Subject: *effect --- Assets/Scripts/Camera/CameraUtility.cs | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Assets/Scripts/Camera/CameraUtility.cs (limited to 'Assets/Scripts/Camera/CameraUtility.cs') diff --git a/Assets/Scripts/Camera/CameraUtility.cs b/Assets/Scripts/Camera/CameraUtility.cs new file mode 100644 index 00000000..1f6c10e6 --- /dev/null +++ b/Assets/Scripts/Camera/CameraUtility.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public static class CameraExtend +{ + + public static Vector3 WorldToCameraSpace(this Camera camera, Vector3 worldPos) + { + Vector4 camPos = camera.worldToCameraMatrix * worldPos.ToVector4(); + return camPos.ToVector3(); + } + + public static Vector3 CameraToViewportSpace(this Camera camera, Vector3 camPos) + { + Matrix4x4 proj = GL.GetGPUProjectionMatrix(camera.projectionMatrix, false); + Vector4 clipPos = proj * camPos.ToVector4(); + Vector3 ndcPos = (clipPos / clipPos.w); + Vector3 viewPos = (ndcPos + Vector3.one) / 2f; + return viewPos; + } + + public static Vector3 CameraToScreenSpace(this Camera camera, Vector3 camPos) + { + Vector3 viewPos = camera.CameraToViewportSpace(camPos); + Vector3 screenPos = new Vector3( + viewPos.x * camera.pixelWidth, + viewPos.y * camera.pixelHeight, + viewPos.z + ); + return screenPos; + } + +} + +public class CameraUtility : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} -- cgit v1.1-26-g67d0