Golias Engine
A C++ 20 'game engine' built with SDL3 with wide platform support.
components.h
Go to the documentation of this file.
1 #pragma once
2 #include "stdafx.h"
4 
5 
10 struct Transform3D {
11  glm::vec3 position{0.0f};
12  glm::vec3 rotation{0.0f};
13  glm::vec3 scale{1.0f};
14 
15  glm::mat4 get_matrix() const;
16 };
17 
24 struct PhysicsBody {
25  Uint32 id = 0;
26 };
27 
28 
30  std::string name;
31 
32  std::shared_ptr<GpuBuffer> vertex_buffer;
33  std::shared_ptr<GpuBuffer> index_buffer;
34  std::shared_ptr<GpuVertexLayout> vertex_layout;
35 
36  int index_count = 0;
37 };
38 
39 class Shader;
40 
41 struct Material {
42  glm::vec3 albedo = glm::vec3(1.0f);
43  float metallic = 0.0f;
44  float roughness = 0.5f;
45  float ao = 1.0f;
46 
47  glm::vec3 emissive = glm::vec3(0.0f);
48  float emissive_strength = 1.0f;
49 
50  Uint32 albedo_map = 0;
51  Uint32 metallic_map = 0;
52  Uint32 roughness_map = 0;
53  Uint32 normal_map = 0;
54  Uint32 ao_map = 0;
55  Uint32 emissive_map = 0;
56 
57  bool use_albedo_map = false;
58  bool use_metallic_map = false;
59  bool use_roughness_map = false;
60  bool use_normal_map = false;
61  bool use_ao_map = false;
62  bool use_emissive_map = false;
63 
64  void bind(Shader* shader) const;
65 };
66 
80 struct Camera3D {
81  float yaw = -90.0f; // Z
82  float pitch = 0.0f;
83  float fov = 45.0f;
84  float speed = 5.0f;
85  float view_distance = 1000.f;
86 
87  explicit Camera3D() {
88  update_vectors();
89  }
90 
91  glm::mat4 get_view(const Transform3D& transform) const;
92 
93  glm::mat4 get_projection(int w, int h) const;
94 
95  void move_forward(Transform3D& transform, float dt);
96 
97  void move_backward(Transform3D& transform, float dt);
98 
99  void move_left(Transform3D& transform, float dt);
100 
101  void move_right(Transform3D& transform, float dt);
102 
103  void look_at(float xoffset, float yoffset, float sensitivity = 0.1f);
104 
105  void zoom(float yoffset);
106 
107 private:
108  glm::vec3 front{0.0f, 0.0f, -1.0f};
109  glm::vec3 up{};
110  glm::vec3 right{};
111  glm::vec3 world_up{0.0f, 1.0f, 0.0f};
112 
113  void update_vectors();
114 };
115 
116 
118  glm::vec3 direction{0.0f, -1.0f, 0.0f};
119  glm::vec3 color{1.0f};
120  float intensity = 1.0f;
121  bool castShadows = true;
122 
123  // Shadow projection
124  float shadowDistance = 50.0f;
125  float shadowNear = 1.0f;
126  float shadowFar = 100.0f;
127 
128  glm::mat4 get_light_space_matrix(glm::mat4 camera_view, glm::mat4 camera_proj) const;
129 
130  glm::mat4 get_light_space_matrix() const;
131 };
132 
133 struct SpotLight {
134  glm::vec3 direction{0.0f, -1.0f, 0.0f};
135  glm::vec3 color{1.0f};
136  float intensity = 1.0f;
137  float cutOff = 12.5f;
138  float outerCutOff = 17.5f;
139 };
140 
141 
142 struct Model {
143  std::string path;
144  std::vector<MeshInstance3D> meshes;
145  std::vector<Material> materials;
146 };
147 
148 struct MeshRef {
150 };
151 
152 struct MaterialRef {
154 };
Shader Abstract class.
Definition: base_struct.h:160
3D Camera
Definition: components.h:80
void move_right(Transform3D &transform, float dt)
Definition: components.cpp:105
void move_left(Transform3D &transform, float dt)
Definition: components.cpp:101
glm::mat4 get_projection(int w, int h) const
Definition: components.cpp:89
float yaw
Definition: components.h:81
float view_distance
Definition: components.h:85
void look_at(float xoffset, float yoffset, float sensitivity=0.1f)
Definition: components.cpp:109
void move_forward(Transform3D &transform, float dt)
Definition: components.cpp:93
float fov
Definition: components.h:83
Camera3D()
Definition: components.h:87
void zoom(float yoffset)
Definition: components.cpp:117
float pitch
Definition: components.h:82
float speed
Definition: components.h:84
void move_backward(Transform3D &transform, float dt)
Definition: components.cpp:97
glm::mat4 get_view(const Transform3D &transform) const
Definition: components.cpp:85
Definition: components.h:117
glm::vec3 color
Definition: components.h:119
glm::vec3 direction
Definition: components.h:118
glm::mat4 get_light_space_matrix() const
Definition: components.cpp:171
float shadowDistance
Definition: components.h:124
float intensity
Definition: components.h:120
float shadowFar
Definition: components.h:126
bool castShadows
Definition: components.h:121
float shadowNear
Definition: components.h:125
Definition: components.h:152
const Material * material
Definition: components.h:153
Definition: components.h:41
float ao
Definition: components.h:45
Uint32 ao_map
Definition: components.h:54
Uint32 normal_map
Definition: components.h:53
Uint32 albedo_map
Definition: components.h:50
bool use_ao_map
Definition: components.h:61
float metallic
Definition: components.h:43
glm::vec3 albedo
Definition: components.h:42
float emissive_strength
Definition: components.h:48
Uint32 metallic_map
Definition: components.h:51
Uint32 emissive_map
Definition: components.h:55
void bind(Shader *shader) const
Definition: components.cpp:27
bool use_roughness_map
Definition: components.h:59
bool use_normal_map
Definition: components.h:60
glm::vec3 emissive
Ambient Occlusion.
Definition: components.h:47
float roughness
Definition: components.h:44
Uint32 roughness_map
Definition: components.h:52
bool use_albedo_map
Definition: components.h:57
bool use_emissive_map
Definition: components.h:62
bool use_metallic_map
Definition: components.h:58
Definition: components.h:29
std::shared_ptr< GpuBuffer > vertex_buffer
Definition: components.h:32
std::string name
Definition: components.h:30
int index_count
Definition: components.h:36
std::shared_ptr< GpuBuffer > index_buffer
Definition: components.h:33
std::shared_ptr< GpuVertexLayout > vertex_layout
Definition: components.h:34
Definition: components.h:148
const MeshInstance3D * mesh
Definition: components.h:149
Definition: components.h:142
std::string path
Definition: components.h:143
std::vector< Material > materials
Definition: components.h:145
std::vector< MeshInstance3D > meshes
Definition: components.h:144
Represents a physics body for 2D or 3D physics simulations. Jolt Physics -> BodyID Box2D -> b2BodyId.
Definition: components.h:24
Definition: components.h:133
float intensity
Definition: components.h:136
float cutOff
Definition: components.h:137
glm::vec3 color
Definition: components.h:135
float outerCutOff
Definition: components.h:138
glm::vec3 direction
Definition: components.h:134
Represents material properties for 3D rendering.
Definition: components.h:10
glm::vec3 position
Definition: components.h:11
glm::vec3 scale
Definition: components.h:13
glm::vec3 rotation
Definition: components.h:12
glm::mat4 get_matrix() const
Definition: components.cpp:5