예제 #1
0
        void FindBackMirrored(List <Vec3> uvs, UVSpecs specs)
        {
            switch (specs.Rotation)
            {
            case 4:
                uvs.Add(new Vec3(0, 0, specs.Texture));
                uvs.Add(new Vec3(specs.H, 0, specs.Texture));
                uvs.Add(new Vec3(specs.H, specs.W, specs.Texture));
                uvs.Add(new Vec3(0, specs.W, specs.Texture));
                break;

            case 5:
                uvs.Add(new Vec3(0, specs.H, specs.Texture));
                uvs.Add(new Vec3(0, 0, specs.Texture));
                uvs.Add(new Vec3(specs.W, 0, specs.Texture));
                uvs.Add(new Vec3(specs.W, specs.H, specs.Texture));
                break;

            case 6:
                uvs.Add(new Vec3(specs.H, specs.W, specs.Texture));
                uvs.Add(new Vec3(0, specs.W, specs.Texture));
                uvs.Add(new Vec3(0, 0, specs.Texture));
                uvs.Add(new Vec3(specs.H, 0, specs.Texture));
                break;

            case 7:
                uvs.Add(new Vec3(specs.W, 0, specs.Texture));
                uvs.Add(new Vec3(specs.W, specs.H, specs.Texture));
                uvs.Add(new Vec3(0, specs.H, specs.Texture));
                uvs.Add(new Vec3(0, 0, specs.Texture));
                break;
            }
        }
예제 #2
0
        void FindBackNormal(List <Vec3> uvs, UVSpecs specs)
        {
            switch (specs.Rotation)
            {
            case 0:
                uvs.Add(new Vec3(specs.H, 0, specs.Texture));
                uvs.Add(new Vec3(0, 0, specs.Texture));
                uvs.Add(new Vec3(0, specs.W, specs.Texture));
                uvs.Add(new Vec3(specs.H, specs.W, specs.Texture));
                break;

            case 1:
                uvs.Add(new Vec3(specs.W, specs.H, specs.Texture));
                uvs.Add(new Vec3(specs.W, 0, specs.Texture));
                uvs.Add(new Vec3(0, 0, specs.Texture));
                uvs.Add(new Vec3(0, specs.H, specs.Texture));
                break;

            case 2:
                uvs.Add(new Vec3(0, specs.W, specs.Texture));
                uvs.Add(new Vec3(specs.H, specs.W, specs.Texture));
                uvs.Add(new Vec3(specs.H, 0, specs.Texture));
                uvs.Add(new Vec3(0, 0, specs.Texture));
                break;

            case 3:
                uvs.Add(new Vec3(0, 0, specs.Texture));
                uvs.Add(new Vec3(0, specs.H, specs.Texture));
                uvs.Add(new Vec3(specs.W, specs.H, specs.Texture));
                uvs.Add(new Vec3(specs.W, 0, specs.Texture));
                break;
            }
        }
예제 #3
0
 void FindFront(List <Vec3> uvs, UVSpecs specs)
 {
     if (specs.Rotation < 4)
     {
         FindFrontNormal(uvs, specs);
     }
     else
     {
         FindFrontMirrored(uvs, specs);
     }
 }
예제 #4
0
 void FindBack(List <Vec3> uvs, UVSpecs specs)
 {
     if (specs.Rotation < 4)
     {
         FindBackNormal(uvs, specs);
     }
     else
     {
         FindBackMirrored(uvs, specs);
     }
 }
예제 #5
0
 void CorrectYFaces(ref UVSpecs specs)
 {
     // Flip top and bottom sides.
     if (specs.Side == 3)
     {
         specs.Side = 2;
     }
     else if (specs.Side == 2)
     {
         specs.Side = 3;
     }
 }
예제 #6
0
        void ValidateQuad(UVSpecs specs)
        {
            if (specs.Side < 0 || specs.Side > 5)
            {
                throw new System.ArgumentException($"Unknown side {specs.Side}!");
            }

            if (specs.Rotation < 0 || specs.Rotation > 7)
            {
                throw new System.ArgumentException($"Unknown rotation {specs.Rotation}!");
            }
        }
예제 #7
0
        /// <summary>
        /// Retrieves the given uv coords and stores them in the uv list.
        /// </summary>
        /// <param name="uvs">The list of UVs to write to.</param>
        /// <param name="specs">The quad uv information.</param>
        public void Find(List <Vec3> uvs, UVSpecs specs)
        {
            ValidateQuad(specs);
            CorrectYFaces(ref specs);

            if (specs.Side % 2 == 0)
            {
                FindFront(uvs, specs);
            }
            else
            {
                FindBack(uvs, specs);
            }
        }