SimpleEngine/include/simpleengine/objects/3d/obj_model.h

57 lines
2.4 KiB
C
Raw Normal View History

2021-12-07 05:17:04 +00:00
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>
#include "../../optional.h"
#include "../../vector.h"
#include "../../vertex.h"
#include "../../renderable.h"
#include "../../transformable.h"
#include "../../gfx/vao.h"
#include "../../gfx/vbo.h"
#include "../../gfx/shader.h"
#include "../../gfx/texture.h"
#include "../../gfx/textured_model.h"
2021-12-07 05:17:04 +00:00
namespace simpleengine::objects_3d {
class ObjModel : public simpleengine::gfx::TexturedModel {
2021-12-07 05:17:04 +00:00
private:
2021-12-09 04:31:46 +00:00
/**
* @brief Split a string multiple times (if possible) with a character delimiter.
*
* @param str The string to split.
* @param delim The character to split by.
* @return std::vector<std::string> The tokens that were split out of str.
*/
std::vector<std::string> split_string(std::string str, const char delim);
2021-12-09 04:31:46 +00:00
/**
* @brief Process a vertex from tokens read from the .obj file.
*
* @param vertex_data The vertex string tokens to process the vertex from.
* @param in_textures The texture coords that are unsorted, just read from the .obj file.
* @param in_normals The normals that are unsorted, just read from the .obj file.
* @param out_indicies (out) The vector to insert the indicies that were extracted from `vertex_data` into.
* @param out_textures (out) The vector to insert the texture coords that were extracted from `vertex_data` into.
* @param out_normals (out) The vector to insert the normals that were extracted from `vertex_data` into.
*/
static void process_vertex(const std::vector<std::string>& vertex_data, const std::vector<glm::vec2>& in_textures,
const std::vector<glm::vec3>& in_normals, std::vector<GLuint>& out_indicies, std::vector<glm::vec2>& out_textures, std::vector<glm::vec3>& out_normals);
private:
/**
* @brief This is replaced with `lit_vertices`!!!!
*
*/
using simpleengine::gfx::Model::vertices;
2021-12-07 05:17:04 +00:00
public:
std::vector<LitVertex> lit_vertices;
ObjModel(GLFWwindow *window, gfx::Shader shader, gfx::Texture texture, std::string filename);
ObjModel(GLFWwindow *window, gfx::Shader shader, gfx::Texture texture, std::ifstream file_stream);
2021-12-07 05:17:04 +00:00
virtual void update(const float& delta_time) override;
2021-12-07 05:17:04 +00:00
};
}