added the readme

This commit is contained in:
2026-06-08 17:07:34 -04:00
commit 6655fd2886
1001 changed files with 253651 additions and 0 deletions
+205
View File
@@ -0,0 +1,205 @@
#ifndef MODEL_CLASS
#define MODEL_CLASS
//DEPRECATED
#include <iostream>
#include <random>
#include <vector>
#include<glad/glad.h>
#include<GLFW/glfw3.h>
#include<glm/glm.hpp>
#include<glm/gtc/matrix_transform.hpp>
#include<glm/gtc/type_ptr.hpp>
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
#include "RenderSystem.h"
#include "Object.h"
#include "VAO.h"
#include "VBO.h"
#include "EBO.h"
#include "shaderClass.h"
#include "t.h"
#include "Vertex.h"
#include "Mesh.h"
#include "Physics.h"
class Model : public Object, public Renderable, public t_package {
public:
Model(const char* path) {
LoadModel(path);
//NormalizeVertices();
}
std::vector<Mesh*> ReturnMeshes() {
return meshes;
}
float GetVolume() {
float runningtotal = 0.0f;
glm::vec3 modelscale = t.GetScale();
for (const Mesh* mesh : meshes) {
runningtotal += mesh->GetVolume() * modelscale.x * modelscale.y * modelscale.z;
}
return runningtotal;
}
void Render(Shader& shader) override
{
glm::mat4 matrix = t.GetMatrix();
for (unsigned int i = 0; i < meshes.size(); i++) {
meshes[i]->Render(shader);
}
}
void RenderWireframe(Shader& shader)
{
for (unsigned int i = 0; i < meshes.size(); i++) {
meshes[i]->RenderWireframe(shader);
}
}
~Model() {
for (Mesh* mesh : meshes) {
mesh->~Mesh();
}
}
std::vector<Mesh*> meshes;
void NormalizeVertices() {
float biggestx;
float smallestx;
float biggesty;
float smallesty;
float biggestz;
float smallestz;
bool initalized = false;
for (Mesh* mesh : meshes) {
for (Vertex& vertex : mesh->vertices) {
if (not initalized) {
biggestx = vertex.Position.x;
smallestx = vertex.Position.x;
biggesty = vertex.Position.y;
smallesty = vertex.Position.y;
biggestz = vertex.Position.z;
smallestz = vertex.Position.z;
initalized = true;
}
else {
biggestx = std::max(biggestx, vertex.Position.x);
smallestx = std::min(smallestx, vertex.Position.x);
biggesty = std::max(biggesty, vertex.Position.y);
smallesty = std::min(smallesty, vertex.Position.y);
biggestz = std::max(biggestz, vertex.Position.z);
smallestz = std::min(smallestz, vertex.Position.z);
}
}
}
if (not initalized) {
std::cout << "NO VERTICES";
}
else {
t.ScaleBy(glm::vec3(biggestx-smallestx,biggesty-smallesty,biggestz-smallestz));
float midx = (biggestx + smallestx) / 2.0f;
float midy = (biggesty + smallesty) / 2.0f;
float midz = (biggestz + smallestz) / 2.0f;
float xf = biggestx - smallestx;
float yf = biggesty - smallesty;
float zf = biggestz - smallestz;
for (Mesh* mesh : meshes) {
for (Vertex& vertex : mesh->vertices) {
vertex.Position = glm::vec3(
(vertex.Position.x - midx)/xf,
(vertex.Position.y - midy)/yf,
(vertex.Position.z - midz)/zf
);
}
mesh->UpdateVertices();
}
}
}
private:
//IMPORT STUFF
std::string directory;
void LoadModel(std::string path) {
Assimp::Importer import;
const aiScene* scene = import.ReadFile(path, aiProcess_Triangulate);
if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode)
{
std::cout << "ERROR::ASSIMP::" << import.GetErrorString() << '\n';
return;
}
directory = path.substr(0, path.find_last_of('/'));
processNode(scene->mRootNode, scene);
}
void processNode(aiNode* node, const aiScene* scene) {
// process all the node's meshes (if any)
for (unsigned int i = 0; i < node->mNumMeshes; i++)
{
aiMesh* mesh = scene->mMeshes[node->mMeshes[i]];
meshes.push_back(processMesh(mesh, scene));
}
// then do the same for each of its children
for (unsigned int i = 0; i < node->mNumChildren; i++)
{
processNode(node->mChildren[i], scene);
}
};
Mesh* processMesh(aiMesh* mesh, const aiScene* scene)
{
std::vector<Vertex> vertices;
std::vector<unsigned int> indices;
for (unsigned int i = 0; i < mesh->mNumVertices; i++)
{
Vertex vertex;
glm::vec3 vector;
vector.x = mesh->mVertices[i].x;
vector.y = mesh->mVertices[i].y;
vector.z = mesh->mVertices[i].z;
vertex.Position = vector;
vector.x = mesh->mNormals[i].x;
vector.y = mesh->mNormals[i].y;
vector.z = mesh->mNormals[i].z;
vertex.Normal = vector;
// process vertex positions, normals and texture coordinates
if (mesh->mTextureCoords[0]) // does the mesh contain texture coordinates?
{
glm::vec2 vec;
vec.x = mesh->mTextureCoords[0][i].x;
vec.y = mesh->mTextureCoords[0][i].y;
vertex.TexCoords = vec;
}
else {
vertex.TexCoords = glm::vec2(0.0f, 0.0f);
}
vertices.push_back(vertex);
}
// process indices
for (unsigned int i = 0; i < mesh->mNumFaces; i++)
{
aiFace face = mesh->mFaces[i];
for (unsigned int j = 0; j < face.mNumIndices; j++)
indices.push_back(face.mIndices[j]);
}
return new Mesh(vertices, indices);
}
};
#endif