Ejemplo n.º 1
0
            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);
            }
Ejemplo n.º 2
0
 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);
 }