示例#1
0
        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);
        }
示例#2
0
        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!");
            }
        }