Program Listing for File Object3D.hpp¶
↰ Return to documentation for file (gui/Demeter/Renderer/Object3D.hpp)
#pragma once
#include <unordered_map>
#include "Camera.hpp"
#include "Mesh.hpp"
struct Object3D {
private:
std::unordered_map<std::string, size_t> _idMap;
std::vector<std::unique_ptr<Mesh>> _meshArr;
// parsing data
std::vector<glm::vec3> positions;
std::vector<glm::vec2> texCoords;
std::vector<glm::vec3> normals;
std::string currentName = "default";
std::unique_ptr<std::vector<Vertex>> meshVertices = std::
make_unique<std::vector<Vertex>>();
std::unique_ptr<std::vector<unsigned int>> meshIndices = std::
make_unique<std::vector<unsigned int>>();
std::unordered_map<std::string, unsigned int> uniqueVertexMap;
unsigned int index = 0;
[[nodiscard]] bool HandleSubObject(std::istringstream &ss);
void HandleVertex(std::istringstream &ss);
void HandleVertexTexture(std::istringstream &ss);
void HandleVertexNormal(std::istringstream &ss);
void HandleFace(std::istringstream &ss);
[[nodiscard]] bool
ParseLine(const std::string &prefix, std::istringstream &ss);
public:
glm::mat4 modelMatrix = glm::mat4(1.0); // NOLINT
Object3D() = default;
[[nodiscard]] bool Init(const std::string &path);
void Draw(ShaderProgram &shader, Camera &camera) const;
void SetTexture(size_t meshID, std::shared_ptr<Texture> t);
void SetPosition(const glm::vec3 &pos)
{
modelMatrix = glm::translate(modelMatrix, pos);
}
void Translate(const glm::vec3 &pos)
{
modelMatrix = glm::translate(modelMatrix, pos);
}
void SetRotation(float angle, const glm::vec3 &axis)
{
modelMatrix = glm::rotate(modelMatrix, glm::radians(angle), axis);
}
void SetScale(const glm::vec3 &scale)
{
modelMatrix = glm::scale(modelMatrix, scale);
}
};