Vivid
Loading...
Searching...
No Matches
Mesh.h
1#pragma once
2
3#include "core/renderer/IndexBuffer.h"
4#include "core/renderer/Renderer.h"
5#include "core/renderer/Texture.h"
6#include "core/renderer/VertexArray.h"
7#include "core/renderer/VertexBuffer.h"
8#include "core/renderer/VertexBufferLayout.h"
9#include "editor/camera/Camera.h"
10#include "core/renderer/shapes/Shape.h"
11
12#include "common/types/SmartPointers.h"
13#include "utils/Error.h"
14
15#include <string>
16#include <sstream>
17#include <fstream>
18#include <iostream>
19#include <vector>
20
21namespace Vivid
22{
31 class Mesh
32 {
33 private:
34 bool m_IsEditing = false;
35 static unsigned int s_ID;
36 unsigned int m_ID;
37 Vector<Vertex> m_Vertices;
38 Vector<GLuint> m_Indices;
39 VertexBufferLayout m_Layout;
40 Vector<Ref<Texture>> m_Textures;
41 Ref<VertexArray> m_Vao;
42 IndexBuffer* m_Ebo;
43 Ref<Shader> m_Shader;
44 String m_VertexShaderPath;
45 String m_PixelShaderPath;
46
47 glm::mat4 m_ModelMatrix;
48 float m_Shininess = 1;
49 float m_AmbientStrength = 0.5f;
50 float m_SpecularStrength = 0.5f;
51
52 const unsigned int m_Instances;
53
60 void loadOBJ(const std::string& file_name);
61
67 void normalizeVertices();
68 void recompileShader();
69
70 public:
71 // Initializes the mesh
72 Mesh();
73 Mesh(Vector<Vertex>& verts, Vector<unsigned int>& inds, VertexBufferLayout layout, glm::mat4 modelMatrix, unsigned int instances = 1);
74 Mesh(Vector<Vertex>& verts, Vector<unsigned int>& inds, unsigned int instances = 1);
75 explicit Mesh(Shape& shape, unsigned int instances = 1);
76 explicit Mesh(const std::string& file_name, unsigned int instances = 1);
77 explicit Mesh(const std::string& file_name, Ptr<Shader> shader, unsigned int instances = 1);
78
79 void Update(const glm::mat4& modelMatrix);
80
81 void BindShader(Ref<Shader> shader);
82
83 Vector<Vertex> GetVertices() { return m_Vertices; }
84 Vector<unsigned int> GetIndices() { return m_Indices; };
85 glm::mat4 GetModelMatrix() { return m_ModelMatrix; };
86 Shader& GetShader() { return *m_Shader.get(); };
87
88 void SetVertices(Vector<Vertex> vertices);
89 void SetIndices(Vector<unsigned int> indices);
90
91 void Draw(Camera* camera);
92
93 unsigned int GetID() { return m_ID; };
94
95 void EditMesh();
96 void ImGuiRender();
97
98 void AddTexture(String file_name) { m_Textures.push_back(Ref<Texture>(new Texture(file_name))); }
99 Ref<Texture> GetTexture(int index) { return m_Textures[index]; }
100
101 };
102}
A class that represents the camera.
Definition: Camera.h:25
Manages the IndexBuffer. For more information on IndexBuffers, visit https://learnopengl....
Definition: IndexBuffer.h:14
Contains a Mesh.
Definition: Mesh.h:32
A class for the Shader.
Definition: Shader.h:25
A class for the Texture.
Definition: Texture.h:14