PCG-FPS  v2 m0.22.4
Simple First Person Shooter with Procedurally Generated Level
Model.h
Go to the documentation of this file.
1 #ifndef SKR_FPS2_RENDERER_OPENGL_MODEL_H
2 #define SKR_FPS2_RENDERER_OPENGL_MODEL_H
3 
4 #include "..\..\pch.h"
5 
6 #include <vector>
7 
8 #include "Texture.h"
9 #include "Mesh.h"
10 #include "Shader.h"
11 #include "..\..\Collision\BoundingBox.h"
12 
13 namespace skr
14 {
15 namespace fps2
16 {
17 namespace Renderer
18 {
19 namespace OpenGL
20 {
23  class Model
24  {
25  public:
26  std::vector<Texture> _texturesLoaded;
27  std::vector<Mesh> _meshes;
28  glm::vec3 _scale;
29  std::string _path;
33  float _yOffset;
34 
35  private:
36  std::string _directory;
38 
39  public:
42  Model();
43 
44  // \brief rvalue copy constructor
46  Model(Model&& other) noexcept;
47 
54  Model(std::string const &path, glm::vec3 scale = glm::vec3(1.0f, 1.0f, 1.0f), float yoffset = 0.0f, ShaderType shadertype = ShaderType::Main, bool gamma = false);
55 
62  Model(std::vector<skr::pcg::Face> faces, glm::vec3 scale = glm::vec3(1.0f, 1.0f, 1.0f), float yoffset = 0.0f, ShaderType shadertype = ShaderType::Main, bool gamma = false);
63 
68  void Draw(Shader shader, uint32_t depthMap = 0) const;
69 
70  // \brief draw only geomtry without textures
73  void DrawGeometry() const;
74 
81  void DrawBoundingBox(Shader shader, glm::mat4 view, glm::mat4 proj, glm::mat4 model, glm::vec3 color = glm::vec3(0.0f, 0.0f, 1.0f)) const;
82 
85  void SetScale(glm::vec3 s)
86  {
87  _scale = s;
88  }
89 
92  void SetYOffset(float yoffset)
93  {
94  _yOffset = yoffset;
95  }
96 
97  private:
100  void LoadModel(std::string const &path);
101 
105  void ProcessNode(aiNode* node, const aiScene* scene);
106 
110  Mesh ProcessMesh(aiMesh* mesh, const aiScene* scene);
111 
113  void CalculateBoundingBox();
114  };
115 
116 }
117 }
118 }
119 }
120 
121 #endif
skr::fps2::Renderer::OpenGL::Model::_yOffset
float _yOffset
offset from center of model if its defined at the bottom
Definition: Model.h:33
skr::fps2::Renderer::OpenGL::ShaderType::Main
@ Main
main shader
skr::fps2::Renderer::OpenGL::Model::_scale
glm::vec3 _scale
scale to draw model in
Definition: Model.h:28
skr::fps2::Renderer::OpenGL::Mesh
holds geometry of a single mesh
Definition: Mesh.h:34
skr::fps2::Renderer::OpenGL::Model::_useMaterialTextures
bool _useMaterialTextures
flag indicating if material texture (normal mal, specular map) are used or material parameters
Definition: Model.h:31
skr::fps2::Renderer::OpenGL::Model::_meshes
std::vector< Mesh > _meshes
list of meshes
Definition: Model.h:27
skr::fps2::Renderer::OpenGL::Model::_directory
std::string _directory
path to directory where model data (geometry, texturex) are located
Definition: Model.h:36
skr::fps2::Renderer::OpenGL::Model::_boundingBox
Collision::BoundingBox _boundingBox
collision bounding box of the model
Definition: Model.h:32
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::Model::_gammaCorrection
bool _gammaCorrection
flag indicating if gamme corection is used
Definition: Model.h:37
skr::fps2::Renderer::OpenGL::Model
holds information of a model
Definition: Model.h:24
skr::fps2::Renderer::OpenGL::Model::_shadertype
ShaderType _shadertype
type of shader the model is drawn with
Definition: Model.h:30
Shader.h
skr::fps2::Renderer::OpenGL::Model::Draw
void Draw(Shader shader, uint32_t depthMap=0) const
draw model main drawing function
Definition: Model.cpp:82
skr::fps2::Renderer::OpenGL::Model::_texturesLoaded
std::vector< Texture > _texturesLoaded
list of texture loaded for this model
Definition: Model.h:26
skr::fps2::Renderer::OpenGL::Model::DrawBoundingBox
void DrawBoundingBox(Shader shader, glm::mat4 view, glm::mat4 proj, glm::mat4 model, glm::vec3 color=glm::vec3(0.0f, 0.0f, 1.0f)) const
draw bounding box of the model
Definition: Model.cpp:98
skr::fps2::Renderer::OpenGL::ShaderType
ShaderType
shader type identifies. Used as keys in map keeping shaders
Definition: Shader.h:18
skr::fps2::Renderer::OpenGL::Model::Model
Model()
default constructor default constructor is needed since OpenGL Renderer Object is a global object,...
Definition: Model.cpp:14
skr::fps2::Renderer::OpenGL::Model::LoadModel
void LoadModel(std::string const &path)
load model from given path
Definition: Model.cpp:103
skr::fps2::Renderer::OpenGL::Model::SetYOffset
void SetYOffset(float yoffset)
set _yOffset to given value
Definition: Model.h:92
skr::fps2::Renderer::OpenGL::Model::CalculateBoundingBox
void CalculateBoundingBox()
calculates bounding box
Definition: Model.cpp:234
skr
Definition: AssetPath.h:10
Mesh.h
Texture.h
skr::fps2::Renderer::OpenGL::Model::_path
std::string _path
path to directory where model file is loaded from
Definition: Model.h:29
skr::fps2::Collision::BoundingBox
specifies bounding box of a geometry
Definition: BoundingBox.h:17
skr::fps2::Renderer::OpenGL::Model::ProcessMesh
Mesh ProcessMesh(aiMesh *mesh, const aiScene *scene)
process mesh loaded by assimp
Definition: Model.cpp:135
skr::fps2::Renderer::OpenGL::Model::DrawGeometry
void DrawGeometry() const
Definition: Model.cpp:90
skr::fps2::Renderer::OpenGL::Model::SetScale
void SetScale(glm::vec3 s)
set _scale to given value
Definition: Model.h:85
skr::fps2::Renderer::OpenGL::Model::ProcessNode
void ProcessNode(aiNode *node, const aiScene *scene)
process a node loaded by assimp
Definition: Model.cpp:121