void OnEnable()
 {
     if (m_CSLIBProjectorInstance == null)
     {
         m_CSLIBProjectorInstance = target as CSProjectorController;
     }
 }
Example #2
0
        ////////////////////////////////////////////////////////////////////////
        // 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();
            }
        }