XNA physics testbed, just 2 cubes for now, move with a/d keys
This commit is contained in:
20
Extras/XNAPhysics/Physics.sln
Normal file
20
Extras/XNAPhysics/Physics.sln
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual C# Express 2005
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Physics", "Physics\Physics.csproj", "{4AA0A1F5-0F11-4D86-9D43-85A12835572F}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{4AA0A1F5-0F11-4D86-9D43-85A12835572F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4AA0A1F5-0F11-4D86-9D43-85A12835572F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4AA0A1F5-0F11-4D86-9D43-85A12835572F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4AA0A1F5-0F11-4D86-9D43-85A12835572F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
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
|
||||||
|
}
|
||||||
|
}
|
||||||
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
|
||||||
|
}
|
||||||
|
}
|
||||||
21
Extras/XNAPhysics/Physics/Game1.Designer.cs
generated
Normal file
21
Extras/XNAPhysics/Physics/Game1.Designer.cs
generated
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Physics
|
||||||
|
{
|
||||||
|
partial class Game1
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.graphics = new Microsoft.Xna.Framework.Components.GraphicsComponent();
|
||||||
|
|
||||||
|
this.GameComponents.Add(this.graphics);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Microsoft.Xna.Framework.Components.GraphicsComponent graphics;
|
||||||
|
}
|
||||||
|
}
|
||||||
216
Extras/XNAPhysics/Physics/Game1.cs
Normal file
216
Extras/XNAPhysics/Physics/Game1.cs
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Audio;
|
||||||
|
using Microsoft.Xna.Framework.Components;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
using Microsoft.Xna.Framework.Storage;
|
||||||
|
|
||||||
|
namespace Physics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// This is the main type for your game
|
||||||
|
/// </summary>
|
||||||
|
partial class Game1 : Microsoft.Xna.Framework.Game
|
||||||
|
{
|
||||||
|
#region Field: viewTransformation
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The used view transformation.
|
||||||
|
/// </summary>
|
||||||
|
private Matrix viewTransformation;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Field: projectionTransformation
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The used projection transformation.
|
||||||
|
/// </summary>
|
||||||
|
private Matrix projectionTransformation;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Field: effect
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The used effect.
|
||||||
|
/// </summary>
|
||||||
|
private Effect effect;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Field: transform
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The used transform effect parameter.
|
||||||
|
/// </summary>
|
||||||
|
private EffectParameter transform;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Field: color
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The used color effect parameter.
|
||||||
|
/// </summary>
|
||||||
|
private EffectParameter color;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Field: volumes
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of bounding volumes.
|
||||||
|
/// </summary>
|
||||||
|
private List<BoundingVolume> volumes;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Constructor: Game1()
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new game.
|
||||||
|
/// </summary>
|
||||||
|
public Game1()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
float aspectRatio = 640.0f / 480.0f;
|
||||||
|
float fov = MathHelper.PiOver4;
|
||||||
|
|
||||||
|
// Initialize the matrices.
|
||||||
|
this.viewTransformation = Matrix.CreateLookAt(new Vector3(0, 0, 150), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
|
||||||
|
this.projectionTransformation = Matrix.CreatePerspectiveFieldOfView(fov, aspectRatio, 1, 600);
|
||||||
|
|
||||||
|
// Initialize the shader.
|
||||||
|
CompiledEffect cEffect = Effect.CompileEffectFromFile("color.fx", null, null, CompilerOptions.None, TargetPlatform.Windows);
|
||||||
|
this.effect = new Effect(this.graphics.GraphicsDevice, cEffect.GetShaderCode(), CompilerOptions.None, null);
|
||||||
|
|
||||||
|
// Get the parameters.
|
||||||
|
EffectParameterCollection coll = this.effect.Parameters;
|
||||||
|
this.transform = coll.GetParameterBySemantic("WorldViewProjection");
|
||||||
|
this.color = coll.GetParameterBySemantic("Color");
|
||||||
|
|
||||||
|
// Create and add volumes.
|
||||||
|
this.volumes = new List<BoundingVolume>();
|
||||||
|
this.AddBoundingVolumes();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Method: AddBoundingVolumes()
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add bounding volumes to the world.
|
||||||
|
/// </summary>
|
||||||
|
private void AddBoundingVolumes()
|
||||||
|
{
|
||||||
|
// ----------
|
||||||
|
//
|
||||||
|
// Add bounding volumes here.
|
||||||
|
//
|
||||||
|
// ----------
|
||||||
|
|
||||||
|
// Box 1
|
||||||
|
BoundingBox box1 = new BoundingBox(5, 5, 5, Color.Green, this.graphics.GraphicsDevice);
|
||||||
|
box1.TranslateWorld(new Vector3(10, 0, 0));
|
||||||
|
this.volumes.Add(box1);
|
||||||
|
|
||||||
|
// Box 2
|
||||||
|
this.volumes.Add(new BoundingBox(10, 10, 10, Color.LightSkyBlue, this.graphics.GraphicsDevice));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Method: Update()
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update components of this physics application.
|
||||||
|
/// </summary>
|
||||||
|
protected override void Update()
|
||||||
|
{
|
||||||
|
// The time since Update was called last
|
||||||
|
float elapsed = (float)ElapsedTime.TotalSeconds;
|
||||||
|
|
||||||
|
this.ProcessUserInput();
|
||||||
|
|
||||||
|
// Let the GameComponents update
|
||||||
|
UpdateComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Method: ProcessUserInput()
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Process input from the user.
|
||||||
|
/// </summary>
|
||||||
|
private void ProcessUserInput()
|
||||||
|
{
|
||||||
|
KeyboardState state = Keyboard.GetState();
|
||||||
|
|
||||||
|
// Move left and right.
|
||||||
|
if (state.IsKeyDown(Keys.D)) this.volumes[0].TranslateWorld(new Vector3(0.1f, 0, 0));
|
||||||
|
if (state.IsKeyDown(Keys.A)) this.volumes[0].TranslateWorld(new Vector3(-0.1f, 0, 0));
|
||||||
|
|
||||||
|
// Check for collisions here somewhere.
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Method: Draw()
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Draw the content of the physics application.
|
||||||
|
/// </summary>
|
||||||
|
protected override void Draw()
|
||||||
|
{
|
||||||
|
// Make sure we have a valid device
|
||||||
|
if (!graphics.EnsureDevice())
|
||||||
|
return;
|
||||||
|
|
||||||
|
graphics.GraphicsDevice.Clear(ClearOptions.DepthBuffer | ClearOptions.Target, Color.Blue, 1, 0);
|
||||||
|
graphics.GraphicsDevice.BeginScene();
|
||||||
|
|
||||||
|
|
||||||
|
// Render all the bounding volumes.
|
||||||
|
foreach (BoundingVolume currentVolume in this.volumes)
|
||||||
|
{
|
||||||
|
// Set the color.
|
||||||
|
this.color.SetValue((currentVolume.Color.ToVector4()));
|
||||||
|
|
||||||
|
// Set the transformation.
|
||||||
|
this.transform.SetValue(currentVolume.TransformationMatrix * this.viewTransformation * this.projectionTransformation);
|
||||||
|
|
||||||
|
// Start the effect.
|
||||||
|
this.effect.Begin(EffectStateOptions.Default);
|
||||||
|
|
||||||
|
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
|
||||||
|
{
|
||||||
|
pass.Begin();
|
||||||
|
|
||||||
|
// Draw the volume.
|
||||||
|
currentVolume.Draw();
|
||||||
|
|
||||||
|
pass.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// End the effect.
|
||||||
|
this.effect.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let the GameComponents draw
|
||||||
|
DrawComponents();
|
||||||
|
|
||||||
|
graphics.GraphicsDevice.EndScene();
|
||||||
|
graphics.GraphicsDevice.Present();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
66
Extras/XNAPhysics/Physics/Physics.csproj
Normal file
66
Extras/XNAPhysics/Physics/Physics.csproj
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectGuid>{4AA0A1F5-0F11-4D86-9D43-85A12835572F}</ProjectGuid>
|
||||||
|
<ProjectTypeGuids>{9F340DF3-2AED-4330-AC16-78AC2D9B4738};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>Physics</RootNamespace>
|
||||||
|
<AssemblyName>Physics</AssemblyName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<NoStdLib>true</NoStdLib>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<NoStdLib>true</NoStdLib>
|
||||||
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Xna.Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f48fa5f25d27e8ff, processorArchitecture=x86">
|
||||||
|
<SpecificVersion>true</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Xna.Framework.Game, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f48fa5f25d27e8ff, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>true</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="mscorlib" />
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="BoundingBox.cs" />
|
||||||
|
<Compile Include="BoundingVolume.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Game1.Designer.cs">
|
||||||
|
<DependentUpon>Game1.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Program.cs">
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Game1.cs">
|
||||||
|
<SubType>Component</SubType>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
||||||
19
Extras/XNAPhysics/Physics/Program.cs
Normal file
19
Extras/XNAPhysics/Physics/Program.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Physics
|
||||||
|
{
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
using (Game1 game = new Game1())
|
||||||
|
{
|
||||||
|
game.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
32
Extras/XNAPhysics/Physics/Properties/AssemblyInfo.cs
Normal file
32
Extras/XNAPhysics/Physics/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("Physics")]
|
||||||
|
[assembly: AssemblyProduct("Physics")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2006")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("04d7cdfe-26b9-4243-b855-7071a96076fd")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
42
Extras/XNAPhysics/Physics/bin/Debug/color.fx
Normal file
42
Extras/XNAPhysics/Physics/bin/Debug/color.fx
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Constant(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
float4 color : Color;
|
||||||
|
|
||||||
|
float4x4 transform : WorldViewProjection;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Vertex shader(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
void FinalVS( inout float4 Position : POSITION0)
|
||||||
|
{
|
||||||
|
// Calculate the output position.
|
||||||
|
//float4 tempPos = mul( Position, world );
|
||||||
|
Position = mul( Position, transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Pixel shader(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
void FinalPS( out float4 Color : COLOR0 )
|
||||||
|
{
|
||||||
|
// Set the output color.
|
||||||
|
Color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Technique(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
technique Final
|
||||||
|
{
|
||||||
|
pass Pass_0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_1_1 FinalVS();
|
||||||
|
PixelShader = compile ps_2_0 FinalPS();
|
||||||
|
}
|
||||||
|
}
|
||||||
42
Extras/XNAPhysics/Physics/bin/Release/color.fx
Normal file
42
Extras/XNAPhysics/Physics/bin/Release/color.fx
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Constant(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
float4 color : Color;
|
||||||
|
|
||||||
|
float4x4 transform : WorldViewProjection;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Vertex shader(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
void FinalVS( inout float4 Position : POSITION0)
|
||||||
|
{
|
||||||
|
// Calculate the output position.
|
||||||
|
//float4 tempPos = mul( Position, world );
|
||||||
|
Position = mul( Position, transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Pixel shader(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
void FinalPS( out float4 Color : COLOR0 )
|
||||||
|
{
|
||||||
|
// Set the output color.
|
||||||
|
Color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
// Technique(s)
|
||||||
|
//--------------------------------------------------------------//
|
||||||
|
|
||||||
|
technique Final
|
||||||
|
{
|
||||||
|
pass Pass_0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_1_1 FinalVS();
|
||||||
|
PixelShader = compile ps_2_0 FinalPS();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user