本文整理汇总了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 );
}
}
}
}
示例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 );
}
//.........这里部分代码省略.........