Exemple #1
0
        // 排序
        internal override bool DoCameraRender(SoftCamera camera, Dictionary <int, SoftRenderObject> objMap)
        {
            if (camera == null || objMap == null)
            {
                return(false);
            }
            NativeList <int> visibleList;

            camera.DoCameraPreRender();
            camera.Cull(objMap, out visibleList);
            bool ret = false;

            if (visibleList != null && visibleList.Count > 0)
            {
                DoVisibleRenderObjectsSort(camera, visibleList);

                for (int i = 0; i < visibleList.Count; ++i)
                {
                    SoftRenderObject obj = camera.GetRenderObject(visibleList[i]);
                    if (obj != null)
                    {
                        // 后面考虑排序和后面模拟可编程。。。
                        if (obj.Render(camera, m_DefaultPassMode))
                        {
                            ret = true;
                        }
                    }
                }
            }
            camera.DoCameraPostRender(m_DefaultPassMode);

            return(ret);
        }
Exemple #2
0
        public void RemoveRenderObject(SoftRenderObject obj)
        {
            if (obj != null && m_RenderObjMap != null)
            {
                int instanceId = obj.InstanceId;
                m_RenderObjMap.Remove(instanceId);

                SoftCamera cam = obj as SoftCamera;
                if (cam != null)
                {
                    m_CamList.Remove(cam);
                }

                obj.Dispose();
            }
        }
Exemple #3
0
 protected int RegisterRenderObject(SoftRenderObject obj)
 {
     if (obj == null)
     {
         return(-1);
     }
     if (m_RenderObjMap == null)
     {
         m_RenderObjMap = new Dictionary <RenderTargetClearFlags, SoftRenderObject>();
     }
     if (m_RenderObjMap.ContainsKey(obj.InstanceId))
     {
         return(0);
     }
     m_RenderObjMap.Add(obj.InstanceId, obj);
     return(1);
 }
Exemple #4
0
        // 摄影机剔除
        // visiableList: 可见列表
        public void CameraCull(SoftCamera camera, Dictionary <int, SoftRenderObject> objs, out NativeList <int> visiableList)
        {
            visiableList = null;
            if (camera == null)
            {
                return;
            }
            if (objs == null || objs.Count <= 0)
            {
                m_Objs.Clear(false);
                return;
            }

            m_Objs.Clear(false);
            // 简单处理,直接干
            var iter = objs.GetEnumerator();

            while (iter.MoveNext())
            {
                SoftRenderObject obj = iter.Current.Value;
                if (obj != null && obj.CanRenderer)
                {
                    switch (obj.ObjType)
                    {
                    case SoftRenderObjType.MeshRender:
                        SoftSpere spere = (obj as SoftMeshRenderer).WorldBoundSpere;
                        // if (!camera.IsOpenCameraSpereCull || SoftMath.BoundSpereInCamera(spere, camera)) {
                        if (!camera.IsOpenCameraSpereCull || SoftMath.BoundSpereInCamera_UseMVP(spere, camera))
                        {
                            m_Objs.Add(obj.InstanceId);
                        }
                        break;
                    }
                }
            }
            iter.Dispose();
            if (m_Objs.Count > 0)
            {
                visiableList = m_Objs;
            }
        }