PCG-FPS  v2 m0.22.4
Simple First Person Shooter with Procedurally Generated Level
Mesh.h
Go to the documentation of this file.
1 #ifndef SKR_FPS2_RENDERER_OPENGL_MESH_H
2 #define SKR_FPS2_RENDERER_OPENGL_MESH_H
3 
4 #include "..\..\pch.h"
5 
6 #include <vector>
7 
8 #include "Texture.h"
9 #include "Shader.h"
10 #include "pcg\Definitions.h"
11 
12 namespace skr
13 {
14 namespace fps2
15 {
16 namespace Renderer
17 {
18 namespace OpenGL
19 {
22  struct Vertex
23  {
24  glm::vec3 Position;
25  glm::vec3 Normal;
26  glm::vec2 TexCoords;
27  glm::vec3 Tangent;
28  glm::vec3 Bitangent;
29  };
30 
33  class Mesh
34  {
35  private:
36  std::vector<Vertex> _vertices;
37  std::vector<uint32_t> _indices;
38 
39  uint32_t _vao;
40  uint32_t _vbo;
41  uint32_t _ebo;
42 
43  public:
44  std::vector<Texture> _textures;
45 
47  glm::vec3 _drawColor;
48 
49  public:
56  Mesh(std::vector<Vertex> vertices, std::vector<uint32_t> indices, std::vector<Texture> textures, glm::vec3 drawColor = glm::vec3(1.0f));
57 
61  Mesh(skr::pcg::Face face);
62 
64  ~Mesh();
65 
71  void Draw(Shader shader, uint32_t depthMap = 0, bool useMaterialTextures = false) const;
72 
76  void DrawGeometry() const;
77 
80  void SetDrawColor(glm::vec3 color);
81 
86  void GetExtremePositions(glm::vec3& max, glm::vec3& min);
87 
88  private:
93  void DrawPrepareTextures(Shader shader, uint32_t depthMap = 0, bool useMaterialTextures = false) const;
94 
96  void SetupMeshIndexed();
97 
99  void SetupMeshRawTriangles();
100 
112  std::array<glm::vec3, 2> CalculateTangentAndBitangentForTriangle(glm::vec3 pos1, glm::vec3 pos2, glm::vec3 pos3, glm::vec2 tex1, glm::vec2 tex2, glm::vec2 tex3, glm::vec3 normal);
113 
121  std::array<glm::vec3, 2> CalculateTangentAndBitangentForTriangle(std::array<glm::vec3, 3> positions, std::array<glm::vec2, 3> texcoords, glm::vec3 normal);
122  };
123 
124 }
125 }
126 }
127 }
128 
129 #endif
skr::fps2::Renderer::OpenGL::Mesh::_drawColor
glm::vec3 _drawColor
Definition: Mesh.h:47
skr::fps2::Renderer::OpenGL::Mesh::_vbo
uint32_t _vbo
vertex buffer object
Definition: Mesh.h:40
skr::fps2::Renderer::OpenGL::Vertex::Bitangent
glm::vec3 Bitangent
bitangent
Definition: Mesh.h:28
skr::fps2::Renderer::OpenGL::Mesh::CalculateTangentAndBitangentForTriangle
std::array< glm::vec3, 2 > CalculateTangentAndBitangentForTriangle(glm::vec3 pos1, glm::vec3 pos2, glm::vec3 pos3, glm::vec2 tex1, glm::vec2 tex2, glm::vec2 tex3, glm::vec3 normal)
calculates tangent and bitangent of given positions and texture coordinates used to prepare mesh for ...
Definition: Mesh.cpp:336
skr::fps2::Renderer::OpenGL::Mesh::DrawGeometry
void DrawGeometry() const
draws only geometry without texture or color used to render depthmap for shadow mapping
Definition: Mesh.cpp:153
skr::fps2::Renderer::OpenGL::Mesh
holds geometry of a single mesh
Definition: Mesh.h:34
skr::fps2::Renderer::OpenGL::Vertex
vertex information
Definition: Mesh.h:23
skr::fps2::Renderer::OpenGL::Mesh::SetDrawColor
void SetDrawColor(glm::vec3 color)
sets _drawColor
Definition: Mesh.cpp:168
skr::fps2::Renderer::OpenGL::Vertex::Tangent
glm::vec3 Tangent
tangent
Definition: Mesh.h:27
skr::fps2::Renderer::OpenGL::Mesh::DrawPrepareTextures
void DrawPrepareTextures(Shader shader, uint32_t depthMap=0, bool useMaterialTextures=false) const
prepares Textures before drawing them
Definition: Mesh.cpp:204
skr::fps2::Renderer::OpenGL::Mesh::Mesh
Mesh(std::vector< Vertex > vertices, std::vector< uint32_t > indices, std::vector< Texture > textures, glm::vec3 drawColor=glm::vec3(1.0f))
draw color. If texture are used, this is ignored
Definition: Mesh.cpp:23
skr::fps2::Renderer::OpenGL::Shader
handles shader loading, compiling and linking. Also provides access to set uniform ids and usage.
Definition: Shader.h:31
skr::fps2::Renderer::OpenGL::Mesh::_textures
std::vector< Texture > _textures
element buffer object. If raw vertices are used, this field is not used
Definition: Mesh.h:44
skr::fps2::Renderer::OpenGL::Mesh::SetupMeshIndexed
void SetupMeshIndexed()
setup meshes to draw using index buffer
Definition: Mesh.cpp:282
Shader.h
skr::fps2::Renderer::OpenGL::Mesh::_vertices
std::vector< Vertex > _vertices
list of vertices
Definition: Mesh.h:36
skr::fps2::Renderer::OpenGL::Mesh::_indices
std::vector< uint32_t > _indices
list of indices. If raw vertices are used, this list is empty
Definition: Mesh.h:37
skr::fps2::Renderer::OpenGL::Mesh::Draw
void Draw(Shader shader, uint32_t depthMap=0, bool useMaterialTextures=false) const
Draw mesh with diven shader "regular" draw function, that should usually be used.
Definition: Mesh.cpp:141
skr::fps2::Renderer::OpenGL::Vertex::Position
glm::vec3 Position
position
Definition: Mesh.h:24
skr::fps2::Renderer::OpenGL::Mesh::SetupMeshRawTriangles
void SetupMeshRawTriangles()
setup raw meshes to draw
Definition: Mesh.cpp:311
skr::fps2::Renderer::OpenGL::Mesh::~Mesh
~Mesh()
destructor
Definition: Mesh.cpp:132
skr::fps2::Renderer::OpenGL::Vertex::Normal
glm::vec3 Normal
normal
Definition: Mesh.h:25
skr
Definition: AssetPath.h:10
skr::fps2::Renderer::OpenGL::Vertex::TexCoords
glm::vec2 TexCoords
texture coordinates
Definition: Mesh.h:26
skr::fps2::Renderer::OpenGL::Mesh::GetExtremePositions
void GetExtremePositions(glm::vec3 &max, glm::vec3 &min)
calcualtes the extrem positions of the mesh in every direction output parameters should result in opp...
Definition: Mesh.cpp:173
Texture.h
skr::fps2::Renderer::OpenGL::Mesh::_useDrawColor
bool _useDrawColor
flag inidicating if color is used to draw mesh instead of textures
Definition: Mesh.h:46
skr::fps2::Renderer::OpenGL::Mesh::_vao
uint32_t _vao
vertex array object
Definition: Mesh.h:39
skr::fps2::Renderer::OpenGL::Mesh::_ebo
uint32_t _ebo
Definition: Mesh.h:41