public void AddTriangle(MK64.Track Track, MK64Model Model, ushort TriDef, int VtxBase, int MaterialId) { MK64Triangle t = new MK64Triangle(); int vtx1 = VtxBase + (TriDef & 0x1F); int vtx2 = VtxBase + ((TriDef >> 5) & 0x1F); int vtx3 = VtxBase + ((TriDef >> 10) & 0x1F); t.Vertices.Add(Track.VertexData[vtx1].Position); t.Vertices.Add(Track.VertexData[vtx2].Position); t.Vertices.Add(Track.VertexData[vtx3].Position); if (MaterialId != -1 && Model.Materials.ContainsKey(MaterialId) && Model.Materials[MaterialId].Texture != null) { t.TexCoords.Add(new Vector2(Track.VertexData[vtx1].TexCoord.X / ((float)Model.Materials[MaterialId].Texture.Width) * 0.75f, -Track.VertexData[vtx1].TexCoord.Y / ((float)Model.Materials[MaterialId].Texture.Height) * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx2].TexCoord.X / ((float)Model.Materials[MaterialId].Texture.Width) * 0.75f, -Track.VertexData[vtx2].TexCoord.Y / ((float)Model.Materials[MaterialId].Texture.Height) * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx3].TexCoord.X / ((float)Model.Materials[MaterialId].Texture.Width) * 0.75f, -Track.VertexData[vtx3].TexCoord.Y / ((float)Model.Materials[MaterialId].Texture.Height) * 0.75f)); } else { t.TexCoords.Add(new Vector2(Track.VertexData[vtx1].TexCoord.X / 32f * 0.75f, -Track.VertexData[vtx1].TexCoord.Y / 32f * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx2].TexCoord.X / 32f * 0.75f, -Track.VertexData[vtx2].TexCoord.Y / 32f * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx3].TexCoord.X / 32f * 0.75f, -Track.VertexData[vtx3].TexCoord.Y / 32f * 0.75f)); } t.VertexColors.Add(Track.VertexData[vtx1].VertexColor); t.VertexColors.Add(Track.VertexData[vtx2].VertexColor); t.VertexColors.Add(Track.VertexData[vtx3].VertexColor); t.MaterialId = MaterialId; Triangles.Add(t); }
public void AddTriangle(MK64.Track Track, MK64Model Model, ushort TriDef, int VtxBase, int MaterialId) { MK64Triangle t = new MK64Triangle(); int vtx1 = VtxBase + (TriDef & 0x1F); int vtx2 = VtxBase + ((TriDef >> 5) & 0x1F); int vtx3 = VtxBase + ((TriDef >> 10) & 0x1F); t.Vertices.Add(Track.VertexData[vtx1].Position); t.Vertices.Add(Track.VertexData[vtx2].Position); t.Vertices.Add(Track.VertexData[vtx3].Position); if (MaterialId != -1 && Model.Materials.ContainsKey(MaterialId) && Model.Materials[MaterialId].Texture != null) { t.TexCoords.Add(new Vector2(Track.VertexData[vtx1].TexCoord.X / ((float)Model.Materials[MaterialId].Texture.Width) * 0.75f, -Track.VertexData[vtx1].TexCoord.Y / ((float)Model.Materials[MaterialId].Texture.Height) * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx2].TexCoord.X / ((float)Model.Materials[MaterialId].Texture.Width) * 0.75f, -Track.VertexData[vtx2].TexCoord.Y / ((float)Model.Materials[MaterialId].Texture.Height) * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx3].TexCoord.X / ((float)Model.Materials[MaterialId].Texture.Width) * 0.75f, -Track.VertexData[vtx3].TexCoord.Y / ((float)Model.Materials[MaterialId].Texture.Height) * 0.75f)); } else { t.TexCoords.Add(new Vector2(Track.VertexData[vtx1].TexCoord.X / 32f * 0.75f, -Track.VertexData[vtx1].TexCoord.Y / 32f * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx2].TexCoord.X / 32f * 0.75f, -Track.VertexData[vtx2].TexCoord.Y / 32f * 0.75f)); t.TexCoords.Add(new Vector2(Track.VertexData[vtx3].TexCoord.X / 32f * 0.75f, -Track.VertexData[vtx3].TexCoord.Y / 32f * 0.75f)); } t.VertexColors.Add(Track.VertexData[vtx1].VertexColor); t.VertexColors.Add(Track.VertexData[vtx2].VertexColor); t.VertexColors.Add(Track.VertexData[vtx3].VertexColor); t.MaterialId = MaterialId; Triangles.Add(t); }