From 52307df6461880423169e4deecd2c3e2f54509bb Mon Sep 17 00:00:00 2001 From: Joursoir Date: Tue, 6 Apr 2021 09:08:45 +0000 Subject: objects: fix bugs, add form circle --- src/objects.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++----------- src/objects.hpp | 1 + 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/objects.cpp b/src/objects.cpp index 4400a2d..b1b24bb 100644 --- a/src/objects.cpp +++ b/src/objects.cpp @@ -11,14 +11,14 @@ using namespace glm; const int cube_num_v = 8; Vertex cube_vertices[cube_num_v] = { // first 4 - up edge - { vec3(-0.5f, -0.5f, -0.5f), vec2(0.0f, 0.0f) }, - { vec3(0.5f, -0.5f, -0.5f), vec2(0.0f, 0.0f) }, - { vec3(0.5f, 0.5f, -0.5f), vec2(0.0f, 0.0f) }, - { vec3(-0.5f, 0.5f, -0.5f), vec2(0.0f, 0.0f) }, - { vec3(0.5f, 0.5f, 0.5f), vec2(0.0f, 0.0f) }, - { vec3(-0.5f, 0.5f, 0.5f), vec2(0.0f, 0.0f) }, - { vec3(-0.5f, -0.5f, 0.5f), vec2(0.0f, 0.0f) }, - { vec3(0.5f, -0.5f, 0.5f), vec2(0.0f, 0.0f) } + { vec3(-1.0f, -1.0f, -1.0f), vec2(0.0f, 0.0f) }, + { vec3(1.0f, -1.0f, -1.0f), vec2(0.0f, 0.0f) }, + { vec3(1.0f, 1.0f, -1.0f), vec2(0.0f, 0.0f) }, + { vec3(-1.0f, 1.0f, -1.0f), vec2(0.0f, 0.0f) }, + { vec3(1.0f, 1.0f, 1.0f), vec2(0.0f, 0.0f) }, + { vec3(-1.0f, 1.0f, 1.0f), vec2(0.0f, 0.0f) }, + { vec3(-1.0f, -1.0f, 1.0f), vec2(0.0f, 0.0f) }, + { vec3(1.0f, -1.0f, 1.0f), vec2(0.0f, 0.0f) } }; const int cube_num_i = 12 * 3; @@ -33,13 +33,13 @@ GLuint cube_indices[cube_num_i] = { 0, 1, 7, 1, 4, 7, // right edge 1, 2, 4, - 4, 5, 7, // down edge + 4, 5, 6, // down edge 4, 6, 7 }; Mesh *form_cube() { - return new Mesh(cube_vertices, cube_num_v, cube_indices, cube_num_i); + return new Mesh(GL_TRIANGLES, cube_vertices, cube_num_v, cube_indices, cube_num_i); } Mesh *form_sphere(int longitude_count, int latitude_count) @@ -114,10 +114,45 @@ Mesh *form_sphere(int longitude_count, int latitude_count) } } - Mesh *sphere = new Mesh(sphere_vertices, sphere_num_v, + Mesh *sphere = new Mesh(GL_TRIANGLES, sphere_vertices, sphere_num_v, sphere_indices, sphere_num_i); delete[] sphere_vertices; delete[] sphere_indices; return sphere; } + +Mesh *form_circle(int angle_count) +{ + int i, idx, idy; + float x, y, z; + float radius = 1.0f; + float angle_step = 2 * PI / angle_count; + float angle; + + Vertex *circle_vertices = new Vertex[angle_count]; + GLuint *circle_indices = new GLuint[angle_count * 2]; + for(i = 0, idx = 0, idy = 0; i < angle_count; i++) { + angle = i * angle_step; + x = radius * cosf(angle); + y = 0; + z = radius * sinf(angle); + circle_vertices[idx].pos_coords = glm::vec3(x, y, z); + circle_vertices[idx].tex_coords = glm::vec2(0, 0); + idx++; + + if(i != 0) { + circle_indices[idy++] = i-1; + circle_indices[idy++] = i; + } + } + circle_indices[idy++] = i-1; + circle_indices[idy] = 0; + + Mesh *circle = new Mesh(GL_LINES, circle_vertices, angle_count, + circle_indices, angle_count * 2); + + delete[] circle_vertices; + delete[] circle_indices; + return circle; +} \ No newline at end of file diff --git a/src/objects.hpp b/src/objects.hpp index 74ba884..3d816b9 100644 --- a/src/objects.hpp +++ b/src/objects.hpp @@ -5,5 +5,6 @@ class Mesh; Mesh *form_cube(); Mesh *form_sphere(int longitude_count, int latitude_count); +Mesh *form_circle(int angle_count); #endif /* ENGINE_OBJECTS_H */ -- cgit v1.2.3-18-g5258