public static TextureCoordinates FromString(string str) { TextureCoordinates tc = new TextureCoordinates(); string[] data = str.Split('/'); tc.xscale = Utilities.StringToFloat(data[0]); tc.yscale = Utilities.StringToFloat(data[1]); tc.xshift = Utilities.StringToFloat(data[2]); tc.yshift = Utilities.StringToFloat(data[3]); tc.xflip = data[4] == "t"; tc.yflip = data[5] == "t"; return(tc); }
public void AddSide(Location normal, TextureCoordinates tc) { // TODO: IMPROVE! for (int i = 0; i < 6; i++) { Normals.Add(normal.ToOVector()); Colors.Add(new Vector4(1f, 1f, 1f, 1f)); Indices.Add((uint)Indices.Count); BoneIDs.Add(new Vector4(0, 0, 0, 0)); BoneWeights.Add(new Vector4(0f, 0f, 0f, 0f)); } float aX = (tc.xflip ? 1 : 0) + tc.xshift; float aY = (tc.yflip ? 1 : 0) + tc.yshift; float bX = (tc.xflip ? 0 : 1) * tc.xscale + tc.xshift; float bY = (tc.yflip ? 1 : 0) + tc.yshift; float cX = (tc.xflip ? 0 : 1) * tc.xscale + tc.xshift; float cY = (tc.yflip ? 0 : 1) * tc.yscale + tc.yshift; float dX = (tc.xflip ? 1 : 0) + tc.xshift; float dY = (tc.yflip ? 0 : 1) * tc.yscale + tc.yshift; float zero = -1; // Sssh if (normal.Z == 1) { // T1 TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(zero, zero, 1)); TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(zero, 1, 1)); TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(1, 1, 1)); // T2 TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(zero, zero, 1)); TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(1, 1, 1)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(1, zero, 1)); } else if (normal.Z == -1) { // T1 TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(1, 1, zero)); TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(zero, 1, zero)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(zero, zero, zero)); // T2 TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(1, zero, zero)); TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(1, 1, zero)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(zero, zero, zero)); } else if (normal.X == 1) { // T1 TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(1, 1, 1)); TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(1, 1, zero)); TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(1, zero, zero)); // T2 TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(1, zero, 1)); TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(1, 1, 1)); TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(1, zero, zero)); } else if (normal.X == -1) { // T1 TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(zero, zero, zero)); TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(zero, 1, zero)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(zero, 1, 1)); // T2 TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(zero, zero, zero)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(zero, 1, 1)); TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(zero, zero, 1)); } else if (normal.Y == 1) { // T1 TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(1, 1, 1)); TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(zero, 1, 1)); TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(zero, 1, zero)); // T2 TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(1, 1, zero)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(1, 1, 1)); TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(zero, 1, zero)); } else if (normal.Y == -1) { // T1 TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(zero, zero, zero)); TexCoords.Add(new Vector3(aX, aY, 0)); Vertices.Add(new Vector3(zero, zero, 1)); TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(1, zero, 1)); // T2 TexCoords.Add(new Vector3(dX, dY, 0)); Vertices.Add(new Vector3(zero, zero, zero)); TexCoords.Add(new Vector3(bX, bY, 0)); Vertices.Add(new Vector3(1, zero, 1)); TexCoords.Add(new Vector3(cX, cY, 0)); Vertices.Add(new Vector3(1, zero, zero)); } else { throw new Exception("Lazy code can't handle unique normals! Only axis-aligned, normalized normals!"); } }