From d48ea5bb797037069d641da41da0f195f0124491 Mon Sep 17 00:00:00 2001 From: dan miller Date: Fri, 19 Oct 2007 05:20:48 +0000 Subject: one more for the gipper --- .../ode-0.9/contrib/OdeModelProcessor/README.TXT | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 libraries/ode-0.9/contrib/OdeModelProcessor/README.TXT (limited to 'libraries/ode-0.9/contrib/OdeModelProcessor/README.TXT') diff --git a/libraries/ode-0.9/contrib/OdeModelProcessor/README.TXT b/libraries/ode-0.9/contrib/OdeModelProcessor/README.TXT new file mode 100644 index 0000000..97683f9 --- /dev/null +++ b/libraries/ode-0.9/contrib/OdeModelProcessor/README.TXT @@ -0,0 +1,78 @@ +The ODE Model Processor +----------------------- + +Copyright 2007, Department of Information Science, +University of Otago, Dunedin, New Zealand. + +Author: Richard Barrington + +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("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. -- cgit v1.1