| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- The ODE Model Processor
- -----------------------
- Copyright 2007, Department of Information Science,
- University of Otago, Dunedin, New Zealand.
- Author: Richard Barrington <[email protected]>
- This is a Content Processor and Tag library written for use with
- Microsoft Visual C# 2005 Express Edition and Microsoft XNA Game
- Studio Express 1.0.
- It can be used to read .x model vertex and index data before
- insertion into the content pipeline. This is used to build ODE
- Triangle Meshes which are then used for collision detection that
- is more accurate than the default XNA bounding boxes or spheres.
- Usage is fairly simple:
- Build the library and reference the DLL in your project.
- Add the DLL to the Content Pipeline
- Set the content processor for you .x models to OdeModelProcessor.
- Create triangle meshes as follows:
- 1) Create a space, but only one for all of models.
- 2) Create a triangle data.
- 3) Load the model.
- 4) Retreive the tag from the model.
- 6) Build the triangle mesh by calling d.GeomTriMeshDataBuildSimple.
- Eg:
- IntPtr space = d.SimpleSpaceCreate(IntPtr.Zero);
- IntPtr triangleData = d.GeomTriMeshDataCreate();
- Model obj = content.Load<Model>("Content\\mycube");
- OdeTag tag = (OdeTag)obj.Tag;
- IntPtr vertexArray = tag.getVertices();
- IntPtr indexArray = tag.getIndices();
- d.GeomTriMeshDataBuildSimple
- (
- triangleData,
- vertexArray, tag.getVertexStride(), tag.getVertexCount(),
- indexArray, tag.getIndexCount(), tag.getIndexStride()
- );
- IntPtr triangleMesh = d.CreateTriMesh(space, triangleData, null, null, null);
- You can load multiple models and test for collisions with something
- like this in the update method:
- d.GeomSetPosition(odeTri1, obj1Position.X, obj1Position.Y, obj1Position.Z);
- d.GeomSetPosition(odeTri2, obj2Position.X, obj2Position.Y, obj2Position.Z);
- int numberOfContacts = d.Collide(odeTri1, odeTri2, ODE_CONTACTS,
- contactGeom, d.ContactGeom.SizeOf);
- Where odeTri1 and odeTri2 are triangle meshes you've created, obj1Position
- and obj2Position are the positions of your rendered models in the scene,
- ODE_CONTACTS is a constant defining the maximum number of contacts
- to test for, contactGeom is a d.ContactGeom[] of length ODE_CONTACTS.
- If numberOfContacts is greater than 0, you have a collision.
- Other ODE functions such as d.SpaceCollide() also work; see ODE.NET BoxTest.cs.
- This library is free software; you can redistribute it and/or
- modify it under the same terms as the ODE and ODE.Net libraries.
- Specifically, the terms are one of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file LICENSE.TXT.
- (2) The BSD-style license that is included with this library in
- the file LICENSE-BSD.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- LICENSE.TXT and LICENSE-BSD.TXT for more details.
|