XNA physics testbed, just 2 cubes for now, move with a/d keys
This commit is contained in:
143
Extras/XNAPhysics/Physics/BoundingBox.cs
Normal file
143
Extras/XNAPhysics/Physics/BoundingBox.cs
Normal file
@@ -0,0 +1,143 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using Microsoft.Xna.Framework;
|
||||
|
||||
namespace Physics
|
||||
{
|
||||
/// <summary>
|
||||
/// This bounding volume is represented by a box.
|
||||
/// </summary>
|
||||
public class BoundingBox : BoundingVolume
|
||||
{
|
||||
#region Constructor: BoundingBox(float width, float height, float depth, Color color, GraphicsDevice device)
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new bounding box.
|
||||
/// </summary>
|
||||
/// <param name="width">The width of the box.</param>
|
||||
/// <param name="height">The height of the box.</param>
|
||||
/// <param name="depth">The depth of the box.</param>
|
||||
/// <param name="color">The color of the box.</param>
|
||||
/// <param name="device">The rendering device.</param>
|
||||
public BoundingBox(float width, float height, float depth, Color color, GraphicsDevice device)
|
||||
: base(color, device)
|
||||
{
|
||||
#region Vertex Buffer
|
||||
|
||||
// Define the vertices
|
||||
VertexPositionColor[] tempVertices = new VertexPositionColor[8];
|
||||
float halfWidth = width / 2f;
|
||||
float halfHeight = height / 2f;
|
||||
float halfDepth = depth / 2f;
|
||||
|
||||
// Define the 8 corners.
|
||||
tempVertices[0] = new VertexPositionColor(new Vector3(-halfWidth, -halfHeight, halfDepth), Color.White);
|
||||
tempVertices[1] = new VertexPositionColor(new Vector3(-halfWidth, -halfHeight, -halfDepth), Color.White);
|
||||
tempVertices[2] = new VertexPositionColor(new Vector3(halfWidth, -halfHeight, -halfDepth), Color.White);
|
||||
tempVertices[3] = new VertexPositionColor(new Vector3(halfWidth, -halfHeight, halfDepth), Color.White);
|
||||
tempVertices[4] = new VertexPositionColor(new Vector3(-halfWidth, halfHeight, halfDepth), Color.White);
|
||||
tempVertices[5] = new VertexPositionColor(new Vector3(-halfWidth, halfHeight, -halfDepth), Color.White);
|
||||
tempVertices[6] = new VertexPositionColor(new Vector3(halfWidth, halfHeight, -halfDepth), Color.White);
|
||||
tempVertices[7] = new VertexPositionColor(new Vector3(halfWidth, halfHeight, halfDepth), Color.White);
|
||||
|
||||
// Initialize the vertex buffer.
|
||||
this.vertexbuffer = new VertexBuffer(device, typeof(VertexPositionColor), 8, ResourceUsage.None, ResourcePool.Default);
|
||||
|
||||
// Set the vertices.
|
||||
this.vertexbuffer.SetData<VertexPositionColor>(tempVertices);
|
||||
|
||||
// Set other info.
|
||||
this.numberOfPrimitive = 12;
|
||||
this.numberOfVertices = 8;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Index Buffer
|
||||
|
||||
// Define the index buffer.
|
||||
int[] tempIndices = new int[12 * 3];
|
||||
|
||||
// Front face.
|
||||
tempIndices[0] = 0;
|
||||
tempIndices[1] = 4;
|
||||
tempIndices[2] = 7;
|
||||
tempIndices[3] = 0;
|
||||
tempIndices[4] = 7;
|
||||
tempIndices[5] = 3;
|
||||
|
||||
// Back face.
|
||||
tempIndices[6] = 2;
|
||||
tempIndices[7] = 6;
|
||||
tempIndices[8] = 5;
|
||||
tempIndices[9] = 2;
|
||||
tempIndices[10] = 5;
|
||||
tempIndices[11] = 1;
|
||||
|
||||
// Left face.
|
||||
tempIndices[12] = 1;
|
||||
tempIndices[13] = 5;
|
||||
tempIndices[14] = 4;
|
||||
tempIndices[15] = 1;
|
||||
tempIndices[16] = 4;
|
||||
tempIndices[17] = 0;
|
||||
|
||||
// Right face.
|
||||
tempIndices[18] = 4;
|
||||
tempIndices[19] = 7;
|
||||
tempIndices[20] = 6;
|
||||
tempIndices[21] = 4;
|
||||
tempIndices[22] = 6;
|
||||
tempIndices[23] = 3;
|
||||
|
||||
// Up face.
|
||||
tempIndices[24] = 4;
|
||||
tempIndices[25] = 5;
|
||||
tempIndices[26] = 6;
|
||||
tempIndices[27] = 4;
|
||||
tempIndices[28] = 6;
|
||||
tempIndices[29] = 7;
|
||||
|
||||
// Down face.
|
||||
tempIndices[30] = 0;
|
||||
tempIndices[31] = 2;
|
||||
tempIndices[32] = 1;
|
||||
tempIndices[33] = 0;
|
||||
tempIndices[34] = 3;
|
||||
tempIndices[35] = 2;
|
||||
|
||||
// Initialize the index buffer.
|
||||
this.indexBuffer = new IndexBuffer(device, typeof(int), 12 * 3, ResourceUsage.None, ResourcePool.Default);
|
||||
|
||||
// Set the data.
|
||||
this.indexBuffer.SetData<int>(tempIndices);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Method: Intersects(BoundingVolume volume)
|
||||
|
||||
/// <summary>
|
||||
/// It checks whether this bounding box 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 override bool Intersects(BoundingVolume volume)
|
||||
{
|
||||
// Check with other bounding volumes.
|
||||
if (volume is BoundingBox)
|
||||
{
|
||||
// Intersection code here.
|
||||
}
|
||||
|
||||
// By default.
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user