Files
bullet3/Extras/XNAPhysics/Physics/BoundingVolume.cs

167 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Physics
{
/// <summary>
/// An abstract class for a bounding volume.
/// A bounding volume has a transformation matrix that determines the orientation of the volume.
/// Futhermore it has an intersect funtion that checks whether this bounding volume intersects with an other bounding volume.
/// There is also a draw method by which the bounding volume is drawn.
/// </summary>
public abstract class BoundingVolume
{
#region Field: graphicsDevice
/// <summary>
/// The graphicsDevice of this volume.
/// </summary>
protected GraphicsDevice graphicsDevice;
#endregion
#region Field: vertexBuffer
/// <summary>
/// The vertex buffer of this volume.
/// </summary>
protected VertexBuffer vertexbuffer;
#endregion
#region Field: indexBuffer
/// <summary>
/// The index buffer of this volume.
/// </summary>
protected IndexBuffer indexBuffer;
#endregion
#region Field: numberOfPrimitives
/// <summary>
/// The number of primitives of this volume.
/// </summary>
protected int numberOfPrimitive;
#endregion
#region Field: numberOfVertices
/// <summary>
/// The number of vertices of this volume.
/// </summary>
protected int numberOfVertices;
#endregion
#region Property: TransformationMatrix
/// <summary>
/// The transformation matrix of this bounding volume.
/// </summary>
protected Matrix transformationMatrix;
/// <summary>
/// The transformation matrix of this bounding volume.
/// </summary>
public Matrix TransformationMatrix
{
get
{
return this.transformationMatrix;
}
}
#endregion
#region Property: Color
/// <summary>
/// The color of this bounding volume.
/// </summary>
private Color color;
/// <summary>
/// The color of this bounding volume.
/// </summary>
public Color Color
{
get
{
return color;
}
set
{
color = value;
}
}
#endregion
#region Constructor: BoundingVolume(Color color, GraphicsDevice graphicsDevice)
/// <summary>
/// Create a new bounding volume.
/// </summary>
/// <param name="color">The color of this volume.</param>
/// <param name="graphicsDevice">The device used to render.</param>
public BoundingVolume(Color color, GraphicsDevice graphicsDevice)
{
this.color = color;
this.transformationMatrix = Matrix.Identity;
this.graphicsDevice = graphicsDevice;
}
#endregion
#region Method: Intersects(BoundingVolume volume)
/// <summary>
/// This method must be implemented.
/// It checks whether this bounding volume intersects with the given bounding volume.
/// </summary>
/// <param name="volume">The volume to check with.</param>
/// <returns>True if the bounding volumes intersect, false otherwise.</returns>
public abstract bool Intersects(BoundingVolume volume);
#endregion
#region Method: Draw()
/// <summary>
/// Draw this bounding volume to the screen.
/// </summary>
public void Draw()
{
this.graphicsDevice.RenderState.CullMode = CullMode.None;
this.graphicsDevice.Indices = this.indexBuffer;
this.graphicsDevice.VertexDeclaration = new VertexDeclaration(graphicsDevice, VertexPositionColor.VertexElements);
this.graphicsDevice.Vertices[0].SetSource(this.vertexbuffer, 0, VertexPositionColor.SizeInBytes);
this.graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, this.numberOfVertices, 0, this.numberOfPrimitive);
}
#endregion
#region Method: TranslateWorld(Vector3 translation)
/// <summary>
/// Translate this bounding volume relative to the world axis.
/// </summary>
/// <param name="translation">The translation to make.</param>
public void TranslateWorld(Vector3 translation)
{
this.transformationMatrix *= Matrix.CreateTranslation(translation);
}
#endregion
}
}