示例#1
0
文件: Camera.cs 项目: LksWllmnn/Fusee
        private void UserSideFrustumCulling(IList <SceneNode> nodeChildren, Frustum frustum)
        {
            foreach (SceneNode node in nodeChildren)
            {
                if (node.Name == "Frustum" || node.Name.Contains("Cam"))
                {
                    continue;
                }

                Mesh mesh = node.GetComponent <Mesh>();
                if (mesh != null)
                {
                    //We only perform the test for meshes that do have a calculated - non-zero sized - bounding box.
                    if (mesh.BoundingBox.Size != float3.Zero)
                    {
                        AABBf worldSpaceBoundingBox = node.GetComponent <Transform>().Matrix() * mesh.BoundingBox;
                        if (!worldSpaceBoundingBox.InsideOrIntersectingFrustum(frustum))
                        {
                            mesh.Active = false;
                        }
                        else
                        {
                            mesh.Active = true;
                        }
                    }
                }

                if (node.Children.Count != 0)
                {
                    UserSideFrustumCulling(node.Children, frustum);
                }
            }
        }