当前位置: 首页>>代码示例>>C#>>正文


C# Sphere.ToBounds方法代码示例

本文整理汇总了C#中Sphere.ToBounds方法的典型用法代码示例。如果您正苦于以下问题:C# Sphere.ToBounds方法的具体用法?C# Sphere.ToBounds怎么用?C# Sphere.ToBounds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Sphere的用法示例。


在下文中一共展示了Sphere.ToBounds方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: WalkSpotLightShadowGeneration

        static void WalkSpotLightShadowGeneration( Camera mainCamera, RenderLight light,
			List<SceneNode> outSceneNodes, List<StaticMeshObject> outStaticMeshObjects )
        {
            Sphere lightSphere = new Sphere( light.Position, light.AttenuationFar );

            int[] sceneGraphIndexes;
            if( SceneManager.Instance.OverrideVisibleObjects != null )
            {
                sceneGraphIndexes = GetOverrideVisibleObjectsSceneGraphIndexes();
            }
            else
            {
                Plane[] clipPlanes;
                {
                    //add spot light clip planes
                    Plane[] array1 = light.SpotLightClipPlanes;
                    //add main frustum clip planes and light position
                    Plane[] array2 = GetClipPlanesOfConvexHullAroundMainCameraAndLightPosition( mainCamera, light );

                    clipPlanes = new Plane[ array1.Length + array2.Length ];
                    Array.Copy( array1, 0, clipPlanes, 0, array1.Length );
                    Array.Copy( array2, 0, clipPlanes, array1.Length, array2.Length );
                }
                Bounds clipBounds = lightSphere.ToBounds();

                uint groupMask = 0;
                if( outSceneNodes != null )
                    groupMask |= 1 << (int)SceneManager.SceneGraphGroups.SceneNode;
                if( outStaticMeshObjects != null )
                    groupMask |= 1 << (int)SceneManager.SceneGraphGroups.StaticMeshObject;

                sceneGraphIndexes = SceneManager.Instance.SceneGraph.GetObjects( clipPlanes, clipBounds, groupMask );
            }

            foreach( int sceneGraphIndex in sceneGraphIndexes )
            {
                SceneManager.SceneGraphObjectData data = SceneManager.Instance.SceneGraphObjects[ sceneGraphIndex ];

                //SceneNode
                SceneNode sceneNode = data.SceneNode;
                if( sceneNode != null && sceneNode.Visible && sceneNode.IsContainsObjectWithCastsShadowsEnabled() )
                {
                    Bounds sceneNodeBounds = sceneNode.GetWorldBounds();
                    //clip by sphere
                    if( lightSphere.IsIntersectsBounds( sceneNodeBounds ) )
                    {
                        //clip volumes
                        if( !IsTotalClipVolumesContainsBounds( sceneNodeBounds ) )
                            outSceneNodes.Add( sceneNode );
                    }
                }

                //StaticMeshObject
                StaticMeshObject staticMeshObject = data.StaticMeshObject;
                if( staticMeshObject != null && staticMeshObject.Visible && staticMeshObject.CastShadows )
                {
                    //clip by sphere
                    if( lightSphere.IsIntersectsBounds( staticMeshObject.Bounds ) )
                    {
                        //clip volumes
                        if( !IsTotalClipVolumesContainsBounds( staticMeshObject.Bounds ) )
                            outStaticMeshObjects.Add( staticMeshObject );
                    }
                }
            }
        }
开发者ID:whztt07,项目名称:SDK,代码行数:66,代码来源:RenderingLowLevelMethodsImpl.cs

示例2: WalkPointLightShadowGeneration

        static void WalkPointLightShadowGeneration( Camera mainCamera, RenderLight light,
			Vec3 pointLightFaceDirection, List<SceneNode> outSceneNodes,
			List<StaticMeshObject> outStaticMeshObjects )
        {
            Sphere lightSphere = new Sphere( light.Position, light.AttenuationFar );

            if( !pointLightFaceDirection.Equals( Vec3.Zero, .001f ) )
            {
                //shadowmap. 6 render targets.

                int[] sceneGraphIndexes;
                if( SceneManager.Instance.OverrideVisibleObjects != null )
                {
                    sceneGraphIndexes = GetOverrideVisibleObjectsSceneGraphIndexes();
                }
                else
                {
                    Plane[] clipPlanes;
                    {
                        //add point light clip planes
                        Plane[] array1 = GetClipPlanesForPointLightShadowGeneration( mainCamera, light, pointLightFaceDirection );
                        //add main frustum clip planes and light position
                        Plane[] array2 = GetClipPlanesOfConvexHullAroundMainCameraAndLightPosition( mainCamera, light );

                        clipPlanes = new Plane[ array1.Length + array2.Length ];
                        Array.Copy( array1, 0, clipPlanes, 0, array1.Length );
                        Array.Copy( array2, 0, clipPlanes, array1.Length, array2.Length );
                    }
                    Bounds clipBounds = lightSphere.ToBounds();

                    uint groupMask = 0;
                    if( outSceneNodes != null )
                        groupMask |= 1 << (int)SceneManager.SceneGraphGroups.SceneNode;
                    if( outStaticMeshObjects != null )
                        groupMask |= 1 << (int)SceneManager.SceneGraphGroups.StaticMeshObject;

                    sceneGraphIndexes = SceneManager.Instance.SceneGraph.GetObjects( clipPlanes, clipBounds, groupMask );
                }

                foreach( int sceneGraphIndex in sceneGraphIndexes )
                {
                    SceneManager.SceneGraphObjectData data = SceneManager.Instance.SceneGraphObjects[ sceneGraphIndex ];

                    //SceneNode
                    SceneNode sceneNode = data.SceneNode;
                    if( sceneNode != null && sceneNode.Visible && sceneNode.IsContainsObjectWithCastsShadowsEnabled() )
                    {
                        Bounds sceneNodeBounds = sceneNode.GetWorldBounds();
                        //clip by sphere
                        if( lightSphere.IsIntersectsBounds( sceneNodeBounds ) )
                        {
                            //clip volumes
                            if( !IsTotalClipVolumesContainsBounds( sceneNodeBounds ) )
                                outSceneNodes.Add( sceneNode );
                        }
                    }

                    //StaticMeshObject
                    StaticMeshObject staticMeshObject = data.StaticMeshObject;
                    if( staticMeshObject != null && staticMeshObject.Visible && staticMeshObject.CastShadows )
                    {
                        //clip by sphere
                        if( lightSphere.IsIntersectsBounds( staticMeshObject.Bounds ) )
                        {
                            //clip volumes
                            if( !IsTotalClipVolumesContainsBounds( staticMeshObject.Bounds ) )
                                outStaticMeshObjects.Add( staticMeshObject );
                        }
                    }
                }
            }
            else
            {
                //stencil shadows.
                //check by sphere volume.

                int[] sceneGraphIndexes;
                if( SceneManager.Instance.OverrideVisibleObjects != null )
                {
                    sceneGraphIndexes = GetOverrideVisibleObjectsSceneGraphIndexes();
                }
                else
                {
                    Plane[] clipPlanes;
                    {
                        //add main frustum clip planes and light position
                        Plane[] array1 = GetClipPlanesOfConvexHullAroundMainCameraAndLightPosition( mainCamera, light );

                        clipPlanes = new Plane[ 6 + array1.Length ];

                        //add 6 light clip planes.
                        clipPlanes[ 0 ] = new Plane( Vec3.XAxis, lightSphere.Origin.X + lightSphere.Radius );
                        clipPlanes[ 1 ] = new Plane( -Vec3.XAxis, -( lightSphere.Origin.X - lightSphere.Radius ) );
                        clipPlanes[ 2 ] = new Plane( Vec3.YAxis, lightSphere.Origin.Y + lightSphere.Radius );
                        clipPlanes[ 3 ] = new Plane( -Vec3.YAxis, -( lightSphere.Origin.Y - lightSphere.Radius ) );
                        clipPlanes[ 4 ] = new Plane( Vec3.ZAxis, lightSphere.Origin.Z + lightSphere.Radius );
                        clipPlanes[ 5 ] = new Plane( -Vec3.ZAxis, -( lightSphere.Origin.Z - lightSphere.Radius ) );

                        Array.Copy( array1, 0, clipPlanes, 6, array1.Length );
                    }
//.........这里部分代码省略.........
开发者ID:whztt07,项目名称:SDK,代码行数:101,代码来源:RenderingLowLevelMethodsImpl.cs


注:本文中的Sphere.ToBounds方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。