public static void GetShapeMeshData(EntityCollidable collidable, List<VertexPositionNormalTexture> vertices, List<ushort> indices) { var shape = collidable.Shape as ConvexShape; if (shape == null) throw new ArgumentException("Wrong shape type for this helper."); var vertexPositions = new BEPUutilities.Vector3[SampleDirections.Length]; for (int i = 0; i < SampleDirections.Length; ++i) { shape.GetLocalExtremePoint(SampleDirections[i], out vertexPositions[i]); } var hullIndices = new RawList<int>(); ConvexHullHelper.GetConvexHull(vertexPositions, hullIndices); var hullTriangleVertices = new RawList<BEPUutilities.Vector3>(); foreach (int i in hullIndices) { hullTriangleVertices.Add(vertexPositions[i]); } for (ushort i = 0; i < hullTriangleVertices.Count; i += 3) { Vector3 normal = MathConverter.Convert(BEPUutilities.Vector3.Normalize(BEPUutilities.Vector3.Cross(hullTriangleVertices[i + 2] - hullTriangleVertices[i], hullTriangleVertices[i + 1] - hullTriangleVertices[i]))); vertices.Add(new VertexPositionNormalTexture(MathConverter.Convert(hullTriangleVertices[i]), normal, new Vector2(0, 0))); vertices.Add(new VertexPositionNormalTexture(MathConverter.Convert(hullTriangleVertices[i + 1]), normal, new Vector2(1, 0))); vertices.Add(new VertexPositionNormalTexture(MathConverter.Convert(hullTriangleVertices[i + 2]), normal, new Vector2(0, 1))); indices.Add(i); indices.Add((ushort)(i + 1)); indices.Add((ushort)(i + 2)); } }
//Vector3 public static Vector3 Convert(BEPUutilities.Vector3 bepuVector) { Vector3 toReturn; toReturn.X = bepuVector.X; toReturn.Y = bepuVector.Y; toReturn.Z = bepuVector.Z; return(toReturn); }
public static BEPUutilities.Vector3[] Convert(Vector3[] xnaVectors) { var bepuVectors = new BEPUutilities.Vector3[xnaVectors.Length]; for (int i = 0; i < xnaVectors.Length; i++) { Convert(ref xnaVectors[i], out bepuVectors[i]); } return(bepuVectors); }
public static void GetShapeMeshData(EntityCollidable collidable, List <VertexPositionNormalTexture> vertices, List <ushort> indices) { var shape = collidable.Shape as ConvexShape; if (shape == null) { throw new ArgumentException("Wrong shape type for this helper."); } var vertexPositions = new BEPUutilities.Vector3[SampleDirections.Length]; for (int i = 0; i < SampleDirections.Length; ++i) { shape.GetLocalExtremePoint(SampleDirections[i], out vertexPositions[i]); } var hullIndices = new RawList <int>(); ConvexHullHelper.GetConvexHull(vertexPositions, hullIndices); var hullTriangleVertices = new RawList <BEPUutilities.Vector3>(); foreach (int i in hullIndices) { hullTriangleVertices.Add(vertexPositions[i]); } for (ushort i = 0; i < hullTriangleVertices.Count; i += 3) { Vector3 normal = MathConverter.Convert(BEPUutilities.Vector3.Normalize(BEPUutilities.Vector3.Cross(hullTriangleVertices[i + 2] - hullTriangleVertices[i], hullTriangleVertices[i + 1] - hullTriangleVertices[i]))); vertices.Add(new VertexPositionNormalTexture(MathConverter.Convert(hullTriangleVertices[i]), normal, new Vector2(0, 0))); vertices.Add(new VertexPositionNormalTexture(MathConverter.Convert(hullTriangleVertices[i + 1]), normal, new Vector2(1, 0))); vertices.Add(new VertexPositionNormalTexture(MathConverter.Convert(hullTriangleVertices[i + 2]), normal, new Vector2(0, 1))); indices.Add(i); indices.Add((ushort)(i + 1)); indices.Add((ushort)(i + 2)); } }
public static void Convert(ref Vector3 xnaVector, out BEPUutilities.Vector3 bepuVector) { bepuVector.X = xnaVector.X; bepuVector.Y = xnaVector.Y; bepuVector.Z = xnaVector.Z; }
public static void Convert(ref BEPUutilities.Vector3 bepuVector, out Vector3 xnaVector) { xnaVector.X = bepuVector.X; xnaVector.Y = bepuVector.Y; xnaVector.Z = bepuVector.Z; }