This repository was archived by the owner on May 28, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject_collection.h
78 lines (68 loc) · 2.41 KB
/
object_collection.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#ifndef OBJECT_COLLECTION_H
#define OBJECT_COLLECTION_H
#include <SDL2/SDL.h>
#include "point_controller.h"
#include "color_helper.h"
class triangle_3d
{
private:
point_3d points;
rgb_color color;
public:
triangle_3d();
triangle_3d(point_3d source_points, rgb_color source_color);
point_3d get_points();
rgb_color get_color();
void set_points(point_3d source_points);
void set_color(rgb_color source_color);
};
class object_model
{
private:
std::vector<point_3d> vertices;
std::vector<triangle_3d> triangles; // triangles are stored with indexes of vertices
public:
object_model();
object_model(std::vector<point_3d> source_vertices, std::vector<triangle_3d> source_triangles);
std::vector<point_3d> get_vertices();
std::vector<triangle_3d> get_triangles();
void set_vertices(std::vector<point_3d> source_vertices);
void set_triangles(std::vector<triangle_3d> source_triangles);
};
struct transform {
float scale;
float rotation; // rotation around the Y axis
point_3d translation;
};
class object_instance
{
private:
object_model model;
struct transform transformation;
public:
object_instance(object_model source_model, struct transform source_transformation);
object_model get_model();
struct transform get_transformation();
void set_model(object_model source_model);
void set_transformation(struct transform source_transformation);
};
// object_model cube();
// render a 3D triangle using a index of projected vertices
//
// @param renderer SDL renderer to use when drawing
// @param target_triangle 3-dimensional triangle to render
// @param projected index of projected vertices
void render_triangle(SDL_Renderer *renderer, point_3d target_triangle, point_2d projected[]);
// render a 3D model
//
// @param renderer SDL renderer to use when drawing
// @param target_model model to render
// @param target_transformation transformation of the model's instance
void render_model(SDL_Renderer *renderer, object_model target_model, float target_transformation[4][4]);
// render a 3D scene
// note: scene linked list not yet implemented: renders object_instances
//
// @param renderer SDL renderer to use when drawing
// @param target_instance instance to render
void render_scene(SDL_Renderer *renderer, object_instance target_instance);
#endif // OBJECT_COLLECTION_H