aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoursoir <chat@joursoir.net>2021-04-06 09:08:45 +0000
committerJoursoir <chat@joursoir.net>2021-04-06 09:08:45 +0000
commit52307df6461880423169e4deecd2c3e2f54509bb (patch)
tree3ab4eeb5c114d257be3a1620bb7b6980128f858f
parent3d6a072dc92f48fbc0e5392733d53e8c9af41581 (diff)
downloadspace-simulator-52307df6461880423169e4deecd2c3e2f54509bb.tar.gz
space-simulator-52307df6461880423169e4deecd2c3e2f54509bb.tar.bz2
space-simulator-52307df6461880423169e4deecd2c3e2f54509bb.zip
objects: fix bugs, add form circle
-rw-r--r--src/objects.cpp57
-rw-r--r--src/objects.hpp1
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 */