diff --git a/src/main.cpp b/src/main.cpp index 38751f0..d62d866 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,27 +16,110 @@ static void render() { glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(0.5f, -0.5f, 0.0f); CHECK_GL(glEnd()); - /* glBegin(GL_TRIANGLES); */ - /* constexpr int n = 100; */ - /* constexpr float pi = 3.1415926535897f; */ - /* float radius = 0.5f; */ - /* float inner_radius = 0.25f; */ - /* static int x = 0; */ - /* x++; */ - /* if (x > n) */ - /* x -= n; */ - /* for (int i = 0; i < x; i++) { */ - /* float angle = i / (float)n * pi * 2; */ - /* float angle_next = (i + 1) / (float)n * pi * 2; */ - /* glVertex3f(0.0f, 0.0f, 0.0f); */ - /* glVertex3f(radius * sinf(angle), radius * cosf(angle), 0.0f); */ - /* glVertex3f(radius * sinf(angle_next), radius * cosf(angle_next), 0.0f); */ - /* glVertex3f(inner_radius * sinf(angle), inner_radius * cosf(angle), 0.0f); */ - /* glVertex3f(inner_radius * sinf(angle_next), inner_radius * cosf(angle_next), 0.0f); */ - /* glVertex3f(inner_radius * sinf(angle), inner_radius * cosf(angle), 0.0f); */ - /* glVertex3f(radius * sinf(angle_next), radius * cosf(angle_next), 0.0f); */ - /* } */ - /* CHECK_GL(glEnd()); */ +} + +static void render_round() { + glBegin(GL_TRIANGLES); + constexpr int n = 100; + constexpr float pi = 3.1415926535897f; + float radius = 0.5f; + float inner_radius = 0.25f; + static int x = 0; + x++; + if (x > n) + x -= n; + for (int i = 0; i < x; i++) { + float angle = i / (float)n * pi * 2; + float angle_next = (i + 1) / (float)n * pi * 2; + glVertex3f(0.0f, 0.0f, 0.0f); + glVertex3f(radius * sinf(angle), radius * cosf(angle), 0.0f); + glVertex3f(radius * sinf(angle_next), radius * cosf(angle_next), 0.0f); + glVertex3f(inner_radius * sinf(angle), inner_radius * cosf(angle), 0.0f); + glVertex3f(inner_radius * sinf(angle_next), inner_radius * cosf(angle_next), 0.0f); + glVertex3f(inner_radius * sinf(angle), inner_radius * cosf(angle), 0.0f); + glVertex3f(radius * sinf(angle_next), radius * cosf(angle_next), 0.0f); + } + CHECK_GL(glEnd()); +} + +static void render_opencv() { + glBegin(GL_TRIANGLES); + + constexpr int n = 360; + constexpr float pi = 3.1415926535897f; + constexpr float stopAngle = 11.0 / 12.0 * pi * 2; + float radius = 0.1f; + float far = 2 * radius; + float inner_radius = 0.06f; + /*static int x = 0; + x++; + if (x > n) + {return;}*/ + for (int i = 0; i < n; i++) { + float angle = i / (float)n * pi * 2; + float angle_next = (i + 1) / (float)n * pi * 2; + //glVertex3f(0.0f, 0.0f, 0.0f); + // Բ1 + if (0.f <= angle && 1.0f / 12.0f * pi * 2 > angle || + 11.0f / 12.0f * pi * 2 <= angle) + { + glColor3f(0.0f, 0.0f, 0.0f); + } + else { + glColor3f(0.0f, 0.0f, 1.0f); + } + glVertex3f(radius * sinf(angle) + far, radius * cosf(angle), 0.0f); + glVertex3f(radius * sinf(angle_next) + far, radius * cosf(angle_next), 0.0f); + glVertex3f(inner_radius * sinf(angle) + far, inner_radius * cosf(angle), 0.0f); + glVertex3f(inner_radius * sinf(angle_next) + far, inner_radius * cosf(angle_next), 0.0f); + glVertex3f(inner_radius * sinf(angle) + far, inner_radius * cosf(angle), 0.0f); + glVertex3f(radius * sinf(angle_next) + far, radius * cosf(angle_next), 0.0f); + + } + + for (int i = 0; i < n; i++) { + float angle = i / (float)n * pi * 2; + + float angle_next = (i + 1) / (float)n * pi * 2; + + // Բ2 + if (1.0f / 12.0f * pi * 2 < angle && 3.0f / 12.0f * pi * 2 > angle) + { + glColor3f(0.0f, 0.0f, 0.0f); + } + else { + glColor3f(0.0f, 1.0f, 0.0f); + } + ; + glVertex3f(radius * sinf(angle) - far, radius * cosf(angle), 0.0f); + glVertex3f(radius * sinf(angle_next) - far, radius * cosf(angle_next), 0.0f); + glVertex3f(inner_radius * sinf(angle) - far, inner_radius * cosf(angle), 0.0f); + glVertex3f(inner_radius * sinf(angle_next) - far, inner_radius * cosf(angle_next), 0.0f); + glVertex3f(inner_radius * sinf(angle) - far, inner_radius * cosf(angle), 0.0f); + glVertex3f(radius * sinf(angle_next) - far, radius * cosf(angle_next), 0.0f); + } + + for (int i = 0; i < n; i++) { + float angle = i / (float)n * pi * 2; + + float angle_next = (i + 1) / (float)n * pi * 2; + + // Բ3 + if (5.0f / 12.0f * pi * 2 < angle && 7.0f / 12.0f * pi * 2 > angle) + { + glColor3f(0.0f, 0.0f, 0.0f); + } + else { + glColor3f(1.0f, 0.0f, 0.0f); + } + glVertex3f(radius * sinf(angle) , radius * cosf(angle) + far, 0.0f); + glVertex3f(radius * sinf(angle_next) , radius * cosf(angle_next) + far, 0.0f); + glVertex3f(inner_radius * sinf(angle) , inner_radius * cosf(angle) + far, 0.0f); + glVertex3f(inner_radius * sinf(angle_next) , inner_radius * cosf(angle_next) + far, 0.0f); + glVertex3f(inner_radius * sinf(angle) , inner_radius * cosf(angle) + far, 0.0f); + glVertex3f(radius * sinf(angle_next) , radius * cosf(angle_next) + far, 0.0f); + } + CHECK_GL(glEnd()); } int main() { @@ -108,7 +191,7 @@ int main() { while (!glfwWindowShouldClose(window)) { // render graphics CHECK_GL(glClear(GL_COLOR_BUFFER_BIT)); - render(); + render_opencv(); // refresh screen glfwSwapBuffers(window); glfwPollEvents();