123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- using UnityEngine;
- public class ZEDMeshRenderer : MonoBehaviour
- {
- private ZEDManager zedManager = null;
-
-
-
- private Camera cam;
-
-
-
- private RenderTexture meshTex;
-
-
-
- private bool hasStarted = false;
-
-
-
- public bool isTextured = false;
-
-
-
- private Shader shaderWireframe;
-
-
-
- private ZEDRenderingPlane renderingPlane;
-
-
-
- public void Create()
- {
- Transform ObjParent = gameObject.transform;
- int tries = 0;
- while (zedManager == null && tries<5) {
- if (ObjParent!=null)
- zedManager= ObjParent.GetComponent<ZEDManager> ();
- if (zedManager == null && ObjParent!=null)
- ObjParent = ObjParent.parent;
- tries++;
- }
- if (zedManager == null) {
- return;
- }
-
- GameObject go = new GameObject("MeshCamera");
- go.transform.parent = transform;
- go.transform.localPosition = Vector3.zero;
- go.transform.localRotation = Quaternion.identity;
- go.transform.localScale = Vector3.one;
- cam = go.AddComponent<Camera>();
-
-
- if (zedManager.zedCamera.IsCameraReady)
- {
- meshTex = new RenderTexture(zedManager.zedCamera.ImageWidth, zedManager.zedCamera.ImageHeight, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default);
- meshTex.Create();
- }
-
- cam.enabled = false;
- cam.cullingMask = (1 << zedManager.zedCamera.TagInvisibleToZED);
- cam.targetTexture = meshTex;
- cam.nearClipPlane = 0.1f;
- cam.farClipPlane = 500.0f;
- cam.fieldOfView = zedManager.zedCamera.GetFOV() * Mathf.Rad2Deg;
- cam.projectionMatrix = zedManager.zedCamera.Projection;
- cam.backgroundColor = new Color(0, 0, 0, 0);
- cam.clearFlags = CameraClearFlags.Color;
- cam.renderingPath = RenderingPath.VertexLit;
- cam.depth = 0;
- cam.depthTextureMode = DepthTextureMode.None;
- #if UNITY_5_6_OR_NEWER
- cam.allowMSAA = false;
- cam.allowHDR = false;
- #endif
- cam.useOcclusionCulling = false;
- shaderWireframe = (Resources.Load("Materials/SpatialMapping/Mat_ZED_Wireframe_Video_Overlay") as Material).shader;
-
- renderingPlane = GetComponent<ZEDRenderingPlane>();
- renderingPlane.SetTextureOverlayMapping(meshTex);
- renderingPlane.SetMeshRenderAvailable(false);
- hasStarted = true;
- }
-
-
-
-
- public void UpdateRenderingPlane(bool drawMesh)
- {
- renderingPlane.SetMeshRenderAvailable(drawMesh);
- }
-
-
-
- private void OnDisable()
- {
- hasStarted = false;
- }
-
-
-
- void OnPreRender()
- {
- if (zedManager.IsStereoRig)
- {
- if (zedManager != null)
- {
- if (zedManager.IsSpatialMappingDisplay && hasStarted)
- {
- cam.enabled = true;
- if (!isTextured)
- {
- GL.wireframe = true;
- cam.RenderWithShader(shaderWireframe, "RenderType");
- GL.wireframe = false;
- }
- else
- {
- cam.Render();
- }
- cam.enabled = false;
- if (zedManager.SpatialMappingHasChunks)
- renderingPlane.SetMeshRenderAvailable(true);
- }
- }
- }
- }
- private void Update()
- {
- if (!zedManager.IsStereoRig)
- {
- if (zedManager != null)
- {
- if (zedManager.IsSpatialMappingDisplay && hasStarted)
- {
- cam.enabled = true;
- if (!isTextured)
- {
- GL.wireframe = true;
- cam.RenderWithShader(shaderWireframe, "RenderType");
- GL.wireframe = false;
- }
- else
- {
- cam.Render();
- }
- cam.enabled = false;
- if (zedManager.SpatialMappingHasChunks)
- renderingPlane.SetMeshRenderAvailable(true);
- }
- }
- }
- }
-
-
-
- private void OnApplicationQuit()
- {
- if (meshTex != null && meshTex.IsCreated())
- {
- meshTex.Release();
- }
- }
- }
|