void OnEnable() { if (m_CSLIBProjectorInstance == null) { m_CSLIBProjectorInstance = target as CSProjectorController; } }
//////////////////////////////////////////////////////////////////////// // BUILDING STRUCTURE //////////////////////////////////////////////////////////////////////// internal void AttachGameObject(GameObject _go) { m_worldGameObject = _go; // Attach projector scripts m_directXProjectorController = m_worldGameObject.AddComponent <CSProjectorController>(); m_directXProjectorController.SetIntrinsics( m_dimensions, m_intrinsics); m_directXProjectorController.InvertImage = false; m_directXProjectorController.ID = 0; // TODO: Get from json m_directXProjectorController.InvertImage = true; // Add frustum intersection component m_frustumIntersections = m_worldGameObject.AddComponent <AARGenerateFrustumIntersections>(); // Add projector visualizer GameObject projectorViz = new GameObject("Projector Visualization"); projectorViz.transform.parent = m_worldGameObject.transform; projectorViz.transform.localPosition = Vector3.zero; projectorViz.transform.localRotation = Quaternion.identity; m_projectorVisualizer = projectorViz.AddComponent <Projector>(); m_projectorVisualizer.aspectRatio = m_directXProjectorController.GetAspectRatio(); m_projectorVisualizer.fieldOfView = m_directXProjectorController.GetFoVDegrees(); m_projectorVisualizer.nearClipPlane = 0.01f; m_projectorVisualizer.farClipPlane = m_directXProjectorController.GetIntrinsics().far; m_projectorVisualizer.ignoreLayers = (~0 ^ LayerMask.GetMask("Spatial Awareness")); Material mat = new Material(Shader.Find("AAR/ProjectorVisualizer")); mat.SetTexture("_ShadowTex", m_directXProjectorController.GetActiveRT()); m_projectorVisualizer.material = mat; m_projectorVisualizer.enabled = m_projectorVisualization; }
/////////////////////////////////////////////////////////////////////////////////////////////// /// OnPostRender Callback //////////////////////////////////////////////////////////////////////////////////////////////// private void OnPostRender_ProjectorCallback(int _id, CSProjectorController _projectorController) { Camera projectorCamera = _projectorController.GetCamera(); // Render projector here if (ProjectorRenderingMode == ProjectorRenderMode.View_Dependent_Projection) { RenderViewPersepective(_id, projectorCamera); return; } if (ProjectorRenderingMode == ProjectorRenderMode.Static_Material_Projection) { // Blit Material to RenderTexture RenderTexture rt = _projectorController.GetActiveRT(); // Update active static material ActiveStaticRenderMaterial.UpdateInternal(); // Set Variables Shader.SetGlobalFloat("_ProjectorAspectRatio", _projectorController.GetAspectRatio()); Shader.SetGlobalColor("_BackgroundColor", ActiveStaticRenderMaterial.color); Graphics.Blit(ActiveStaticRenderMaterial.texture, rt, ActiveStaticRenderMaterial.material); return; } // Default render path { projectorCamera.depth = 1; projectorCamera.backgroundColor = DefualtBackground; projectorCamera.clearFlags = CameraClearFlags.SolidColor; projectorCamera.cullingMask = VirtualTextureMask | m_ProjectorOnlyMask; projectorCamera.Render(); } }