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; } }
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; } }
void FindFront(List <Vec3> uvs, UVSpecs specs) { if (specs.Rotation < 4) { FindFrontNormal(uvs, specs); } else { FindFrontMirrored(uvs, specs); } }
void FindBack(List <Vec3> uvs, UVSpecs specs) { if (specs.Rotation < 4) { FindBackNormal(uvs, specs); } else { FindBackMirrored(uvs, specs); } }
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; } }
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}!"); } }
/// <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); } }