From b4239dcfe8e1fa0ca074ba31d78dd7bb699cafcd Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 27 Jan 2024 10:58:39 +0800 Subject: [PATCH] geometry/circle: add texture coordinates Blender also generated a different triangulation. --- example/clipping2.cpp | 2 +- geometry/circle.hpp | 131 ++++++++++++++++++++++++++---------------- geometry/circle.obj | 124 ++++++++++++++++++++++++--------------- 3 files changed, 162 insertions(+), 95 deletions(-) diff --git a/example/clipping2.cpp b/example/clipping2.cpp index c632979..0460c3c 100644 --- a/example/clipping2.cpp +++ b/example/clipping2.cpp @@ -108,7 +108,7 @@ void transform1(ta_parameter_writer& parameter, void transform(ta_parameter_writer& parameter, const vec3 * vertices, - const face_vn& face, + const face_vtn& face, const vec4& color, const vec3& position, const float theta, diff --git a/geometry/circle.hpp b/geometry/circle.hpp index 6c2d50b..579ab57 100644 --- a/geometry/circle.hpp +++ b/geometry/circle.hpp @@ -4,22 +4,6 @@ namespace circle { constexpr vec3 vertices[] = { - { 0.000000f, 0.000000f, -1.000000f }, - { -0.195090f, 0.000000f, -0.980785f }, - { -0.382683f, 0.000000f, -0.923880f }, - { -0.555570f, 0.000000f, -0.831470f }, - { -0.707107f, 0.000000f, -0.707107f }, - { -0.831470f, 0.000000f, -0.555570f }, - { -0.923880f, 0.000000f, -0.382683f }, - { -0.980785f, 0.000000f, -0.195090f }, - { -1.000000f, 0.000000f, 0.000000f }, - { -0.980785f, 0.000000f, 0.195090f }, - { -0.923880f, 0.000000f, 0.382683f }, - { -0.831470f, 0.000000f, 0.555570f }, - { -0.707107f, 0.000000f, 0.707107f }, - { -0.555570f, 0.000000f, 0.831470f }, - { -0.382683f, 0.000000f, 0.923880f }, - { -0.195090f, 0.000000f, 0.980785f }, { 0.000000f, 0.000000f, 1.000000f }, { 0.195090f, 0.000000f, 0.980785f }, { 0.382683f, 0.000000f, 0.923880f }, @@ -36,45 +20,96 @@ namespace circle { { 0.555570f, 0.000000f, -0.831470f }, { 0.382683f, 0.000000f, -0.923880f }, { 0.195090f, 0.000000f, -0.980785f }, + { 0.000000f, 0.000000f, -1.000000f }, + { -0.195090f, 0.000000f, -0.980785f }, + { -0.382683f, 0.000000f, -0.923880f }, + { -0.555570f, 0.000000f, -0.831470f }, + { -0.707107f, 0.000000f, -0.707107f }, + { -0.831470f, 0.000000f, -0.555570f }, + { -0.923880f, 0.000000f, -0.382683f }, + { -0.980785f, 0.000000f, -0.195090f }, + { -1.000000f, 0.000000f, 0.000000f }, + { -0.980785f, 0.000000f, 0.195090f }, + { -0.923880f, 0.000000f, 0.382683f }, + { -0.831470f, 0.000000f, 0.555570f }, + { -0.707107f, 0.000000f, 0.707107f }, + { -0.555570f, 0.000000f, 0.831470f }, + { -0.382683f, 0.000000f, 0.923880f }, + { -0.195090f, 0.000000f, 0.980785f }, + }; + + constexpr vec2 texture[] = { + { 0.450764f, 0.000100f }, + { 0.999900f, 0.450764f }, + { 0.549236f, 0.999900f }, + { 0.450764f, 0.999900f }, + { 0.181332f, 0.888297f }, + { 0.354184f, 0.980689f }, + { 0.263208f, 0.943006f }, + { 0.111702f, 0.818668f }, + { 0.056994f, 0.736791f }, + { 0.019311f, 0.645815f }, + { 0.000100f, 0.549236f }, + { 0.000100f, 0.450764f }, + { 0.111702f, 0.181332f }, + { 0.019311f, 0.354184f }, + { 0.056994f, 0.263208f }, + { 0.181332f, 0.111702f }, + { 0.263209f, 0.056994f }, + { 0.354185f, 0.019311f }, + { 0.549236f, 0.000100f }, + { 0.818668f, 0.111702f }, + { 0.645816f, 0.019311f }, + { 0.736792f, 0.056994f }, + { 0.888298f, 0.181332f }, + { 0.943006f, 0.263209f }, + { 0.980689f, 0.354185f }, + { 0.999900f, 0.549236f }, + { 0.888298f, 0.818668f }, + { 0.980689f, 0.645815f }, + { 0.943006f, 0.736791f }, + { 0.818668f, 0.888298f }, + { 0.736791f, 0.943006f }, + { 0.645815f, 0.980689f }, }; constexpr vec3 normals[] = { { -0.000000f, 1.000000f, -0.000000f }, }; - constexpr face_vn faces[] = { - {{31, 0}, { 0, 0}, { 1, 0}}, - {{30, 0}, {31, 0}, { 1, 0}}, - {{20, 0}, {13, 0}, {18, 0}}, - {{ 1, 0}, { 2, 0}, { 3, 0}}, - {{29, 0}, { 1, 0}, { 3, 0}}, - {{28, 0}, {29, 0}, { 3, 0}}, - {{29, 0}, {30, 0}, { 1, 0}}, - {{ 3, 0}, { 4, 0}, { 5, 0}}, - {{27, 0}, { 3, 0}, { 5, 0}}, - {{26, 0}, {27, 0}, { 5, 0}}, - {{26, 0}, { 5, 0}, { 6, 0}}, - {{25, 0}, {26, 0}, { 6, 0}}, - {{25, 0}, { 6, 0}, { 7, 0}}, - {{24, 0}, {25, 0}, { 7, 0}}, - {{24, 0}, { 7, 0}, { 8, 0}}, - {{23, 0}, {24, 0}, { 8, 0}}, - {{23, 0}, { 8, 0}, { 9, 0}}, - {{22, 0}, {23, 0}, { 9, 0}}, - {{22, 0}, { 9, 0}, {10, 0}}, - {{21, 0}, {22, 0}, {10, 0}}, - {{21, 0}, {10, 0}, {11, 0}}, - {{20, 0}, {21, 0}, {11, 0}}, - {{12, 0}, {13, 0}, {11, 0}}, - {{27, 0}, {28, 0}, { 3, 0}}, - {{13, 0}, {20, 0}, {11, 0}}, - {{19, 0}, {20, 0}, {18, 0}}, - {{18, 0}, {13, 0}, {14, 0}}, - {{17, 0}, {18, 0}, {14, 0}}, - {{17, 0}, {14, 0}, {15, 0}}, - {{16, 0}, {17, 0}, {15, 0}}, + constexpr face_vtn faces[] = { + {{16, 0, 0}, {24, 1, 0}, { 0, 2, 0}}, + {{ 0, 2, 0}, { 1, 3, 0}, { 4, 4, 0}}, + {{ 1, 3, 0}, { 2, 5, 0}, { 4, 4, 0}}, + {{ 2, 5, 0}, { 3, 6, 0}, { 4, 4, 0}}, + {{ 4, 4, 0}, { 5, 7, 0}, { 6, 8, 0}}, + {{ 6, 8, 0}, { 7, 9, 0}, { 4, 4, 0}}, + {{ 7, 9, 0}, { 8, 10, 0}, { 4, 4, 0}}, + {{ 8, 10, 0}, { 9, 11, 0}, {12, 12, 0}}, + {{ 9, 11, 0}, {10, 13, 0}, {12, 12, 0}}, + {{10, 13, 0}, {11, 14, 0}, {12, 12, 0}}, + {{12, 12, 0}, {13, 15, 0}, {14, 16, 0}}, + {{14, 16, 0}, {15, 17, 0}, {12, 12, 0}}, + {{15, 17, 0}, {16, 0, 0}, {12, 12, 0}}, + {{16, 0, 0}, {17, 18, 0}, {20, 19, 0}}, + {{17, 18, 0}, {18, 20, 0}, {20, 19, 0}}, + {{18, 20, 0}, {19, 21, 0}, {20, 19, 0}}, + {{20, 19, 0}, {21, 22, 0}, {22, 23, 0}}, + {{22, 23, 0}, {23, 24, 0}, {20, 19, 0}}, + {{23, 24, 0}, {24, 1, 0}, {20, 19, 0}}, + {{24, 1, 0}, {25, 25, 0}, {28, 26, 0}}, + {{25, 25, 0}, {26, 27, 0}, {28, 26, 0}}, + {{26, 27, 0}, {27, 28, 0}, {28, 26, 0}}, + {{28, 26, 0}, {29, 29, 0}, {30, 30, 0}}, + {{30, 30, 0}, {31, 31, 0}, {28, 26, 0}}, + {{31, 31, 0}, { 0, 2, 0}, {28, 26, 0}}, + {{ 0, 2, 0}, { 4, 4, 0}, { 8, 10, 0}}, + {{ 8, 10, 0}, {12, 12, 0}, {16, 0, 0}}, + {{16, 0, 0}, {20, 19, 0}, {24, 1, 0}}, + {{24, 1, 0}, {28, 26, 0}, { 0, 2, 0}}, + {{ 0, 2, 0}, { 8, 10, 0}, {16, 0, 0}}, }; - constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face_vn)); + constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face_vtn)); } diff --git a/geometry/circle.obj b/geometry/circle.obj index a932d98..f4ffb52 100644 --- a/geometry/circle.obj +++ b/geometry/circle.obj @@ -1,22 +1,6 @@ # Blender 3.3.6 # www.blender.org o Circle -v 0.000000 0.000000 -1.000000 -v -0.195090 0.000000 -0.980785 -v -0.382683 0.000000 -0.923880 -v -0.555570 0.000000 -0.831470 -v -0.707107 0.000000 -0.707107 -v -0.831470 0.000000 -0.555570 -v -0.923880 0.000000 -0.382683 -v -0.980785 0.000000 -0.195090 -v -1.000000 0.000000 0.000000 -v -0.980785 0.000000 0.195090 -v -0.923880 0.000000 0.382683 -v -0.831470 0.000000 0.555570 -v -0.707107 0.000000 0.707107 -v -0.555570 0.000000 0.831470 -v -0.382683 0.000000 0.923880 -v -0.195090 0.000000 0.980785 v 0.000000 0.000000 1.000000 v 0.195090 0.000000 0.980785 v 0.382683 0.000000 0.923880 @@ -33,35 +17,83 @@ v 0.707107 0.000000 -0.707107 v 0.555570 0.000000 -0.831470 v 0.382683 0.000000 -0.923880 v 0.195090 0.000000 -0.980785 +v 0.000000 0.000000 -1.000000 +v -0.195090 0.000000 -0.980785 +v -0.382683 0.000000 -0.923880 +v -0.555570 0.000000 -0.831470 +v -0.707107 0.000000 -0.707107 +v -0.831470 0.000000 -0.555570 +v -0.923880 0.000000 -0.382683 +v -0.980785 0.000000 -0.195090 +v -1.000000 0.000000 0.000000 +v -0.980785 0.000000 0.195090 +v -0.923880 0.000000 0.382683 +v -0.831470 0.000000 0.555570 +v -0.707107 0.000000 0.707107 +v -0.555570 0.000000 0.831470 +v -0.382683 0.000000 0.923880 +v -0.195090 0.000000 0.980785 vn -0.0000 1.0000 -0.0000 +vt 0.549236 0.999900 +vt 0.450764 0.999900 +vt 0.354184 0.980689 +vt 0.263208 0.943006 +vt 0.181332 0.888297 +vt 0.111702 0.818668 +vt 0.056994 0.736791 +vt 0.019311 0.645815 +vt 0.000100 0.549236 +vt 0.000100 0.450764 +vt 0.019311 0.354184 +vt 0.056994 0.263208 +vt 0.111702 0.181332 +vt 0.181332 0.111702 +vt 0.263209 0.056994 +vt 0.354185 0.019311 +vt 0.450764 0.000100 +vt 0.549236 0.000100 +vt 0.645816 0.019311 +vt 0.736792 0.056994 +vt 0.818668 0.111702 +vt 0.888298 0.181332 +vt 0.943006 0.263209 +vt 0.980689 0.354185 +vt 0.999900 0.450764 +vt 0.999900 0.549236 +vt 0.980689 0.645815 +vt 0.943006 0.736791 +vt 0.888298 0.818668 +vt 0.818668 0.888298 +vt 0.736791 0.943006 +vt 0.645815 0.980689 s 0 -f 32//1 1//1 2//1 -f 31//1 32//1 2//1 -f 21//1 14//1 19//1 -f 2//1 3//1 4//1 -f 30//1 2//1 4//1 -f 29//1 30//1 4//1 -f 30//1 31//1 2//1 -f 4//1 5//1 6//1 -f 28//1 4//1 6//1 -f 27//1 28//1 6//1 -f 27//1 6//1 7//1 -f 26//1 27//1 7//1 -f 26//1 7//1 8//1 -f 25//1 26//1 8//1 -f 25//1 8//1 9//1 -f 24//1 25//1 9//1 -f 24//1 9//1 10//1 -f 23//1 24//1 10//1 -f 23//1 10//1 11//1 -f 22//1 23//1 11//1 -f 22//1 11//1 12//1 -f 21//1 22//1 12//1 -f 13//1 14//1 12//1 -f 28//1 29//1 4//1 -f 14//1 21//1 12//1 -f 20//1 21//1 19//1 -f 19//1 14//1 15//1 -f 18//1 19//1 15//1 -f 18//1 15//1 16//1 -f 17//1 18//1 16//1 +f 17/17/1 25/25/1 1/1/1 +f 1/1/1 2/2/1 5/5/1 +f 2/2/1 3/3/1 5/5/1 +f 3/3/1 4/4/1 5/5/1 +f 5/5/1 6/6/1 7/7/1 +f 7/7/1 8/8/1 5/5/1 +f 8/8/1 9/9/1 5/5/1 +f 9/9/1 10/10/1 13/13/1 +f 10/10/1 11/11/1 13/13/1 +f 11/11/1 12/12/1 13/13/1 +f 13/13/1 14/14/1 15/15/1 +f 15/15/1 16/16/1 13/13/1 +f 16/16/1 17/17/1 13/13/1 +f 17/17/1 18/18/1 21/21/1 +f 18/18/1 19/19/1 21/21/1 +f 19/19/1 20/20/1 21/21/1 +f 21/21/1 22/22/1 23/23/1 +f 23/23/1 24/24/1 21/21/1 +f 24/24/1 25/25/1 21/21/1 +f 25/25/1 26/26/1 29/29/1 +f 26/26/1 27/27/1 29/29/1 +f 27/27/1 28/28/1 29/29/1 +f 29/29/1 30/30/1 31/31/1 +f 31/31/1 32/32/1 29/29/1 +f 32/32/1 1/1/1 29/29/1 +f 1/1/1 5/5/1 9/9/1 +f 9/9/1 13/13/1 17/17/1 +f 17/17/1 21/21/1 25/25/1 +f 25/25/1 29/29/1 1/1/1 +f 1/1/1 9/9/1 17/17/1