public void ConvertCollisionToRender(ResourceTypes.ItemDesc.CollisionConvex convex) { DoRender = true; BoundingBox = new BoundingBox(new Vector3(-0.5f), new Vector3(0.5f)); Indices = convex.indices; Vertices = new VertexLayouts.CollisionLayout.Vertex[convex.vertices.Length]; materials = new CollisionMaterials[convex.vertices.Length]; for (int i = 0; i != convex.vertices.Length; i++) { VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex(); vertex.Position = convex.vertices[i]; vertex.Normal = new Vector3(0.0f); vertex.Colour = SelectionColour.ToArgb(); Vertices[i] = vertex; } CalculateNormals(); }
public void ConvertCollisionToRender(TriangleMesh triangleMesh) { DoRender = true; BoundingBox = triangleMesh.BoundingBox; Indices = triangleMesh.Triangles.SelectMany(t => new[] { t.v0, t.v1, t.v2 }).ToArray(); Vertices = new VertexLayouts.CollisionLayout.Vertex[triangleMesh.Vertices.Count]; materials = triangleMesh.MaterialIndices.Select(m => (CollisionMaterials)m).ToArray(); for (int i = 0; i != triangleMesh.Vertices.Count; i++) { VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex(); vertex.Position = triangleMesh.Vertices[i]; vertex.Normal = new Vector3(0.0f); vertex.Colour = SelectionColour.ToArgb(); Vertices[i] = vertex; } int materialIDX = 0; for (int i = 0; i != triangleMesh.Triangles.Count; i++) { int currentColour = Color.White.ToArgb(); switch (materials[materialIDX]) { case CollisionMaterials.GrassAndSnow: currentColour = Color.FromArgb(255, 0, 102, 0).ToArgb(); Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour; break; case CollisionMaterials.Water: currentColour = Color.FromArgb(255, 77, 204, 255).ToArgb(); Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour; break; case CollisionMaterials.Gravel: case CollisionMaterials.Tarmac: case CollisionMaterials.Sidewalk: case CollisionMaterials.SidewalkEdge: currentColour = Color.FromArgb(255, 128, 128, 128).ToArgb(); Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour; break; case CollisionMaterials.Mud: currentColour = Color.FromArgb(255, 102, 51, 0).ToArgb(); Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour; break; case CollisionMaterials.PlayerCollision: Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour; break; default: Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour; Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour; break; } materialIDX++; } CalculateNormals(); }
public void ConvertCollisionToRender(TriangleMesh triangleMesh) { DoRender = true; BoundingBox = new RenderBoundingBox(); BoundingBox.Init(triangleMesh.BoundingBox); BoundingBox.DoRender = false; Indices = triangleMesh.Triangles.SelectMany(t => new[] { t.v0, t.v1, t.v2 }).ToArray(); Vertices = new VertexLayouts.CollisionLayout.Vertex[triangleMesh.Vertices.Count]; materials = triangleMesh.MaterialIndices.Select(m => (CollisionMaterials)m).ToArray(); for (int i = 0; i != triangleMesh.Vertices.Count; i++) { VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex(); vertex.Position = triangleMesh.Vertices[i]; vertex.Normal = new Vector3(0.0f); vertex.Colour = new Vector4(1.0f); Vertices[i] = vertex; } int materialIDX = 0; for (int i = 0; i != triangleMesh.Triangles.Count; i++) { switch (materials[materialIDX]) { case CollisionMaterials.GrassAndSnow: Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0, 0.4f, 0, 1.0f); Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0, 0.4f, 0, 1.0f); Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0, 0.4f, 0, 1.0f); break; case CollisionMaterials.Water: Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f); Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f); Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f); break; case CollisionMaterials.Gravel: case CollisionMaterials.Tarmac: case CollisionMaterials.Sidewalk: case CollisionMaterials.SidewalkEdge: Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); break; case CollisionMaterials.Mud: Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f); Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f); Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f); break; case CollisionMaterials.PlayerCollision: Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f); Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f); Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f); break; default: Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(1.0f); Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(1.0f); Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(1.0f); break; } materialIDX++; } CalculateNormals(); }
public void ConvertCollisionToRender(MeshData data) { DoRender = true; BoundingBox = new RenderBoundingBox(); BoundingBox.Init(data.BoundingBox); BoundingBox.DoRender = false; Indices = data.Indices; Vertices = new VertexLayouts.CollisionLayout.Vertex[data.Vertices.Length]; materials = data.Materials; for (int i = 0; i != data.Vertices.Length; i++) { VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex(); vertex.Position = data.Vertices[i]; vertex.Normal = new Vector3(0.0f); vertex.Colour = new Vector4(1.0f); Vertices[i] = vertex; } int materialIDX = 0; for (int i = 0; i != data.Indices.Length; i += 3) { switch (materials[materialIDX]) { case CollisionMaterials.GrassAndSnow: Vertices[data.Indices[i]].Colour = new Vector4(0, 0.4f, 0, 1.0f); Vertices[data.Indices[i + 1]].Colour = new Vector4(0, 0.4f, 0, 1.0f); Vertices[data.Indices[i + 2]].Colour = new Vector4(0, 0.4f, 0, 1.0f); break; case CollisionMaterials.Water: Vertices[data.Indices[i]].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f); Vertices[data.Indices[i + 1]].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f); Vertices[data.Indices[i + 2]].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f); break; case CollisionMaterials.Gravel: case CollisionMaterials.Tarmac: case CollisionMaterials.Sidewalk: case CollisionMaterials.SidewalkEdge: Vertices[data.Indices[i]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); Vertices[data.Indices[i + 1]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); Vertices[data.Indices[i + 2]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); break; case CollisionMaterials.Mud: Vertices[data.Indices[i]].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f); Vertices[data.Indices[i + 1]].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f); Vertices[data.Indices[i + 2]].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f); break; case CollisionMaterials.PlayerCollision: Vertices[data.Indices[i]].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f); Vertices[data.Indices[i + 1]].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f); Vertices[data.Indices[i + 2]].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f); break; default: Vertices[data.Indices[i]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); Vertices[data.Indices[i + 1]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); Vertices[data.Indices[i + 2]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f); break; } materialIDX++; } CalculateNormals(); }