XNA physics testbed, just 2 cubes for now, move with a/d keys
This commit is contained in:
166
Extras/XNAPhysics/Physics/BoundingVolume.cs
Normal file
166
Extras/XNAPhysics/Physics/BoundingVolume.cs
Normal file
@@ -0,0 +1,166 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user