public void TestPhysicsMeshPoolConvexMesh() { XNAGame game = new XNAGame(); var mesh = new RAMMesh(); var data = mesh.GetCollisionData(); var convex = new MeshCollisionData.Convex(); convex.Positions = new List <Vector3>(); Vector3[] pos = CreatePyramidPositions(); Vector3[] transpos = new Vector3[pos.Length]; var mat = Matrix.CreateTranslation(20, 5, 20); Vector3.Transform(pos, ref mat, transpos); convex.Positions.AddRange(transpos); data.ConvexMeshes.Add(convex); PhysicsEngine engine = new PhysicsEngine(); PhysicsDebugRendererXNA debugRenderer = null; game.InitializeEvent += delegate { engine.Initialize(); debugRenderer = new PhysicsDebugRendererXNA(game, engine.Scene); debugRenderer.Initialize(game); var pool = new MeshPhysicsPool(); var tMesh1 = pool.CreateConvexMesh(engine.Scene, mesh.GetCollisionData().ConvexMeshes[0]); var tMesh2 = pool.CreateConvexMesh(engine.Scene, mesh.GetCollisionData().ConvexMeshes[0]); Assert.AreEqual(tMesh1, tMesh2); var actorDesc = new ActorDescription(new ConvexShapeDescription() { ConvexMesh = tMesh1 }); engine.Scene.CreateActor(actorDesc); }; game.DrawEvent += delegate { debugRenderer.Render(game); }; int frameNum = 0; game.UpdateEvent += delegate { engine.Update(game.Elapsed); //if (frameNum > 2) game.Exit(); frameNum++; }; game.Run(); }
public void TestPhysicsMeshPoolTriangleMeshPreload() { XNAGame game = new XNAGame(); RAMMesh mesh = createTriangleMesh(); PhysicsEngine engine = new PhysicsEngine(); MeshPhysicsPool pool = null; game.InitializeEvent += delegate { engine.Initialize(); pool = new MeshPhysicsPool(); pool.PreloadTriangleMesh(engine.Scene, mesh.GetCollisionData().TriangleMesh); }; game.DrawEvent += delegate { }; int frameNum = 0; game.UpdateEvent += delegate { System.Threading.Thread.Sleep(1000); pool.Update(engine.Scene); // This should finish instantly var tMesh1 = pool.CreateTriangleMesh(engine.Scene, mesh.GetCollisionData().TriangleMesh); engine.Update(game.Elapsed); if (frameNum > 2) { game.Exit(); } frameNum++; }; game.Run(); }
public void TestPhysicsMeshPoolTriangleMesh() { XNAGame game = new XNAGame(); var mesh = new RAMMesh(); var data = mesh.GetCollisionData(); var triangleMesh = new MeshCollisionData.TriangleMeshData(); Vector3[] pos = CreatePyramidPositions(); Vector3[] transpos = new Vector3[pos.Length]; var mat = Matrix.CreateTranslation(20, 5, 20); Vector3.Transform(pos, ref mat, transpos); triangleMesh.Positions = transpos; triangleMesh.Indices = new int[triangleMesh.Positions.Length]; for (int i = 0; i < triangleMesh.Positions.Length; i++) { triangleMesh.Indices[i] = i; } data.TriangleMesh = triangleMesh; PhysicsEngine engine = new PhysicsEngine(); PhysicsDebugRendererXNA debugRenderer = null; game.InitializeEvent += delegate { engine.Initialize(); debugRenderer = new PhysicsDebugRendererXNA(game, engine.Scene); debugRenderer.Initialize(game); var pool = new MeshPhysicsPool(); var tMesh1 = pool.CreateTriangleMesh(engine.Scene, mesh.GetCollisionData().TriangleMesh); var tMesh2 = pool.CreateTriangleMesh(engine.Scene, mesh.GetCollisionData().TriangleMesh); Assert.AreEqual(tMesh1, tMesh2); var actorDesc = new ActorDescription(new TriangleMeshShapeDescription() { TriangleMesh = tMesh1 }); engine.Scene.CreateActor(actorDesc); }; game.DrawEvent += delegate { debugRenderer.Render(game); }; int frameNum = 0; game.UpdateEvent += delegate { engine.Update(game.Elapsed); //if (frameNum > 2) game.Exit(); frameNum++; }; game.Run(); }