From ae7aae6df17726a0e77478d875c1d5d579e7a6c2 Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Thu, 11 Dec 2025 13:48:50 +0100 Subject: [PATCH 01/21] Add node graph to model, render by traversing graph --- ICE/Components/include/TransformComponent.h | 6 +- ICE/Graphics/include/ForwardRenderer.h | 6 + ICE/Graphics/include/Model.h | 11 +- ICE/Graphics/src/ForwardRenderer.cpp | 141 +++++++++++--------- ICE/Graphics/src/Model.cpp | 5 +- ICE/IO/include/ModelLoader.h | 5 + ICE/IO/src/ModelLoader.cpp | 141 +++++++++++++------- 7 files changed, 201 insertions(+), 114 deletions(-) diff --git a/ICE/Components/include/TransformComponent.h b/ICE/Components/include/TransformComponent.h index d14aa282..1ac2de52 100644 --- a/ICE/Components/include/TransformComponent.h +++ b/ICE/Components/include/TransformComponent.h @@ -20,7 +20,7 @@ struct TransformComponent : public Component { Eigen::Vector3f getRotation() const { return m_rotation; } Eigen::Vector3f getScale() const { return m_scale; } - Eigen::Matrix4f getModelMatrix() { + Eigen::Matrix4f getModelMatrix() const { if (m_dirty) { m_model_matrix = transformationMatrix(m_position, m_rotation, m_scale); m_dirty = false; @@ -56,7 +56,7 @@ struct TransformComponent : public Component { private: Eigen::Vector3f m_position, m_rotation, m_scale; - Eigen::Matrix4f m_model_matrix; - bool m_dirty = true; + mutable Eigen::Matrix4f m_model_matrix; + mutable bool m_dirty = true; }; } // namespace ICE diff --git a/ICE/Graphics/include/ForwardRenderer.h b/ICE/Graphics/include/ForwardRenderer.h index 62d9a4be..9b58c811 100644 --- a/ICE/Graphics/include/ForwardRenderer.h +++ b/ICE/Graphics/include/ForwardRenderer.h @@ -41,12 +41,18 @@ class ForwardRenderer : public Renderer { void setViewport(int x, int y, int w, int h) override; private: + void submitModel(int node_idx, const std::vector& nodes, const std::vector>& meshes, + const std::vector& materials, const Eigen::Matrix4f& transform); + std::shared_ptr m_api; std::shared_ptr m_registry; std::shared_ptr m_asset_bank; std::shared_ptr target = nullptr; std::vector m_render_commands; + Eigen::Matrix4f m_view_matrix; + Eigen::Matrix4f m_projection_matrix; + std::unordered_set m_prepared_shaders; std::vector m_render_queue; std::vector m_lights; AssetUID m_skybox = NO_ASSET_ID; diff --git a/ICE/Graphics/include/Model.h b/ICE/Graphics/include/Model.h index 653c7bfe..e90ab635 100644 --- a/ICE/Graphics/include/Model.h +++ b/ICE/Graphics/include/Model.h @@ -6,8 +6,16 @@ namespace ICE { class Model : public Asset { public: - Model(const std::vector> &meshes, const std::vector &materials); + struct Node { + std::string name; + Eigen::Matrix4f localTransform; + std::vector meshIndices; // Meshes used by this node + std::vector children; // Node indices + }; + Model(const std::vector &nodes, const std::vector> &meshes, const std::vector &materials); + + std::vector getNodes() const { return m_nodes; } std::vector> getMeshes() const { return m_meshes; } std::vector getMaterialsIDs() const { return m_materials; } AABB getBoundingBox() const { return m_boundingbox; } @@ -16,6 +24,7 @@ class Model : public Asset { std::string getTypeName() const override { return "Model"; } private: + std::vector m_nodes; std::vector> m_meshes; std::vector m_materials; AABB m_boundingbox{{0, 0, 0}, {0, 0, 0}}; diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index dda1cd23..2f49f536 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -89,9 +89,9 @@ void ForwardRenderer::prepareFrame(Camera& camera) { .depthTest = false}); } - std::unordered_set prepared_shaders; - auto view_mat = camera.lookThrough(); - auto frustum = extractFrustumPlanes(camera.getProjection() * view_mat); + m_view_matrix = camera.lookThrough(); + m_projection_matrix = camera.getProjection(); + auto frustum = extractFrustumPlanes(camera.getProjection() * m_view_matrix); for (const auto& e : m_render_queue) { auto rc = m_registry->getComponent(e); auto tc = m_registry->getComponent(e); @@ -106,64 +106,10 @@ void ForwardRenderer::prepareFrame(Camera& camera) { if (!isAABBInFrustum(frustum, aabb)) { continue; } - - for (int i = 0; i < model->getMeshes().size(); i++) { - auto mtl_id = model->getMaterialsIDs().at(i); - auto mesh = model->getMeshes().at(i); - auto material = m_asset_bank->getAsset(mtl_id); - if (!material) { - continue; - } - auto shader = m_asset_bank->getAsset(material->getShader()); - if (!shader) { - continue; - } - - if (!prepared_shaders.contains(material->getShader())) { - shader->bind(); - - shader->loadMat4("projection", camera.getProjection()); - shader->loadMat4("view", view_mat); - - shader->loadFloat3("ambient_light", Eigen::Vector3f(0.1f, 0.1f, 0.1f)); - int i = 0; - for (const auto& e : m_lights) { - auto light = m_registry->getComponent(e); - auto transform = m_registry->getComponent(e); - std::string light_name = (std::string("lights[") + std::to_string(i) + std::string("].")); - shader->loadFloat3((light_name + std::string("position")).c_str(), transform->getPosition()); - shader->loadFloat3((light_name + std::string("rotation")).c_str(), transform->getRotation()); - shader->loadFloat3((light_name + std::string("color")).c_str(), light->color); - shader->loadFloat((light_name + std::string("distance_dropoff")).c_str(), light->distance_dropoff); - shader->loadInt((light_name + std::string("type")).c_str(), static_cast(light->type)); - i++; - } - shader->loadInt("light_count", i); - prepared_shaders.emplace(material->getShader()); - } - - if (!mesh) { - return; - } - - std::unordered_map> texs; - for (const auto& [name, value] : material->getAllUniforms()) { - if (std::holds_alternative(value)) { - auto v = std::get(value); - if (auto tex = m_asset_bank->getAsset(v); tex) { - texs.try_emplace(v, tex); - } - } - } - - m_render_commands.push_back(RenderCommand{.mesh = mesh, - .material = material, - .shader = shader, - .textures = texs, - .model_matrix = tc->getModelMatrix(), - .faceCulling = true, - .depthTest = true}); - } + auto meshes = model->getMeshes(); + auto materials = model->getMaterialsIDs(); + auto nodes = model->getNodes(); + submitModel(0, nodes, meshes, materials, tc->getModelMatrix()); } std::sort(m_render_commands.begin(), m_render_commands.end(), [this](const RenderCommand& a, const RenderCommand& b) { @@ -179,6 +125,76 @@ void ForwardRenderer::prepareFrame(Camera& camera) { m_geometry_pass.submit(&m_render_commands); } +void ForwardRenderer::submitModel(int node_idx, const std::vector& nodes, const std::vector>& meshes, + const std::vector& materials, const Eigen::Matrix4f& transform) { + auto node = nodes.at(node_idx); + auto node_transform = transform * node.localTransform; + for (const auto& i : node.meshIndices) { + if (i >= meshes.size()) { + continue; + } + auto mtl_id = materials.at(i); + auto mesh = meshes.at(i); + auto material = m_asset_bank->getAsset(mtl_id); + if (!material) { + continue; + } + auto shader = m_asset_bank->getAsset(material->getShader()); + if (!shader) { + continue; + } + + if (!m_prepared_shaders.contains(material->getShader())) { + shader->bind(); + + shader->loadMat4("projection", m_projection_matrix); + shader->loadMat4("view", m_view_matrix); + + shader->loadFloat3("ambient_light", Eigen::Vector3f(0.1f, 0.1f, 0.1f)); + int i = 0; + for (const auto& e : m_lights) { + auto light = m_registry->getComponent(e); + auto transform = m_registry->getComponent(e); + std::string light_name = (std::string("lights[") + std::to_string(i) + std::string("].")); + shader->loadFloat3((light_name + std::string("position")).c_str(), transform->getPosition()); + shader->loadFloat3((light_name + std::string("rotation")).c_str(), transform->getRotation()); + shader->loadFloat3((light_name + std::string("color")).c_str(), light->color); + shader->loadFloat((light_name + std::string("distance_dropoff")).c_str(), light->distance_dropoff); + shader->loadInt((light_name + std::string("type")).c_str(), static_cast(light->type)); + i++; + } + shader->loadInt("light_count", i); + m_prepared_shaders.emplace(material->getShader()); + } + + if (!mesh) { + return; + } + + std::unordered_map> texs; + for (const auto& [name, value] : material->getAllUniforms()) { + if (std::holds_alternative(value)) { + auto v = std::get(value); + if (auto tex = m_asset_bank->getAsset(v); tex) { + texs.try_emplace(v, tex); + } + } + } + + m_render_commands.push_back(RenderCommand{.mesh = mesh, + .material = material, + .shader = shader, + .textures = texs, + .model_matrix = node_transform, + .faceCulling = true, + .depthTest = true}); + } + + for (const auto& child_idx : node.children) { + submitModel(child_idx, nodes, meshes, materials, node_transform); + } +} + void ForwardRenderer::render() { m_geometry_pass.execute(); auto result = m_geometry_pass.getResult(); @@ -202,9 +218,8 @@ void ForwardRenderer::render() { void ForwardRenderer::endFrame() { m_api->checkAndLogErrors(); - //TODO: Cleanup and restore state m_render_commands.clear(); - + m_prepared_shaders.clear(); if (this->target != nullptr) this->target->unbind(); } diff --git a/ICE/Graphics/src/Model.cpp b/ICE/Graphics/src/Model.cpp index 0a9ad74f..2ecaa30f 100644 --- a/ICE/Graphics/src/Model.cpp +++ b/ICE/Graphics/src/Model.cpp @@ -1,8 +1,9 @@ #include "Model.h" namespace ICE { -Model::Model(const std::vector> &meshes, const std::vector &materials) - : m_meshes(meshes), +Model::Model(const std::vector &nodes, const std::vector> &meshes, const std::vector &materials) + : m_nodes(nodes), + m_meshes(meshes), m_materials(materials) { for (const auto &mesh : meshes) { m_boundingbox = m_boundingbox.unionWith(mesh->getBoundingBox()); diff --git a/ICE/IO/include/ModelLoader.h b/ICE/IO/include/ModelLoader.h index 5dfd1af9..2cd8eea4 100644 --- a/ICE/IO/include/ModelLoader.h +++ b/ICE/IO/include/ModelLoader.h @@ -22,12 +22,17 @@ class ModelLoader : public IAssetLoader { : ref_bank(bank), m_graphics_factory(factory), IAssetLoader(factory) {} + std::shared_ptr load(const std::vector &file) override; + + int processNode(const aiNode *node, std::vector &nodes); + std::shared_ptr extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene); AssetUID extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene); AssetUID extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type); private: Eigen::Vector4f colorToVec(aiColor4D *color); + Eigen::Matrix4f aiMat4ToEigen(const aiMatrix4x4 &mat); AssetBank &ref_bank; std::shared_ptr m_graphics_factory; diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index b78dd350..69b709b6 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -18,68 +18,96 @@ std::shared_ptr ModelLoader::load(const std::vector> meshes; std::vector materials; + std::vector nodes; for (int m = 0; m < scene->mNumMeshes; m++) { - auto vertices = std::vector(); - auto normals = std::vector(); - auto uvs = std::vector(); - auto indices = std::vector(); - // Loop over faces(polygon) auto mesh = scene->mMeshes[m]; auto material = scene->mMaterials[mesh->mMaterialIndex]; + auto model_name = file[0].filename().stem().string(); + meshes.push_back(extractMesh(mesh, model_name, scene)); + materials.push_back(extractMaterial(material, model_name, scene)); + meshes.back()->setSources(file); + } + processNode(scene->mRootNode, nodes); + auto model = std::make_shared(nodes, meshes, materials); + model->setSources(file); + return model; +} - materials.push_back(extractMaterial(material, file[0].filename().stem().string(), scene)); +int ModelLoader::processNode(const aiNode *ainode, std::vector &nodes) { + Model::Node node; + node.name = ainode->mName.C_Str(); - for (int i = 0; i < mesh->mNumVertices; i++) { - auto v = mesh->mVertices[i]; - auto n = mesh->mNormals ? mesh->mNormals[i] : aiVector3D{0, 0, 0}; - Eigen::Vector2f uv(0, 0); - if (mesh->mTextureCoords[0] != nullptr) { - auto uv_file = mesh->mTextureCoords[0][i]; - uv.x() = uv_file.x; - uv.y() = uv_file.y; - } - vertices.emplace_back(v.x, v.y, v.z); - normals.emplace_back(n.x, n.y, n.z); - uvs.push_back(uv); - } - for (int i = 0; i < mesh->mNumFaces; i++) { - auto f = mesh->mFaces[i]; - assert(f.mNumIndices == 3); - indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); - } + // compute local transform (relative to parent) + aiMatrix4x4 local = ainode->mTransformation; + node.localTransform = aiMat4ToEigen(local); // store local transform (or AiMat4ToGlm(world) if you want world) - meshes.push_back(std::make_shared(vertices, normals, uvs, indices)); + for (unsigned int i = 0; i < ainode->mNumMeshes; ++i) { + unsigned int mesh_idx = ainode->mMeshes[i]; + node.meshIndices.push_back(mesh_idx); + } + auto insert_pos = nodes.size(); + nodes.push_back(node); - meshes.back()->setSources(file); + for (unsigned int c = 0; c < ainode->mNumChildren; ++c) { + const aiNode *child = ainode->mChildren[c]; + int child_pos = processNode(child, nodes); + nodes.at(insert_pos).children.push_back(child_pos); + } + return insert_pos; +} - auto vertexArray = graphics_factory->createVertexArray(); +std::shared_ptr ModelLoader::extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene) { + auto vertices = std::vector(); + auto normals = std::vector(); + auto uvs = std::vector(); + auto indices = std::vector(); + + for (int i = 0; i < mesh->mNumVertices; i++) { + auto v = mesh->mVertices[i]; + auto n = mesh->HasNormals() ? mesh->mNormals[i] : aiVector3D{0, 0, 0}; + Eigen::Vector2f uv(0, 0); + if (mesh->mTextureCoords[0] != nullptr) { + auto uv_file = mesh->mTextureCoords[0][i]; + uv.x() = uv_file.x; + uv.y() = uv_file.y; + } + vertices.emplace_back(v.x, v.y, v.z); + normals.emplace_back(n.x, n.y, n.z); + uvs.push_back(uv); + } + for (int i = 0; i < mesh->mNumFaces; i++) { + auto f = mesh->mFaces[i]; + assert(f.mNumIndices == 3); + indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); + } - auto vertexBuffer = graphics_factory->createVertexBuffer(); - auto normalsBuffer = graphics_factory->createVertexBuffer(); - auto uvBuffer = graphics_factory->createVertexBuffer(); - auto indexBuffer = graphics_factory->createIndexBuffer(); + auto mesh_ = std::make_shared(vertices, normals, uvs, indices); - vertexBuffer->putData(BufferUtils::CreateFloatBuffer(meshes.back()->getVertices()), 3 * meshes.back()->getVertices().size() * sizeof(float)); - normalsBuffer->putData(BufferUtils::CreateFloatBuffer(meshes.back()->getNormals()), 3 * meshes.back()->getNormals().size() * sizeof(float)); - uvBuffer->putData(BufferUtils::CreateFloatBuffer(meshes.back()->getUVCoords()), 2 * meshes.back()->getUVCoords().size() * sizeof(float)); - indexBuffer->putData(BufferUtils::CreateIntBuffer(meshes.back()->getIndices()), 3 * meshes.back()->getIndices().size() * sizeof(int)); + auto vertexArray = graphics_factory->createVertexArray(); - vertexArray->pushVertexBuffer(vertexBuffer, 3); - vertexArray->pushVertexBuffer(normalsBuffer, 3); - vertexArray->pushVertexBuffer(uvBuffer, 2); - vertexArray->setIndexBuffer(indexBuffer); + auto vertexBuffer = graphics_factory->createVertexBuffer(); + auto normalsBuffer = graphics_factory->createVertexBuffer(); + auto uvBuffer = graphics_factory->createVertexBuffer(); + auto indexBuffer = graphics_factory->createIndexBuffer(); - meshes.back()->setVertexArray(vertexArray); - } - auto model = std::make_shared(meshes, materials); - model->setSources(file); - return model; + vertexBuffer->putData(BufferUtils::CreateFloatBuffer(vertices), 3 * vertices.size() * sizeof(float)); + normalsBuffer->putData(BufferUtils::CreateFloatBuffer(normals), 3 * normals.size() * sizeof(float)); + uvBuffer->putData(BufferUtils::CreateFloatBuffer(uvs), 2 * uvs.size() * sizeof(float)); + indexBuffer->putData(BufferUtils::CreateIntBuffer(indices), 3 * indices.size() * sizeof(int)); + + vertexArray->pushVertexBuffer(vertexBuffer, 3); + vertexArray->pushVertexBuffer(normalsBuffer, 3); + vertexArray->pushVertexBuffer(uvBuffer, 2); + vertexArray->setIndexBuffer(indexBuffer); + + mesh_->setVertexArray(vertexArray); + return mesh_; } AssetUID ModelLoader::extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene) { @@ -174,4 +202,27 @@ Eigen::Vector4f ModelLoader::colorToVec(aiColor4D *color) { return v; } +Eigen::Matrix4f ModelLoader::aiMat4ToEigen(const aiMatrix4x4 &m) { + Eigen::Matrix4f out; + + out(0, 0) = m.a1; + out(0, 1) = m.a2; + out(0, 2) = m.a3; + out(0, 3) = m.a4; + out(1, 0) = m.b1; + out(1, 1) = m.b2; + out(1, 2) = m.b3; + out(1, 3) = m.b4; + out(2, 0) = m.c1; + out(2, 1) = m.c2; + out(2, 2) = m.c3; + out(2, 3) = m.c4; + out(3, 0) = m.d1; + out(3, 1) = m.d2; + out(3, 2) = m.d3; + out(3, 3) = m.d4; + + return out; +} + } // namespace ICE From 8e0ddbfad243fc1e16b8de35deac8dd0256babed Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Thu, 11 Dec 2025 16:50:45 +0100 Subject: [PATCH 02/21] UBO done, slight issue with lights in phong shader --- Assets/Shaders/frag_uniforms.glsl | 15 ++++ Assets/Shaders/lastpass.fs | 2 +- Assets/Shaders/lastpass.vs | 2 +- Assets/Shaders/normal.fs | 2 +- Assets/Shaders/normal.vs | 8 +- Assets/Shaders/phong.fs | 18 +--- Assets/Shaders/phong.vs | 10 +-- Assets/Shaders/picking.fs | 2 +- Assets/Shaders/picking.vs | 8 +- Assets/Shaders/skybox.fs | 2 +- Assets/Shaders/skybox.vs | 10 ++- Assets/Shaders/solid.fs | 2 +- Assets/Shaders/solid.vs | 8 +- Assets/Shaders/vert_uniforms.glsl | 4 + ICE/Graphics/include/Buffers.h | 42 +++++---- ICE/Graphics/include/ForwardRenderer.h | 7 +- ICE/Graphics/include/GraphicsFactory.h | 2 + ICE/Graphics/include/Renderer.h | 27 ++++++ ICE/Graphics/src/ForwardRenderer.cpp | 56 ++++++------ ICE/GraphicsAPI/None/NoneGraphics.h | 8 ++ ICE/GraphicsAPI/None/NoneGraphicsFactory.h | 2 + .../OpenGL/include/OpenGLBuffers.h | 86 ++++++++++--------- .../OpenGL/include/OpenGLContext.h | 28 +++--- .../OpenGL/include/OpenGLFactory.h | 8 +- ICE/GraphicsAPI/OpenGL/src/OpenGLBuffers.cpp | 67 ++++++++++++--- ICE/IO/include/ShaderLoader.h | 1 + ICE/IO/src/ShaderLoader.cpp | 40 ++++++++- ICEBERG/src/Iceberg.cpp | 2 +- ICEFIELD/Assets/solid.fs | 2 +- ICEFIELD/Assets/solid.vs | 2 +- includes/ImGUI/imgui_impl_opengl3.cpp | 2 +- 31 files changed, 311 insertions(+), 164 deletions(-) create mode 100644 Assets/Shaders/frag_uniforms.glsl create mode 100644 Assets/Shaders/vert_uniforms.glsl diff --git a/Assets/Shaders/frag_uniforms.glsl b/Assets/Shaders/frag_uniforms.glsl new file mode 100644 index 00000000..f2eaff13 --- /dev/null +++ b/Assets/Shaders/frag_uniforms.glsl @@ -0,0 +1,15 @@ +#define MAX_LIGHTS 16 + +struct Light { + vec3 position; + vec3 rotation; + vec3 color; + float distance_dropoff; + int type; +}; + +layout(std140, binding = 1) uniform SceneLightsUBO { + Light lights[MAX_LIGHTS]; + int light_count; + vec4 ambient_light; +}; \ No newline at end of file diff --git a/Assets/Shaders/lastpass.fs b/Assets/Shaders/lastpass.fs index 7d9406c1..98582031 100644 --- a/Assets/Shaders/lastpass.fs +++ b/Assets/Shaders/lastpass.fs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core out vec4 fragColor; diff --git a/Assets/Shaders/lastpass.vs b/Assets/Shaders/lastpass.vs index 8fc78f1c..1812a240 100644 --- a/Assets/Shaders/lastpass.vs +++ b/Assets/Shaders/lastpass.vs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core layout (location = 0) in vec3 aPos; layout (location = 1) in vec2 aUV; diff --git a/Assets/Shaders/normal.fs b/Assets/Shaders/normal.fs index 1368ef7d..770248b4 100644 --- a/Assets/Shaders/normal.fs +++ b/Assets/Shaders/normal.fs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core out vec4 frag_color; diff --git a/Assets/Shaders/normal.vs b/Assets/Shaders/normal.vs index ef8b4d26..f45c8194 100644 --- a/Assets/Shaders/normal.vs +++ b/Assets/Shaders/normal.vs @@ -1,15 +1,15 @@ -#version 330 core +#version 420 core + +#include "vert_uniforms.glsl" layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; -uniform mat4 projection; -uniform mat4 view; uniform mat4 model; out vec3 f_normal; void main() { f_normal = abs(normal); - gl_Position = projection * view * model * vec4(vertex, 1.0); + gl_Position = uProjection * uView * model * vec4(vertex, 1.0); } \ No newline at end of file diff --git a/Assets/Shaders/phong.fs b/Assets/Shaders/phong.fs index 64fc5128..9dab910c 100644 --- a/Assets/Shaders/phong.fs +++ b/Assets/Shaders/phong.fs @@ -1,15 +1,8 @@ -#version 330 core -#define ICE_MAX_LIGHTS (16) +#version 420 core -out vec4 frag_color; +#include "frag_uniforms.glsl" -struct Light { - vec3 position; - vec3 rotation; - vec3 color; - int type; //0 = Point, 1 = Directional, 2 = Spot - float distance_dropoff; -}; +out vec4 frag_color; struct Material { vec4 albedo; @@ -26,9 +19,6 @@ struct Material { sampler2D normal_map; }; -uniform vec3 ambient_light; -uniform Light lights[ICE_MAX_LIGHTS]; -uniform int light_count; uniform Material material; in vec3 fnormal; @@ -88,7 +78,7 @@ void main() { normal = fnormal; } //ambient - vec4 color_accumulator = material.ambient * vec4(ambient_light, 1.0); + vec4 color_accumulator = material.ambient * ambient_light; if(material.use_ambient_map) { color_accumulator *= texture(material.ambient_map, ftex_coords); } diff --git a/Assets/Shaders/phong.vs b/Assets/Shaders/phong.vs index dec176ed..e698eb71 100644 --- a/Assets/Shaders/phong.vs +++ b/Assets/Shaders/phong.vs @@ -1,11 +1,11 @@ -#version 330 core +#version 420 core + +#include "vert_uniforms.glsl" layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; layout (location = 2) in vec2 tex_coords; -uniform mat4 projection; -uniform mat4 view; uniform mat4 model; out vec3 fnormal; @@ -14,9 +14,9 @@ out vec3 fview; out vec2 ftex_coords; void main() { - fview = (inverse(view) * vec4(0, 0, 0, 1)).xyz; + fview = (inverse(uView) * vec4(0, 0, 0, 1)).xyz; fnormal = normalize(mat3(transpose(inverse(model))) * normal); fposition = (model * vec4(vertex, 1.0)).xyz; ftex_coords = tex_coords; - gl_Position = projection * view * model * vec4(vertex, 1.0); + gl_Position = uProjection * uView * model * vec4(vertex, 1.0); } \ No newline at end of file diff --git a/Assets/Shaders/picking.fs b/Assets/Shaders/picking.fs index e8f7fe11..74642cb8 100644 --- a/Assets/Shaders/picking.fs +++ b/Assets/Shaders/picking.fs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core uniform int objectID; diff --git a/Assets/Shaders/picking.vs b/Assets/Shaders/picking.vs index b2320b25..e309f5a0 100644 --- a/Assets/Shaders/picking.vs +++ b/Assets/Shaders/picking.vs @@ -1,12 +1,12 @@ -#version 330 core +#version 420 core + +#include "vert_uniforms.glsl" layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; -uniform mat4 projection; -uniform mat4 view; uniform mat4 model; void main() { - gl_Position = projection * view * model * vec4(vertex, 1.0); + gl_Position = uProjection * uView * model * vec4(vertex, 1.0); } \ No newline at end of file diff --git a/Assets/Shaders/skybox.fs b/Assets/Shaders/skybox.fs index 9cede7a7..5ee05b3e 100644 --- a/Assets/Shaders/skybox.fs +++ b/Assets/Shaders/skybox.fs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core out vec4 FragColor; in vec3 TexCoords; diff --git a/Assets/Shaders/skybox.vs b/Assets/Shaders/skybox.vs index b7c2dfc1..0817ad8f 100644 --- a/Assets/Shaders/skybox.vs +++ b/Assets/Shaders/skybox.vs @@ -1,13 +1,15 @@ -#version 330 core +#version 420 core + +#include "vert_uniforms.glsl" + + layout (location = 0) in vec3 aPos; out vec3 TexCoords; -uniform mat4 projection; -uniform mat4 view; void main() { TexCoords = aPos; - gl_Position = projection * view * vec4(aPos, 1.0); + gl_Position = uProjection * uView * vec4(aPos, 1.0); } \ No newline at end of file diff --git a/Assets/Shaders/solid.fs b/Assets/Shaders/solid.fs index 2bc2b148..ffdd27a1 100644 --- a/Assets/Shaders/solid.fs +++ b/Assets/Shaders/solid.fs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core out vec4 frag_color; diff --git a/Assets/Shaders/solid.vs b/Assets/Shaders/solid.vs index c457cfbd..b3b2f510 100644 --- a/Assets/Shaders/solid.vs +++ b/Assets/Shaders/solid.vs @@ -1,13 +1,13 @@ -#version 330 core +#version 420 core + +#include "vert_uniforms.glsl" layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; layout (location = 2) in vec2 tex_coords; -uniform mat4 projection; -uniform mat4 view; uniform mat4 model; void main() { - gl_Position = projection * view * model * vec4(vertex, 1.0); + gl_Position = uProjection * uView * model * vec4(vertex, 1.0); } \ No newline at end of file diff --git a/Assets/Shaders/vert_uniforms.glsl b/Assets/Shaders/vert_uniforms.glsl new file mode 100644 index 00000000..2a813dc5 --- /dev/null +++ b/Assets/Shaders/vert_uniforms.glsl @@ -0,0 +1,4 @@ +layout(std140, binding = 0) uniform SceneData { + mat4 uProjection; + mat4 uView; +}; \ No newline at end of file diff --git a/ICE/Graphics/include/Buffers.h b/ICE/Graphics/include/Buffers.h index afdfcdde..50d4baa0 100644 --- a/ICE/Graphics/include/Buffers.h +++ b/ICE/Graphics/include/Buffers.h @@ -8,20 +8,30 @@ #include namespace ICE { - class VertexBuffer { - public: - virtual void bind() const = 0; - virtual void unbind() const = 0; - virtual void putData(const void* data, uint32_t size) = 0; - virtual uint32_t getSize() const = 0; - }; +class VertexBuffer { + public: + virtual void bind() const = 0; + virtual void unbind() const = 0; + virtual void putData(const void* data, uint32_t size) = 0; + virtual uint32_t getSize() const = 0; +}; - class IndexBuffer { - public: - virtual void bind() const = 0; - virtual void unbind() const = 0; - virtual void putData(const void* data, uint32_t size) = 0; - virtual uint32_t getSize() const = 0; - }; -} -#endif //ICE_BUFFERS_H +class IndexBuffer { + public: + virtual void bind() const = 0; + virtual void unbind() const = 0; + virtual void putData(const void* data, uint32_t size) = 0; + virtual uint32_t getSize() const = 0; +}; + +class UniformBuffer { + public: + virtual void bind() const = 0; + virtual void unbind() const = 0; + virtual void putData(const void* data, uint32_t size, uint32_t offset = 0) = 0; + virtual uint32_t getSize() const = 0; + virtual ~UniformBuffer() = default; +}; + +} // namespace ICE +#endif //ICE_BUFFERS_H diff --git a/ICE/Graphics/include/ForwardRenderer.h b/ICE/Graphics/include/ForwardRenderer.h index 9b58c811..28f604aa 100644 --- a/ICE/Graphics/include/ForwardRenderer.h +++ b/ICE/Graphics/include/ForwardRenderer.h @@ -19,6 +19,7 @@ #include "RendererConfig.h" namespace ICE { + class ForwardRenderer : public Renderer { public: ForwardRenderer(const std::shared_ptr& api, const std::shared_ptr& factory, @@ -50,9 +51,6 @@ class ForwardRenderer : public Renderer { std::shared_ptr target = nullptr; std::vector m_render_commands; - Eigen::Matrix4f m_view_matrix; - Eigen::Matrix4f m_projection_matrix; - std::unordered_set m_prepared_shaders; std::vector m_render_queue; std::vector m_lights; AssetUID m_skybox = NO_ASSET_ID; @@ -61,6 +59,9 @@ class ForwardRenderer : public Renderer { std::shared_ptr m_quad_vao; + std::shared_ptr m_camera_ubo; + std::shared_ptr m_light_ubo; + RendererConfig config; }; } // namespace ICE \ No newline at end of file diff --git a/ICE/Graphics/include/GraphicsFactory.h b/ICE/Graphics/include/GraphicsFactory.h index 329684c9..dac8290b 100644 --- a/ICE/Graphics/include/GraphicsFactory.h +++ b/ICE/Graphics/include/GraphicsFactory.h @@ -27,6 +27,8 @@ class GraphicsFactory { virtual std::shared_ptr createIndexBuffer() const = 0; + virtual std::shared_ptr createUniformBuffer(size_t size, size_t binding) const = 0; + virtual std::shared_ptr createShader(const std::string& vertexFile, const std::string& fragmentFile) const = 0; virtual std::shared_ptr createShader(const std::string& vertexFile, const std::string& geometryFile, diff --git a/ICE/Graphics/include/Renderer.h b/ICE/Graphics/include/Renderer.h index 1022c4eb..339544da 100644 --- a/ICE/Graphics/include/Renderer.h +++ b/ICE/Graphics/include/Renderer.h @@ -17,6 +17,33 @@ namespace ICE { class Scene; +constexpr int MAX_LIGHTS = 16; + +struct alignas(16) LightUBO { + Eigen::Vector3f position; + float __padding0; //align to vec4 + Eigen::Vector3f rotation; + float __padding1; //align to vec4 + Eigen::Vector3f color; + float __padding2; //align to vec4 + + float distance_dropoff; + int type; + float __padding3[2]; +}; + +struct alignas(16) SceneLightsUBO { + LightUBO lights[MAX_LIGHTS]; + int light_count; + float __padding0[3]; + Eigen::Vector4f ambient_light; +}; + +struct alignas(16) CameraUBO { + Eigen::Matrix4f projection; + Eigen::Matrix4f view; +}; + class Renderer { public: virtual void submit(Entity e) = 0; diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index 2f49f536..6ff16c21 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -35,6 +35,9 @@ ForwardRenderer::ForwardRenderer(const std::shared_ptr& api, const auto quad_ibo = factory->createIndexBuffer(); quad_ibo->putData(full_quad_idx.data(), full_quad_idx.size() * sizeof(int)); m_quad_vao->setIndexBuffer(quad_ibo); + + m_camera_ubo = factory->createUniformBuffer(sizeof(CameraUBO), 0); + m_light_ubo = factory->createUniformBuffer(sizeof(SceneLightsUBO), 1); } void ForwardRenderer::submit(Entity e) { @@ -89,9 +92,30 @@ void ForwardRenderer::prepareFrame(Camera& camera) { .depthTest = false}); } - m_view_matrix = camera.lookThrough(); - m_projection_matrix = camera.getProjection(); - auto frustum = extractFrustumPlanes(camera.getProjection() * m_view_matrix); + auto view_mat = camera.lookThrough(); + auto proj_mat = camera.getProjection(); + + CameraUBO camera_ubo_data{.projection = proj_mat, .view = view_mat}; + m_camera_ubo->putData(&camera_ubo_data, sizeof(CameraUBO)); + + SceneLightsUBO light_ubo_data; + light_ubo_data.light_count = m_lights.size(); + light_ubo_data.ambient_light = Eigen::Vector4f(0.1f, 0.1f, 0.1f, 1.0f); + for (int i = 0; i < m_lights.size(); i++) { + auto light = m_lights[i]; + auto lc = m_registry->getComponent(light); + auto tc = m_registry->getComponent(light); + if (i >= MAX_LIGHTS) + break; + light_ubo_data.lights[i].position = tc->getPosition(); + light_ubo_data.lights[i].rotation = tc->getRotation(); + light_ubo_data.lights[i].color = lc->color; + light_ubo_data.lights[i].distance_dropoff = lc->distance_dropoff; + light_ubo_data.lights[i].type = static_cast(lc->type); + } + m_light_ubo->putData(&light_ubo_data, sizeof(SceneLightsUBO)); + + auto frustum = extractFrustumPlanes(proj_mat * view_mat); for (const auto& e : m_render_queue) { auto rc = m_registry->getComponent(e); auto tc = m_registry->getComponent(e); @@ -144,31 +168,8 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& continue; } - if (!m_prepared_shaders.contains(material->getShader())) { - shader->bind(); - - shader->loadMat4("projection", m_projection_matrix); - shader->loadMat4("view", m_view_matrix); - - shader->loadFloat3("ambient_light", Eigen::Vector3f(0.1f, 0.1f, 0.1f)); - int i = 0; - for (const auto& e : m_lights) { - auto light = m_registry->getComponent(e); - auto transform = m_registry->getComponent(e); - std::string light_name = (std::string("lights[") + std::to_string(i) + std::string("].")); - shader->loadFloat3((light_name + std::string("position")).c_str(), transform->getPosition()); - shader->loadFloat3((light_name + std::string("rotation")).c_str(), transform->getRotation()); - shader->loadFloat3((light_name + std::string("color")).c_str(), light->color); - shader->loadFloat((light_name + std::string("distance_dropoff")).c_str(), light->distance_dropoff); - shader->loadInt((light_name + std::string("type")).c_str(), static_cast(light->type)); - i++; - } - shader->loadInt("light_count", i); - m_prepared_shaders.emplace(material->getShader()); - } - if (!mesh) { - return; + continue; } std::unordered_map> texs; @@ -219,7 +220,6 @@ void ForwardRenderer::render() { void ForwardRenderer::endFrame() { m_api->checkAndLogErrors(); m_render_commands.clear(); - m_prepared_shaders.clear(); if (this->target != nullptr) this->target->unbind(); } diff --git a/ICE/GraphicsAPI/None/NoneGraphics.h b/ICE/GraphicsAPI/None/NoneGraphics.h index 685c2ec7..1fc154b8 100644 --- a/ICE/GraphicsAPI/None/NoneGraphics.h +++ b/ICE/GraphicsAPI/None/NoneGraphics.h @@ -27,6 +27,14 @@ class NoneIndexBuffer : public IndexBuffer { void putData(const void *data, uint32_t size) override {} }; +class NoneUniformBuffer : public IndexBuffer { + public: + void bind() const override {} + void unbind() const override {} + uint32_t getSize() const override { return 0; } + void putData(const void *data, uint32_t size) override {} +}; + class NoneContext : public Context { public: void swapBuffers() override {} diff --git a/ICE/GraphicsAPI/None/NoneGraphicsFactory.h b/ICE/GraphicsAPI/None/NoneGraphicsFactory.h index 2baeac67..5dd4eb69 100644 --- a/ICE/GraphicsAPI/None/NoneGraphicsFactory.h +++ b/ICE/GraphicsAPI/None/NoneGraphicsFactory.h @@ -26,6 +26,8 @@ class NoneGraphicsFactory : public GraphicsFactory { std::shared_ptr createIndexBuffer() const override { return std::make_shared(); } + std::shared_ptr createUniformBuffer(size_t size, size_t binding) const override { return std::make_shared(); } + std::shared_ptr createShader(const std::string& vertexFile, const std::string& fragmentFile) const override { return createShader(vertexFile, "", fragmentFile); } diff --git a/ICE/GraphicsAPI/OpenGL/include/OpenGLBuffers.h b/ICE/GraphicsAPI/OpenGL/include/OpenGLBuffers.h index 9e8b5681..57de3812 100644 --- a/ICE/GraphicsAPI/OpenGL/include/OpenGLBuffers.h +++ b/ICE/GraphicsAPI/OpenGL/include/OpenGLBuffers.h @@ -5,47 +5,53 @@ #ifndef ICE_OPENGLBUFFERS_H #define ICE_OPENGLBUFFERS_H -#include #include +#include namespace ICE { - class OpenGLVertexBuffer : public VertexBuffer { - public: - void bind() const override; - - void unbind() const override; - - void putData(const void *data, uint32_t size) override; - - uint32_t getSize() const override; - - OpenGLVertexBuffer(): OpenGLVertexBuffer(0) {} - - OpenGLVertexBuffer(uint32_t size); - - private: - GLuint id; - uint32_t size; - }; - - class OpenGLIndexBuffer : public IndexBuffer { - public: - void bind() const override; - - void unbind() const override; - - uint32_t getSize() const override; - - void putData(const void *data, uint32_t size) override; - - OpenGLIndexBuffer(); - - private: - GLuint id; - uint32_t size; - }; -} - - -#endif //ICE_OPENGLBUFFERS_H +class OpenGLVertexBuffer : public VertexBuffer { + public: + void bind() const override; + void unbind() const override; + void putData(const void *data, uint32_t size) override; + uint32_t getSize() const override; + OpenGLVertexBuffer() : OpenGLVertexBuffer(0) {} + OpenGLVertexBuffer(uint32_t size); + + private: + GLuint id; + uint32_t size; +}; + +class OpenGLIndexBuffer : public IndexBuffer { + public: + void bind() const override; + void unbind() const override; + uint32_t getSize() const override; + void putData(const void *data, uint32_t size) override; + + OpenGLIndexBuffer(); + + private: + GLuint id; + uint32_t size; +}; + +class OpenGLUniformBuffer : public UniformBuffer { + public: + void bind() const override; + void unbind() const override; + uint32_t getSize() const override; + void putData(const void *data, uint32_t size, uint32_t offset = 0) override; + OpenGLUniformBuffer(uint32_t _size, uint32_t _binding); + ~OpenGLUniformBuffer() override; + + private: + GLuint id; + uint32_t size; + uint32_t binding; +}; +} // namespace ICE + +#endif //ICE_OPENGLBUFFERS_H diff --git a/ICE/GraphicsAPI/OpenGL/include/OpenGLContext.h b/ICE/GraphicsAPI/OpenGL/include/OpenGLContext.h index b6dfe7a3..59d7b35e 100644 --- a/ICE/GraphicsAPI/OpenGL/include/OpenGLContext.h +++ b/ICE/GraphicsAPI/OpenGL/include/OpenGLContext.h @@ -5,29 +5,29 @@ #ifndef ICE_OPENGLCONTEXT_H #define ICE_OPENGLCONTEXT_H +#include #include #include -#include #include + #include namespace ICE { - class OpenGLContext : public Context { - public: - void swapBuffers() override; - - void wireframeMode() override; +class OpenGLContext : public Context { + public: + void swapBuffers() override; - void fillMode() override; + void wireframeMode() override; - void initialize() override; + void fillMode() override; - OpenGLContext(const std::shared_ptr &window); + void initialize() override; - private: - std::shared_ptr m_window; - }; -} + OpenGLContext(const std::shared_ptr &window); + private: + std::shared_ptr m_window; +}; +} // namespace ICE -#endif //ICE_OPENGLCONTEXT_H +#endif //ICE_OPENGLCONTEXT_H diff --git a/ICE/GraphicsAPI/OpenGL/include/OpenGLFactory.h b/ICE/GraphicsAPI/OpenGL/include/OpenGLFactory.h index 89a7d543..a23d74f8 100644 --- a/ICE/GraphicsAPI/OpenGL/include/OpenGLFactory.h +++ b/ICE/GraphicsAPI/OpenGL/include/OpenGLFactory.h @@ -32,6 +32,10 @@ class OpenGLFactory : public GraphicsFactory { std::shared_ptr createVertexBuffer() const override { return std::make_shared(); } + std::shared_ptr createUniformBuffer(size_t size, size_t binding) const override { + return std::make_shared(size, binding); + } + std::shared_ptr createIndexBuffer() const override { return std::make_shared(); } std::shared_ptr createShader(const std::string& vertex_src, const std::string& fragment_src) const override { @@ -44,7 +48,9 @@ class OpenGLFactory : public GraphicsFactory { } std::shared_ptr createTexture2D(const std::string& file) const override { return std::make_shared(file); } - std::shared_ptr createTexture2D(const void* data, size_t w, size_t h, TextureFormat fmt) const override { return std::make_shared(data, w, h, fmt); } + std::shared_ptr createTexture2D(const void* data, size_t w, size_t h, TextureFormat fmt) const override { + return std::make_shared(data, w, h, fmt); + } std::shared_ptr createTextureCube(const std::string& file) const override { return std::make_shared(file); } }; diff --git a/ICE/GraphicsAPI/OpenGL/src/OpenGLBuffers.cpp b/ICE/GraphicsAPI/OpenGL/src/OpenGLBuffers.cpp index 510421c4..7759d889 100644 --- a/ICE/GraphicsAPI/OpenGL/src/OpenGLBuffers.cpp +++ b/ICE/GraphicsAPI/OpenGL/src/OpenGLBuffers.cpp @@ -3,50 +3,91 @@ // #include "OpenGLBuffers.h" + #include -ICE::OpenGLVertexBuffer::OpenGLVertexBuffer(uint32_t size) : size(size) { - glGenBuffers(1, &id); -} +namespace ICE { -void ICE::OpenGLIndexBuffer::bind() const { +/////////////////////////////////// INDEX BUFFER ////////////////////////////////// + +void OpenGLIndexBuffer::bind() const { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->id); } -void ICE::OpenGLIndexBuffer::unbind() const { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //not sure this makes sense +void OpenGLIndexBuffer::unbind() const { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //not sure this makes sense } -uint32_t ICE::OpenGLIndexBuffer::getSize() const { +uint32_t OpenGLIndexBuffer::getSize() const { return this->size; } -void ICE::OpenGLIndexBuffer::putData(const void *data, uint32_t size) { +void OpenGLIndexBuffer::putData(const void *data, uint32_t size) { this->bind(); glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, data, GL_STATIC_DRAW); this->size = size; this->unbind(); } -ICE::OpenGLIndexBuffer::OpenGLIndexBuffer() { +OpenGLIndexBuffer::OpenGLIndexBuffer() { glGenBuffers(1, &id); } -void ICE::OpenGLVertexBuffer::bind() const { +/////////////////////////////////// VERTEX BUFFER ////////////////////////////////// + +OpenGLVertexBuffer::OpenGLVertexBuffer(uint32_t size) : size(size) { + glGenBuffers(1, &id); +} + +void OpenGLVertexBuffer::bind() const { glBindBuffer(GL_ARRAY_BUFFER, this->id); } -void ICE::OpenGLVertexBuffer::unbind() const { +void OpenGLVertexBuffer::unbind() const { glBindBuffer(GL_ARRAY_BUFFER, 0); } -void ICE::OpenGLVertexBuffer::putData(const void *data, uint32_t size) { +void OpenGLVertexBuffer::putData(const void *data, uint32_t size) { this->bind(); glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW); this->size = size; this->unbind(); } -uint32_t ICE::OpenGLVertexBuffer::getSize() const { +uint32_t OpenGLVertexBuffer::getSize() const { return this->size; } + +////////////////////////////////// UNIFORM BUFFER ////////////////////////////////// + +OpenGLUniformBuffer::OpenGLUniformBuffer(uint32_t _size, uint32_t _binding) : size(_size), binding(_binding) { + glGenBuffers(1, &id); + glBindBuffer(GL_UNIFORM_BUFFER, id); + glBufferData(GL_UNIFORM_BUFFER, size, nullptr, GL_DYNAMIC_DRAW); + glBindBufferBase(GL_UNIFORM_BUFFER, binding, id); + glBindBuffer(GL_UNIFORM_BUFFER, 0); +} + +OpenGLUniformBuffer::~OpenGLUniformBuffer() { + glDeleteBuffers(1, &id); +} + +void OpenGLUniformBuffer::bind() const { + glBindBuffer(GL_UNIFORM_BUFFER, id); +} + +uint32_t OpenGLUniformBuffer::getSize() const { + return size; +} + +void OpenGLUniformBuffer::unbind() const { + glBindBuffer(GL_UNIFORM_BUFFER, 0); +} + +void OpenGLUniformBuffer::putData(const void *data, uint32_t _size, uint32_t offset) { + bind(); + glBufferSubData(GL_UNIFORM_BUFFER, offset, size, data); + unbind(); + size = _size; +} +} // namespace ICE diff --git a/ICE/IO/include/ShaderLoader.h b/ICE/IO/include/ShaderLoader.h index 99415fb4..648f96e0 100644 --- a/ICE/IO/include/ShaderLoader.h +++ b/ICE/IO/include/ShaderLoader.h @@ -15,5 +15,6 @@ class ShaderLoader : public IAssetLoader { public: ShaderLoader(const std::shared_ptr &factory) : IAssetLoader(factory) {} std::shared_ptr load(const std::vector &file) override; + std::string readAndResolveIncludes(const std::filesystem::path &file); }; } // namespace ICE diff --git a/ICE/IO/src/ShaderLoader.cpp b/ICE/IO/src/ShaderLoader.cpp index a5cf484b..8668c50d 100644 --- a/ICE/IO/src/ShaderLoader.cpp +++ b/ICE/IO/src/ShaderLoader.cpp @@ -7,19 +7,20 @@ #include #include -#include "FileUtils.h" +#include +#include namespace ICE { std::shared_ptr ShaderLoader::load(const std::vector &files) { if (files.size() < 2) { throw ICEException("Shaders must have at least 2 files"); } + std::shared_ptr shader; if (files.size() == 2) { - shader = graphics_factory->createShader(FileUtils::readFile(files[0].string()), FileUtils::readFile(files[1].string())); + shader = graphics_factory->createShader(readAndResolveIncludes(files[0]), readAndResolveIncludes(files[1])); } else if (files.size() == 3) { - shader = graphics_factory->createShader(FileUtils::readFile(files[0].string()), FileUtils::readFile(files[1].string()), - FileUtils::readFile(files[2].string())); + shader = graphics_factory->createShader(readAndResolveIncludes(files[0]), readAndResolveIncludes(files[1]), readAndResolveIncludes(files[2])); } else { throw ICEException("Too many files for shader"); } @@ -27,4 +28,35 @@ std::shared_ptr ShaderLoader::load(const std::vectorsetSources(files); return shader; } + +std::string ShaderLoader::readAndResolveIncludes(const std::filesystem::path &file_path) { + std::ifstream file(file_path); + if (!file.is_open()) { + throw std::runtime_error("Failed to open shader file: " + file_path.string()); + } + + std::stringstream result; + std::string line; + + while (std::getline(file, line)) { + // Trim whitespace + auto trimmed = line; + trimmed.erase(0, trimmed.find_first_not_of(" \t\r\n")); + trimmed.erase(trimmed.find_last_not_of(" \t\r\n") + 1); + + if (trimmed.starts_with("#include")) { + size_t startQuote = trimmed.find('"'); + size_t endQuote = trimmed.find('"', startQuote + 1); + if (startQuote != std::string::npos && endQuote != std::string::npos) { + std::filesystem::path includePath = file_path.parent_path() / trimmed.substr(startQuote + 1, endQuote - startQuote - 1); + result << readAndResolveIncludes(includePath) << "\n"; + continue; + } + } + result << line << "\n"; + } + + return result.str(); +} + } // namespace ICE \ No newline at end of file diff --git a/ICEBERG/src/Iceberg.cpp b/ICEBERG/src/Iceberg.cpp index 3207d995..e0909a96 100644 --- a/ICEBERG/src/Iceberg.cpp +++ b/ICEBERG/src/Iceberg.cpp @@ -92,7 +92,7 @@ int main(int argc, char const* argv[]) { ImGuiIO& io = ImGui::GetIO(); io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls ImGui_ImplGlfw_InitForOpenGL(static_cast(window->getHandle()), true); - ImGui_ImplOpenGL3_Init("#version 330 core"); + ImGui_ImplOpenGL3_Init("#version 420 core"); Iceberg iceberg(window); diff --git a/ICEFIELD/Assets/solid.fs b/ICEFIELD/Assets/solid.fs index 2bc2b148..ffdd27a1 100644 --- a/ICEFIELD/Assets/solid.fs +++ b/ICEFIELD/Assets/solid.fs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core out vec4 frag_color; diff --git a/ICEFIELD/Assets/solid.vs b/ICEFIELD/Assets/solid.vs index c457cfbd..3da3a435 100644 --- a/ICEFIELD/Assets/solid.vs +++ b/ICEFIELD/Assets/solid.vs @@ -1,4 +1,4 @@ -#version 330 core +#version 420 core layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; diff --git a/includes/ImGUI/imgui_impl_opengl3.cpp b/includes/ImGUI/imgui_impl_opengl3.cpp index 6aa49ea3..c4963dd4 100644 --- a/includes/ImGUI/imgui_impl_opengl3.cpp +++ b/includes/ImGUI/imgui_impl_opengl3.cpp @@ -96,7 +96,7 @@ // 3.0 130 "#version 130" // 3.1 140 "#version 140" // 3.2 150 "#version 150" -// 3.3 330 "#version 330 core" +// 3.3 330 "#version 420 core" // 4.0 400 "#version 400 core" // 4.1 410 "#version 410 core" // 4.2 420 "#version 410 core" From 9ae85cfe9f7949833f46c64324c154c85d828f11 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 11 Dec 2025 19:05:23 +0100 Subject: [PATCH 03/21] Copy full asset folder instead of individual files --- ICE/IO/src/Project.cpp | 693 ++++++++++++++++++++--------------------- 1 file changed, 339 insertions(+), 354 deletions(-) diff --git a/ICE/IO/src/Project.cpp b/ICE/IO/src/Project.cpp index 397fb3dc..7cb537e7 100644 --- a/ICE/IO/src/Project.cpp +++ b/ICE/IO/src/Project.cpp @@ -1,355 +1,340 @@ -// -// Created by Thomas Ibanez on 09.12.20. -// - -#include "Project.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "MaterialExporter.h" - -namespace ICE { -Project::Project(const fs::path &base_directory, const std::string &name) - : m_base_directory(base_directory / name), - name(name), - assetBank(std::make_shared(std::make_shared())) { - cameraPosition.setZero(); - cameraRotation.setZero(); - constexpr std::string_view assets_folder = "Assets"; - m_materials_directory = m_base_directory / assets_folder / "Materials"; - m_shaders_directory = m_base_directory / assets_folder / "Shaders"; - m_textures_directory = m_base_directory / assets_folder / "Textures"; - m_cubemaps_directory = m_base_directory / assets_folder / "Cubemaps"; - m_meshes_directory = m_base_directory / assets_folder / "Models"; - m_scenes_directory = m_base_directory / "Scenes"; -} - -bool Project::CreateDirectories() { - fs::create_directories(m_materials_directory); - fs::create_directories(m_shaders_directory); - fs::create_directories(m_textures_directory); - fs::create_directories(m_cubemaps_directory); - fs::create_directories(m_meshes_directory); - fs::create_directories(m_scenes_directory); - - copyAssetFile("Models", "cube", "Assets/Models/cube.obj"); - copyAssetFile("Models", "sphere", "Assets/Models/sphere.obj"); - copyAssetFile("Shaders", "phong", "Assets/Shaders/phong.vs"); - copyAssetFile("Shaders", "phong", "Assets/Shaders/phong.fs"); - copyAssetFile("Shaders", "solid", "Assets/Shaders/solid.vs"); - copyAssetFile("Shaders", "solid", "Assets/Shaders/solid.fs"); - copyAssetFile("Shaders", "normal", "Assets/Shaders/normal.vs"); - copyAssetFile("Shaders", "normal", "Assets/Shaders/normal.fs"); - copyAssetFile("Shaders", "picking", "Assets/Shaders/picking.vs"); - copyAssetFile("Shaders", "picking", "Assets/Shaders/picking.fs"); - copyAssetFile("Shaders", "lastpass", "Assets/Shaders/lastpass.vs"); - copyAssetFile("Shaders", "lastpass", "Assets/Shaders/lastpass.fs"); - copyAssetFile("Cubemaps", "skybox", "Assets/Textures/skybox.png"); - copyAssetFile("Materials", "base_mat", "Assets/Materials/base_mat.icm"); - - assetBank->addAsset("solid", {m_shaders_directory / "solid.vs", m_shaders_directory / "solid.fs"}); - assetBank->addAsset("phong", {m_shaders_directory / "phong.vs", m_shaders_directory / "phong.fs"}); - assetBank->addAsset("normal", {m_shaders_directory / "normal.vs", m_shaders_directory / "normal.fs"}); - assetBank->addAsset("lastpass", {m_shaders_directory / "lastpass.vs", m_shaders_directory / "lastpass.fs"}); - assetBank->addAsset("__ice__picking_shader", {m_shaders_directory / "picking.vs", m_shaders_directory / "picking.fs"}); - - assetBank->addAsset("skybox", {m_cubemaps_directory / "skybox.png"}); - - assetBank->addAsset("base_mat", {m_materials_directory / "base_mat.icm"}); - - assetBank->addAsset("cube", {m_meshes_directory / "cube.obj"}); - assetBank->addAsset("sphere", {m_meshes_directory / "sphere.obj"}); - - scenes.push_back(std::make_shared("MainScene")); - setCurrentScene(getScenes()[0]); - return true; -} - -fs::path Project::getBaseDirectory() const { - return m_base_directory; -} - -std::string Project::getName() const { - return name; -} - -void Project::writeToFile(const std::shared_ptr &editorCamera) { - std::ofstream outstream; - outstream.open(m_base_directory / (name + ".ice")); - json j; - - j["camera_position"] = dumpVec3(editorCamera->getPosition()); - j["camera_rotation"] = dumpVec3(editorCamera->getRotation()); - - std::vector vec; - for (const auto &s : scenes) { - vec.push_back(s->getName()); - } - j["scenes"] = vec; - vec.clear(); - - for (const auto &[asset_id, mesh] : assetBank->getAll()) { - vec.push_back(dumpAsset(asset_id, mesh)); - } - j["models"] = vec; - vec.clear(); - - for (const auto &[asset_id, material] : assetBank->getAll()) { - auto mtlName = assetBank->getName(asset_id).getName(); - - fs::path path = m_materials_directory.parent_path() / (assetBank->getName(asset_id).prefix() + mtlName + ".icm"); - fs::create_directories(path.parent_path()); - MaterialExporter().writeToJson(path, *material); - - material->setSources({path}); - - vec.push_back(dumpAsset(asset_id, material)); - } - j["materials"] = vec; - vec.clear(); - - for (const auto &[asset_id, shader] : assetBank->getAll()) { - vec.push_back(dumpAsset(asset_id, shader)); - } - j["shaders"] = vec; - vec.clear(); - - for (const auto &[asset_id, texture] : assetBank->getAll()) { - vec.push_back(dumpAsset(asset_id, texture)); - } - j["textures2D"] = vec; - vec.clear(); - - for (const auto &[asset_id, texture] : assetBank->getAll()) { - vec.push_back(dumpAsset(asset_id, texture)); - } - j["cubeMaps"] = vec; - - outstream << j.dump(4); - outstream.close(); - - for (const auto &s : scenes) { - outstream.open(m_scenes_directory / (s->getName() + ".ics")); - j.clear(); - - j["name"] = s->getName(); - json entities = json::array(); - for (auto e : s->getRegistry()->getEntities()) { - json entity; - entity["id"] = e; - entity["name"] = s->getAlias(e); - entity["parent"] = s->getGraph()->getParentID(e); - - if (s->getRegistry()->entityHasComponent(e)) { - RenderComponent rc = *s->getRegistry()->getComponent(e); - json renderjson; - renderjson["model"] = rc.model; - entity["renderComponent"] = renderjson; - } - if (s->getRegistry()->entityHasComponent(e)) { - TransformComponent tc = *s->getRegistry()->getComponent(e); - json transformjson; - transformjson["position"] = dumpVec3(tc.getPosition()); - transformjson["rotation"] = dumpVec3(tc.getRotation()); - transformjson["scale"] = dumpVec3(tc.getScale()); - entity["transformComponent"] = transformjson; - } - if (s->getRegistry()->entityHasComponent(e)) { - LightComponent lc = *s->getRegistry()->getComponent(e); - json lightjson; - lightjson["color"] = dumpVec3(lc.color); - lightjson["type"] = lc.type; - entity["lightComponent"] = lightjson; - } - entities.push_back(entity); - } - j["entities"] = entities; - outstream << j.dump(4); - outstream.close(); - } -} - -json Project::dumpAsset(AssetUID uid, const std::shared_ptr &asset) { - auto asset_path = assetBank->getName(uid); - json tmp; - auto paths = asset->getSources(); - std::vector sources(paths.size()); - std::transform(paths.begin(), paths.end(), sources.begin(), [this](const fs::path &path) { - auto relative = path.lexically_relative(m_base_directory); - return relative.string(); - }); - tmp["bank_path"] = asset_path.toString(); - tmp["uid"] = uid; - tmp["sources"] = sources; - return tmp; -} - -void Project::loadFromFile() { - std::ifstream infile = std::ifstream(m_base_directory / (name + ".ice")); - json j; - infile >> j; - infile.close(); - - std::vector sceneNames = j["scenes"]; - json meshes = j["models"]; - json material = j["materials"]; - json shader = j["shaders"]; - json texture = j["textures2D"]; - json cubeMap = j["cubeMaps"]; - - cameraPosition = JsonParser::parseVec3(j["camera_position"]); - cameraRotation = JsonParser::parseVec3(j["camera_rotation"]); - - loadAssetsOfType(shader); - loadAssetsOfType(texture); - loadAssetsOfType(cubeMap); - loadAssetsOfType(material); - loadAssetsOfType(meshes); - - for (const auto &s : sceneNames) { - infile = std::ifstream(m_scenes_directory / (s + ".ics")); - json scenejson; - infile >> scenejson; - infile.close(); - - Scene scene = Scene(scenejson["name"]); - - for (json jentity : scenejson["entities"]) { - Entity e = jentity["id"]; - Entity parent = jentity["parent"]; - std::string alias = jentity["name"]; - - scene.addEntity(e, alias, 0); - - if (!jentity["transformComponent"].is_null()) { - json tj = jentity["transformComponent"]; - TransformComponent tc(JsonParser::parseVec3(tj["position"]), JsonParser::parseVec3(tj["rotation"]), - JsonParser::parseVec3(tj["scale"])); - scene.getRegistry()->addComponent(e, tc); - } - if (!jentity["renderComponent"].is_null()) { - json rj = jentity["renderComponent"]; - RenderComponent rc(rj["model"]); - scene.getRegistry()->addComponent(e, rc); - } - if (!jentity["lightComponent"].is_null()) { - json lj = jentity["lightComponent"]; - LightComponent lc(static_cast((int) lj["type"]), JsonParser::parseVec3(lj["color"])); - scene.getRegistry()->addComponent(e, lc); - } - } - for (json jentity : scenejson["entities"]) { - Entity e = jentity["id"]; - Entity parent = jentity["parent"]; - scene.getGraph()->setParent(e, parent, true); - } - addScene(scene); - //TODO: it would be better to save the current scene index - setCurrentScene(getScenes()[0]); - } -} - -void Project::copyAssetFile(const fs::path &folder, const std::string &assetName, const fs::path &src) { - auto subfolder = m_base_directory / "Assets" / folder; - fs::create_directories(subfolder); - - auto dst = subfolder / (assetName + src.extension().string()); - std::ifstream srcStream(src, std::ios::binary); - std::ofstream dstStream(dst, std::ios::binary); - - dstStream << srcStream.rdbuf(); - dstStream.flush(); - srcStream.close(); - dstStream.close(); -} - -bool Project::renameAsset(const AssetPath &oldName, const AssetPath &newName) { - if (newName.getName() == "" || newName.prefix() != oldName.prefix()) { - return false; - } - if (assetBank->renameAsset(oldName, newName)) { - auto path = m_base_directory / "Assets"; - for (const auto &file : getFilesInDir(path / oldName.prefix())) { - if (file.substr(0, file.find_last_of(".")) == oldName.getName()) { - if (rename((path / oldName.prefix() / file).string().c_str(), - (path / oldName.prefix() / (newName.getName() + file.substr(file.find_last_of(".")))).string().c_str()) - == 0) { - return true; - } - } - } - return true; - } - return false; -} - -std::vector Project::getFilesInDir(const fs::path &folder) { - std::vector files; - for (const auto &entry : fs::directory_iterator(folder)) { - std::string sp = entry.path().string(); - files.push_back(sp.substr(sp.find_last_of("/") + 1)); - } - return files; -} - -std::vector> Project::getScenes() { - return scenes; -} - -void Project::setScenes(const std::vector> &scenes) { - Project::scenes = scenes; -} - -std::shared_ptr Project::getAssetBank() { - return assetBank; -} - -void Project::setAssetBank(const std::shared_ptr &assetBank) { - Project::assetBank = assetBank; -} - -void Project::addScene(const Scene &scene) { - scenes.push_back(std::make_shared(scene)); -} - -void Project::setCurrentScene(const std::shared_ptr &scene) { - m_current_scene = scene; -} -std::shared_ptr Project::getCurrentScene() const { - return m_current_scene; -} - -json Project::dumpVec3(const Eigen::Vector3f &v) { - json r; - r["x"] = v.x(); - r["y"] = v.y(); - r["z"] = v.z(); - return r; -} - -json Project::dumpVec4(const Eigen::Vector4f &v) { - json r; - r["x"] = v.x(); - r["y"] = v.y(); - r["z"] = v.z(); - r["w"] = v.w(); - return r; -} - -const Eigen::Vector3f &Project::getCameraPosition() const { - return cameraPosition; -} - -const Eigen::Vector3f &Project::getCameraRotation() const { - return cameraRotation; -} +// +// Created by Thomas Ibanez on 09.12.20. +// + +#include "Project.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "MaterialExporter.h" + +namespace ICE { +Project::Project(const fs::path &base_directory, const std::string &name) + : m_base_directory(base_directory / name), + name(name), + assetBank(std::make_shared(std::make_shared())) { + cameraPosition.setZero(); + cameraRotation.setZero(); + constexpr std::string_view assets_folder = "Assets"; + m_materials_directory = m_base_directory / assets_folder / "Materials"; + m_shaders_directory = m_base_directory / assets_folder / "Shaders"; + m_textures_directory = m_base_directory / assets_folder / "Textures"; + m_cubemaps_directory = m_base_directory / assets_folder / "Cubemaps"; + m_meshes_directory = m_base_directory / assets_folder / "Models"; + m_scenes_directory = m_base_directory / "Scenes"; +} + +bool Project::CreateDirectories() { + fs::create_directories(m_scenes_directory); + try { + fs::create_directories(m_base_directory / "Assets"); + fs::copy("Assets", m_base_directory / "Assets", fs::copy_options::recursive); + } catch (std::filesystem::filesystem_error &e) { + Logger::Log(Logger::FATAL, "IO", "Could not copy default assets: %s", e.what()); + } + assetBank->addAsset("solid", {m_shaders_directory / "solid.vs", m_shaders_directory / "solid.fs"}); + assetBank->addAsset("phong", {m_shaders_directory / "phong.vs", m_shaders_directory / "phong.fs"}); + assetBank->addAsset("normal", {m_shaders_directory / "normal.vs", m_shaders_directory / "normal.fs"}); + assetBank->addAsset("lastpass", {m_shaders_directory / "lastpass.vs", m_shaders_directory / "lastpass.fs"}); + assetBank->addAsset("__ice__picking_shader", {m_shaders_directory / "picking.vs", m_shaders_directory / "picking.fs"}); + + assetBank->addAsset("skybox", {m_cubemaps_directory / "skybox.png"}); + + assetBank->addAsset("base_mat", {m_materials_directory / "base_mat.icm"}); + + assetBank->addAsset("cube", {m_meshes_directory / "cube.obj"}); + assetBank->addAsset("sphere", {m_meshes_directory / "sphere.obj"}); + + scenes.push_back(std::make_shared("MainScene")); + setCurrentScene(getScenes()[0]); + return true; +} + +fs::path Project::getBaseDirectory() const { + return m_base_directory; +} + +std::string Project::getName() const { + return name; +} + +void Project::writeToFile(const std::shared_ptr &editorCamera) { + std::ofstream outstream; + outstream.open(m_base_directory / (name + ".ice")); + json j; + + j["camera_position"] = dumpVec3(editorCamera->getPosition()); + j["camera_rotation"] = dumpVec3(editorCamera->getRotation()); + + std::vector vec; + for (const auto &s : scenes) { + vec.push_back(s->getName()); + } + j["scenes"] = vec; + vec.clear(); + + for (const auto &[asset_id, mesh] : assetBank->getAll()) { + vec.push_back(dumpAsset(asset_id, mesh)); + } + j["models"] = vec; + vec.clear(); + + for (const auto &[asset_id, material] : assetBank->getAll()) { + auto mtlName = assetBank->getName(asset_id).getName(); + + fs::path path = m_materials_directory.parent_path() / (assetBank->getName(asset_id).prefix() + mtlName + ".icm"); + fs::create_directories(path.parent_path()); + MaterialExporter().writeToJson(path, *material); + + material->setSources({path}); + + vec.push_back(dumpAsset(asset_id, material)); + } + j["materials"] = vec; + vec.clear(); + + for (const auto &[asset_id, shader] : assetBank->getAll()) { + vec.push_back(dumpAsset(asset_id, shader)); + } + j["shaders"] = vec; + vec.clear(); + + for (const auto &[asset_id, texture] : assetBank->getAll()) { + vec.push_back(dumpAsset(asset_id, texture)); + } + j["textures2D"] = vec; + vec.clear(); + + for (const auto &[asset_id, texture] : assetBank->getAll()) { + vec.push_back(dumpAsset(asset_id, texture)); + } + j["cubeMaps"] = vec; + + outstream << j.dump(4); + outstream.close(); + + for (const auto &s : scenes) { + outstream.open(m_scenes_directory / (s->getName() + ".ics")); + j.clear(); + + j["name"] = s->getName(); + json entities = json::array(); + for (auto e : s->getRegistry()->getEntities()) { + json entity; + entity["id"] = e; + entity["name"] = s->getAlias(e); + entity["parent"] = s->getGraph()->getParentID(e); + + if (s->getRegistry()->entityHasComponent(e)) { + RenderComponent rc = *s->getRegistry()->getComponent(e); + json renderjson; + renderjson["model"] = rc.model; + entity["renderComponent"] = renderjson; + } + if (s->getRegistry()->entityHasComponent(e)) { + TransformComponent tc = *s->getRegistry()->getComponent(e); + json transformjson; + transformjson["position"] = dumpVec3(tc.getPosition()); + transformjson["rotation"] = dumpVec3(tc.getRotation()); + transformjson["scale"] = dumpVec3(tc.getScale()); + entity["transformComponent"] = transformjson; + } + if (s->getRegistry()->entityHasComponent(e)) { + LightComponent lc = *s->getRegistry()->getComponent(e); + json lightjson; + lightjson["color"] = dumpVec3(lc.color); + lightjson["type"] = lc.type; + entity["lightComponent"] = lightjson; + } + entities.push_back(entity); + } + j["entities"] = entities; + outstream << j.dump(4); + outstream.close(); + } +} + +json Project::dumpAsset(AssetUID uid, const std::shared_ptr &asset) { + auto asset_path = assetBank->getName(uid); + json tmp; + auto paths = asset->getSources(); + std::vector sources(paths.size()); + std::transform(paths.begin(), paths.end(), sources.begin(), [this](const fs::path &path) { + auto relative = path.lexically_relative(m_base_directory); + return relative.string(); + }); + tmp["bank_path"] = asset_path.toString(); + tmp["uid"] = uid; + tmp["sources"] = sources; + return tmp; +} + +void Project::loadFromFile() { + std::ifstream infile = std::ifstream(m_base_directory / (name + ".ice")); + json j; + infile >> j; + infile.close(); + + std::vector sceneNames = j["scenes"]; + json meshes = j["models"]; + json material = j["materials"]; + json shader = j["shaders"]; + json texture = j["textures2D"]; + json cubeMap = j["cubeMaps"]; + + cameraPosition = JsonParser::parseVec3(j["camera_position"]); + cameraRotation = JsonParser::parseVec3(j["camera_rotation"]); + + loadAssetsOfType(shader); + loadAssetsOfType(texture); + loadAssetsOfType(cubeMap); + loadAssetsOfType(material); + loadAssetsOfType(meshes); + + for (const auto &s : sceneNames) { + infile = std::ifstream(m_scenes_directory / (s + ".ics")); + json scenejson; + infile >> scenejson; + infile.close(); + + Scene scene = Scene(scenejson["name"]); + + for (json jentity : scenejson["entities"]) { + Entity e = jentity["id"]; + Entity parent = jentity["parent"]; + std::string alias = jentity["name"]; + + scene.addEntity(e, alias, 0); + + if (!jentity["transformComponent"].is_null()) { + json tj = jentity["transformComponent"]; + TransformComponent tc(JsonParser::parseVec3(tj["position"]), JsonParser::parseVec3(tj["rotation"]), + JsonParser::parseVec3(tj["scale"])); + scene.getRegistry()->addComponent(e, tc); + } + if (!jentity["renderComponent"].is_null()) { + json rj = jentity["renderComponent"]; + RenderComponent rc(rj["model"]); + scene.getRegistry()->addComponent(e, rc); + } + if (!jentity["lightComponent"].is_null()) { + json lj = jentity["lightComponent"]; + LightComponent lc(static_cast((int) lj["type"]), JsonParser::parseVec3(lj["color"])); + scene.getRegistry()->addComponent(e, lc); + } + } + for (json jentity : scenejson["entities"]) { + Entity e = jentity["id"]; + Entity parent = jentity["parent"]; + scene.getGraph()->setParent(e, parent, true); + } + addScene(scene); + //TODO: it would be better to save the current scene index + setCurrentScene(getScenes()[0]); + } +} + +void Project::copyAssetFile(const fs::path &folder, const std::string &assetName, const fs::path &src) { + auto subfolder = m_base_directory / "Assets" / folder; + fs::create_directories(subfolder); + + auto dst = subfolder / (assetName + src.extension().string()); + std::ifstream srcStream(src, std::ios::binary); + std::ofstream dstStream(dst, std::ios::binary); + + dstStream << srcStream.rdbuf(); + dstStream.flush(); + srcStream.close(); + dstStream.close(); +} + +bool Project::renameAsset(const AssetPath &oldName, const AssetPath &newName) { + if (newName.getName() == "" || newName.prefix() != oldName.prefix()) { + return false; + } + if (assetBank->renameAsset(oldName, newName)) { + auto path = m_base_directory / "Assets"; + for (const auto &file : getFilesInDir(path / oldName.prefix())) { + if (file.substr(0, file.find_last_of(".")) == oldName.getName()) { + if (rename((path / oldName.prefix() / file).string().c_str(), + (path / oldName.prefix() / (newName.getName() + file.substr(file.find_last_of(".")))).string().c_str()) + == 0) { + return true; + } + } + } + return true; + } + return false; +} + +std::vector Project::getFilesInDir(const fs::path &folder) { + std::vector files; + for (const auto &entry : fs::directory_iterator(folder)) { + std::string sp = entry.path().string(); + files.push_back(sp.substr(sp.find_last_of("/") + 1)); + } + return files; +} + +std::vector> Project::getScenes() { + return scenes; +} + +void Project::setScenes(const std::vector> &scenes) { + Project::scenes = scenes; +} + +std::shared_ptr Project::getAssetBank() { + return assetBank; +} + +void Project::setAssetBank(const std::shared_ptr &assetBank) { + Project::assetBank = assetBank; +} + +void Project::addScene(const Scene &scene) { + scenes.push_back(std::make_shared(scene)); +} + +void Project::setCurrentScene(const std::shared_ptr &scene) { + m_current_scene = scene; +} +std::shared_ptr Project::getCurrentScene() const { + return m_current_scene; +} + +json Project::dumpVec3(const Eigen::Vector3f &v) { + json r; + r["x"] = v.x(); + r["y"] = v.y(); + r["z"] = v.z(); + return r; +} + +json Project::dumpVec4(const Eigen::Vector4f &v) { + json r; + r["x"] = v.x(); + r["y"] = v.y(); + r["z"] = v.z(); + r["w"] = v.w(); + return r; +} + +const Eigen::Vector3f &Project::getCameraPosition() const { + return cameraPosition; +} + +const Eigen::Vector3f &Project::getCameraRotation() const { + return cameraRotation; +} } // namespace ICE \ No newline at end of file From c3793133fa0170efb2d0e24557e5f12aba465677 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 11 Dec 2025 19:06:11 +0100 Subject: [PATCH 04/21] Fix padding issue --- Assets/Shaders/frag_uniforms.glsl | 4 +- Assets/bunny.obj | 4048 ----------------------------- ICE/Graphics/include/Renderer.h | 6 +- 3 files changed, 4 insertions(+), 4054 deletions(-) delete mode 100644 Assets/bunny.obj diff --git a/Assets/Shaders/frag_uniforms.glsl b/Assets/Shaders/frag_uniforms.glsl index f2eaff13..abe18eba 100644 --- a/Assets/Shaders/frag_uniforms.glsl +++ b/Assets/Shaders/frag_uniforms.glsl @@ -5,11 +5,11 @@ struct Light { vec3 rotation; vec3 color; float distance_dropoff; - int type; + int type; }; layout(std140, binding = 1) uniform SceneLightsUBO { Light lights[MAX_LIGHTS]; - int light_count; vec4 ambient_light; + int light_count; }; \ No newline at end of file diff --git a/Assets/bunny.obj b/Assets/bunny.obj deleted file mode 100644 index 18de1a37..00000000 --- a/Assets/bunny.obj +++ /dev/null @@ -1,4048 +0,0 @@ -#### -# -# OBJ File Generated by Meshlab -# -#### -# Object bunny.obj -# -# Vertices: 1016 -# Faces: 2000 -# -#### -vn 3.094766 -3.957421 2.571340 -v -0.022632 0.157543 -0.004347 -vn -3.352937 4.642061 2.162993 -v -0.075174 0.167976 -0.025192 -vn -5.335856 2.490041 1.505438 -v -0.077239 0.163912 -0.021716 -vn -1.354921 2.677570 5.483067 -v -0.016734 0.110903 0.040898 -vn 0.625443 2.202277 5.399317 -v -0.076174 0.133648 0.052091 -vn 3.137585 4.552284 2.231628 -v -0.067581 0.162514 -0.013916 -vn 1.757145 5.957641 -0.629532 -v -0.034495 0.127246 0.005205 -vn -0.354196 3.603699 4.325252 -v -0.054989 0.044232 0.045269 -vn -1.267852 2.433462 5.073477 -v -0.039189 0.043347 0.041535 -vn 0.978163 -2.073041 5.294097 -v 0.006055 0.043707 0.045479 -vn 1.293697 1.756783 5.366480 -v -0.039456 0.168482 0.002719 -vn -1.910909 4.988601 3.166912 -v -0.015853 0.123285 0.031129 -vn -0.215986 3.895658 4.180577 -v -0.022979 0.047265 0.051674 -vn 0.385011 -0.461055 5.132621 -v -0.010664 0.046795 0.047826 -vn 0.431796 -1.765497 4.977530 -v 0.000109 0.044727 0.046148 -vn 2.119135 2.474565 4.371812 -v -0.048237 0.118063 0.030649 -vn -0.330534 5.090180 3.252033 -v -0.052978 0.047284 0.041192 -vn -0.442288 -4.360488 4.418675 -v -0.001039 0.048756 0.050981 -vn -0.925855 0.715390 4.496519 -v -0.016677 0.049287 0.047116 -vn -1.750692 -3.126344 4.851878 -v -0.012694 0.049776 0.049879 -vn 0.332566 -1.057794 5.443482 -v -0.071538 0.119432 0.053754 -vn -0.733410 2.731809 5.376121 -v -0.045683 0.048783 0.039154 -vn -0.721246 0.696525 6.123454 -v -0.042500 0.050665 0.039371 -vn -0.640319 3.011006 4.592459 -v -0.033737 0.050229 0.038469 -vn -1.672931 4.460975 3.280887 -v -0.025961 0.048758 0.049144 -vn -2.176725 2.191547 3.809460 -v -0.020594 0.050686 0.045394 -vn -0.227480 -1.733775 4.713461 -v -0.001180 0.052466 0.054806 -vn 0.134422 -0.820915 5.740516 -v 0.041168 0.050011 0.032719 -vn 1.153504 -0.685041 6.118216 -v -0.038283 0.052792 0.039210 -vn 2.489824 -1.332598 4.916564 -v 0.011200 0.054657 0.052333 -vn 0.874980 2.935273 4.351535 -v -0.035554 0.172881 -0.000252 -vn 5.222351 2.693640 1.601598 -v -0.063228 0.157493 -0.014585 -vn -2.571881 -1.880636 5.043581 -v -0.016423 0.053993 0.050415 -vn 1.022703 -2.421208 5.356022 -v 0.002994 0.051586 0.053297 -vn 3.438566 2.806768 2.577215 -v -0.056579 0.152747 0.030669 -vn -1.950585 -1.930631 5.565226 -v -0.012987 0.056778 0.051762 -vn 3.152490 1.908031 3.973677 -v -0.059871 0.149768 0.035859 -vn -1.119143 1.556231 3.575322 -v -0.028411 0.053001 0.036275 -vn 0.183280 -1.656104 5.935799 -v -0.000784 0.058271 0.054461 -vn 0.736503 1.122158 5.296014 -v 0.046480 0.058611 0.032273 -vn -1.319849 -2.360526 5.574702 -v -0.006618 0.053914 0.053241 -vn 0.164065 3.517445 5.146259 -v -0.036309 0.112896 0.034500 -vn -1.380083 5.852649 1.221236 -v -0.078187 0.155111 0.025574 -vn -0.316837 -1.136033 5.896620 -v -0.040382 0.059825 0.040868 -vn -1.721913 -1.506967 5.409180 -v -0.009937 0.060109 0.055295 -vn 1.695966 -1.291977 5.796677 -v 0.007708 0.058148 0.053117 -vn 0.957974 3.805042 4.546082 -v 0.009784 0.122290 0.035151 -vn -1.624216 -0.660921 4.661459 -v -0.027750 0.059877 0.036835 -vn -1.516021 5.959760 0.557596 -v -0.014970 0.129219 0.015705 -vn 0.879719 -1.238429 5.293655 -v 0.003769 0.062082 0.056814 -vn 2.458633 1.170214 4.118223 -v 0.040765 0.061943 0.029168 -vn 1.269830 2.434664 5.635268 -v 0.013123 0.114191 0.038027 -vn 1.927009 -0.994879 5.882141 -v -0.033531 0.057993 0.038350 -vn -1.235572 -1.173458 5.961074 -v -0.007891 0.068203 0.055874 -vn 0.312522 3.140684 5.175601 -v -0.000590 0.117009 0.040304 -vn -0.387106 -0.618100 6.060271 -v -0.003723 0.063692 0.056549 -vn -2.126080 -1.397157 5.491000 -v -0.081658 0.121900 0.049490 -vn -2.454829 2.440252 -4.713358 -v -0.028901 0.093527 -0.024842 -vn -4.086711 1.656504 -4.191994 -v -0.022248 0.180636 -0.020957 -vn 0.089017 3.277874 4.887360 -v 0.049333 0.065921 0.028380 -vn -2.139113 -1.184721 5.761744 -v -0.014837 0.064001 0.053545 -vn 0.674115 -0.509226 6.134180 -v 0.001206 0.068895 0.056091 -vn 1.241177 -0.883773 5.813328 -v -0.036372 0.066188 0.041816 -vn -3.218146 1.351646 -4.959758 -v -0.034116 0.171485 -0.014923 -vn -3.855127 -1.646155 4.186658 -v -0.027132 0.068677 0.039985 -vn -1.364807 -1.391624 5.937181 -v -0.013509 0.072324 0.055321 -vn 2.173125 2.133322 -1.326270 -v -0.062384 0.178712 -0.060118 -vn -0.904304 3.511562 5.075599 -v -0.007649 0.118256 0.038606 -vn 5.793472 0.963254 -1.660520 -v -0.062109 0.146794 -0.005135 -vn 0.368345 -1.151219 5.778279 -v -0.029990 0.070984 0.039578 -vn -5.926123 1.651647 0.316675 -v -0.088318 0.104127 0.015646 -vn -0.113716 -1.069734 5.411078 -v -0.004569 0.073133 0.059031 -vn -0.293794 -2.286711 5.664225 -v -0.047443 0.073211 0.041693 -vn -1.405224 -1.064870 5.797318 -v -0.043171 0.068714 0.041768 -vn 1.687957 -0.140487 5.756138 -v 0.000783 0.079041 0.057911 -vn -1.168983 -3.065621 5.117674 -v -0.059251 0.074127 0.041652 -vn 1.108791 -0.024260 5.882131 -v 0.007199 0.074598 0.056746 -vn -0.149953 -0.877953 6.034171 -v -0.039500 0.079658 0.043297 -vn -2.379262 -1.881085 5.429995 -v -0.019374 0.076997 0.055391 -vn -1.677857 4.428647 4.071449 -v -0.025821 0.117485 0.032251 -vn -1.723330 4.031852 4.345165 -v -0.016792 0.119452 0.035398 -vn 1.145654 5.918700 0.773983 -v 0.009481 0.131167 0.018514 -vn -1.095332 6.051566 -0.101883 -v -0.077346 0.156087 0.016429 -vn -0.177736 -1.617727 5.560285 -v -0.055247 0.080917 0.045032 -vn 0.729490 -2.043393 5.276521 -v -0.049241 0.075309 0.043370 -vn 0.354106 -0.623176 6.032168 -v -0.043726 0.081527 0.042423 -vn 1.247137 2.844611 5.360134 -v 0.006799 0.116434 0.039090 -vn -1.796515 4.364497 3.741938 -v -0.078484 0.147136 0.041514 -vn 0.977957 -1.786209 5.901249 -v -0.051671 0.081136 0.044260 -vn -0.871932 0.057646 6.120081 -v -0.008032 0.077902 0.058098 -vn 1.985831 -0.373681 5.738019 -v 0.002797 0.078605 0.056563 -vn -0.792526 -0.923510 5.985878 -v -0.077226 0.124510 0.052531 -vn 1.173299 -0.690842 6.098456 -v -0.035132 0.078318 0.041951 -vn -0.993705 -1.367374 5.994335 -v -0.014755 0.077626 0.056744 -vn 0.371292 0.795110 6.212221 -v -0.005822 0.085265 0.057191 -vn -0.927732 0.028606 5.267187 -v -0.018322 0.082931 0.057966 -vn -0.853811 1.100726 6.044978 -v -0.014548 0.087675 0.056935 -vn -1.098176 5.857864 1.744862 -v -0.025186 0.125020 0.018505 -vn -0.712738 4.533755 4.066230 -v -0.006815 0.123672 0.034343 -vn -1.336699 -1.796043 5.837923 -v -0.061846 0.079310 0.042931 -vn 0.870475 0.838895 5.843807 -v 0.003308 0.085766 0.057417 -vn 0.282488 4.719956 3.605405 -v -0.037277 0.122401 0.027860 -vn 2.437248 1.449543 3.970111 -v -0.024564 0.181758 -0.009287 -vn 1.053348 0.457579 5.395002 -v -0.049399 0.087256 0.045901 -vn 0.361377 6.172206 -0.343408 -v 0.004877 0.131719 0.008993 -vn -1.245738 -0.128705 5.572842 -v -0.064320 0.088733 0.045416 -vn -0.119381 -0.177199 6.217679 -v -0.057121 0.088104 0.044655 -vn 0.484618 -0.177087 5.400366 -v -0.037733 0.084103 0.044251 -vn -0.573746 -0.595544 6.132878 -v -0.035888 0.088835 0.043456 -vn 0.142328 1.905210 5.707716 -v -0.008528 0.091508 0.056852 -vn 4.050235 -0.212567 1.545237 -v -0.009886 0.166722 -0.017511 -vn 0.293594 0.299991 6.053345 -v -0.042104 0.087286 0.042611 -vn 3.070954 5.152725 1.024659 -v 0.021778 0.126056 0.020005 -vn 0.084260 1.594863 5.296378 -v -0.059599 0.093932 0.045485 -vn -1.008162 2.740681 5.187271 -v -0.012990 0.092703 0.056065 -vn 1.082044 2.749430 5.381898 -v 0.004070 0.092302 0.054987 -vn 4.317272 -0.801272 4.176701 -v -0.059869 0.143487 0.035797 -vn -0.076046 0.780789 6.134088 -v -0.053239 0.094273 0.043815 -vn -0.994936 5.523821 2.201892 -v -0.006917 0.129109 0.026115 -vn -1.681131 3.062509 4.480684 -v -0.023644 0.095822 0.044726 -vn 0.441037 3.918304 4.747963 -v 0.007387 0.098533 0.048771 -vn 1.837102 1.674652 5.361540 -v 0.018439 0.091823 0.047938 -vn 2.014802 2.331324 5.124097 -v 0.021023 0.099320 0.046217 -vn -0.677194 6.145686 0.147623 -v -0.002793 0.131514 0.013755 -vn 0.178340 1.010761 5.985486 -v -0.041403 0.095527 0.042055 -vn -1.336100 0.038610 5.748745 -v -0.035209 0.093345 0.044619 -vn -2.420201 2.124227 4.906639 -v -0.026239 0.093563 0.045214 -vn 5.730315 2.358134 0.102314 -v -0.048370 0.137251 0.011910 -vn -1.745998 -1.310281 5.245662 -v -0.075848 0.118852 0.053013 -vn -0.077953 4.363782 4.431350 -v -0.030870 0.117520 0.031465 -vn 0.258411 2.076190 5.862804 -v -0.047342 0.101440 0.041883 -vn -1.288335 3.383083 4.368934 -v -0.019016 0.098239 0.044663 -vn 2.015697 -2.836348 -2.116434 -v -0.009759 0.167842 -0.023732 -vn 1.587561 2.378162 5.523959 -v 0.012564 0.097906 0.048449 -vn -0.884537 1.502818 5.991148 -v -0.062452 0.098249 0.042647 -vn -0.616705 1.960715 5.915828 -v -0.028858 0.100001 0.043282 -vn 0.266736 0.742426 5.441052 -v -0.049157 0.096445 0.044787 -vn -0.308518 2.968567 4.351229 -v -0.007748 0.101613 0.043852 -vn -2.407340 0.644880 5.570633 -v -0.073209 0.105383 0.037186 -vn -0.743845 2.147017 5.631745 -v -0.062385 0.102987 0.041882 -vn -1.328710 3.178347 5.230953 -v -0.029049 0.106680 0.040203 -vn -0.598888 1.895476 5.931429 -v -0.017728 0.104776 0.042847 -vn 0.237100 3.081248 4.766045 -v 0.012293 0.102676 0.047244 -vn 5.642019 1.498931 1.749087 -v 0.043380 0.095176 0.023644 -vn -0.022555 3.743685 4.700986 -v -0.074645 0.143883 0.045580 -vn -0.316966 1.857881 5.917602 -v -0.053840 0.099162 0.043133 -vn -1.025945 2.163476 5.671541 -v -0.033397 0.099353 0.043336 -vn 0.221163 3.190629 4.436065 -v 0.001455 0.102087 0.043717 -vn 4.691329 3.704555 1.186367 -v 0.034532 0.114319 0.022279 -vn 5.897046 1.208744 0.917447 -v -0.062543 0.152623 -0.011515 -vn -1.685541 5.225436 2.572695 -v -0.078392 0.152598 0.033218 -vn -2.165875 5.032029 2.181965 -v -0.035838 0.176094 -0.004875 -vn 0.364634 2.663470 5.451436 -v -0.038430 0.105140 0.038948 -vn -0.737732 1.924380 5.725494 -v -0.023640 0.103170 0.043565 -vn 0.744581 1.967038 5.334632 -v -0.043712 0.105017 0.041432 -vn -0.720472 1.865637 5.759243 -v -0.011017 0.109063 0.043214 -vn 1.616586 3.309888 5.073047 -v 0.020312 0.107668 0.040045 -vn -0.039919 3.158636 5.416228 -v -0.050937 0.109405 0.038213 -vn 0.240754 2.643583 5.065606 -v 0.008412 0.107166 0.040919 -vn 1.236884 1.505575 5.833599 -v 0.002875 0.110461 0.042399 -vn 0.718403 3.537205 5.053177 -v -0.041817 0.111863 0.036380 -vn -1.650954 3.350686 4.912292 -v -0.022286 0.112333 0.038935 -vn 0.072845 3.697677 4.994920 -v 0.013237 0.108390 0.040931 -vn 0.284569 3.365786 -4.577050 -v -0.005593 0.100397 -0.023626 -vn 3.714252 4.090246 2.393250 -v 0.028553 0.118568 0.027351 -vn 1.216376 -3.030059 3.611988 -v 0.013840 0.035778 0.044177 -vn 0.618182 1.893739 5.149255 -v -0.021573 0.044152 0.053786 -vn 1.803096 0.432669 5.998221 -v -0.003448 0.039522 0.047731 -vn 2.232999 0.299057 5.266601 -v 0.017782 0.043171 0.044133 -vn -0.704631 1.028686 5.158418 -v -0.056022 0.040278 0.047317 -vn 1.439404 -1.307021 5.148934 -v -0.044655 0.036493 0.044874 -vn 3.658055 -0.615402 4.448274 -v 0.023074 0.042970 0.040731 -vn -1.031086 1.145430 -5.711343 -v -0.052975 0.098550 -0.022329 -vn 5.684490 2.363640 0.122282 -v 0.042865 0.101843 0.010188 -vn 3.768438 -3.653101 3.234857 -v 0.031994 0.048007 0.032376 -vn 1.372108 2.730400 5.321715 -v -0.046777 0.043103 0.043730 -vn 2.357095 1.367761 3.871970 -v -0.032079 0.174511 -0.002531 -vn 3.619740 -3.956558 2.991062 -v 0.050238 0.047308 0.024532 -vn 3.184967 2.908583 4.509330 -v -0.014239 0.171118 -0.017749 -vn 5.725510 0.493050 2.375154 -v -0.054385 0.146748 0.026987 -vn -5.486488 1.655423 -2.492476 -v -0.084794 0.103733 0.000530 -vn 2.450629 -1.319229 5.095459 -v 0.015867 0.047316 0.043528 -vn 2.002371 3.259158 4.942435 -v 0.022732 0.112679 0.036283 -vn 2.592729 2.182607 3.994351 -v -0.042660 0.157810 0.004583 -vn 1.623961 3.829529 4.317648 -v -0.037161 0.160873 0.000365 -vn 2.770036 1.065387 3.339553 -v -0.018041 0.161479 -0.006288 -vn 1.631466 -3.926208 4.055352 -v 0.007884 0.046671 0.048882 -vn 3.942245 -1.882241 4.441726 -v 0.027775 0.047288 0.036817 -vn 2.591851 -2.189430 4.782357 -v 0.045687 0.050252 0.031469 -vn 2.496937 -2.147558 4.475423 -v 0.020156 0.054169 0.047523 -vn 3.177914 -2.557964 4.711590 -v 0.025271 0.052639 0.040636 -vn 5.203628 1.956359 -2.827335 -v 0.040625 0.095875 -0.006116 -vn -0.128667 1.414716 5.979097 -v -0.065217 0.110091 0.037575 -vn 2.601575 -1.908917 5.262579 -v 0.015462 0.055027 0.048849 -vn 1.927370 -2.337471 4.968058 -v 0.033759 0.048788 0.031363 -vn 1.755159 -0.327688 5.136786 -v 0.038256 0.056776 0.031141 -vn 0.323107 0.724080 6.042971 -v -0.002328 0.105934 0.044142 -vn 3.827743 -1.835371 4.173399 -v 0.053375 0.054835 0.027934 -vn 3.476335 0.453366 2.990467 -v -0.014586 0.162885 -0.010125 -vn 4.663794 1.871406 3.222214 -v -0.049703 0.129792 0.031100 -vn 4.312537 -1.553022 3.995542 -v -0.061115 0.120220 0.041955 -vn 5.032962 -1.051812 3.258023 -v 0.038800 0.063605 0.034213 -vn 5.095171 -1.700923 2.262838 -v 0.058312 0.055108 0.021584 -vn 3.446926 -0.566987 5.085696 -v 0.025048 0.061820 0.045199 -vn 1.459877 1.264210 3.974623 -v -0.035351 0.158370 0.004120 -vn 3.116712 -0.945555 5.330387 -v 0.019016 0.062966 0.048660 -vn 3.611860 -1.847927 4.557545 -v 0.031160 0.057816 0.040002 -vn 3.349772 0.698855 4.390854 -v 0.054587 0.062151 0.028386 -vn 2.518140 -1.321157 5.358851 -v 0.010261 0.064409 0.054523 -vn 3.888513 0.954593 3.914598 -v -0.062627 0.137487 0.035970 -vn 2.919071 2.362424 4.555372 -v -0.069222 0.141816 0.045434 -vn 4.796776 1.897909 3.501544 -v -0.013596 0.181454 -0.022994 -vn 3.674356 -0.616925 4.606893 -v 0.035195 0.064774 0.038909 -vn 2.718727 3.138192 3.924523 -v 0.054990 0.068160 0.025302 -vn 2.996061 -1.577720 5.122630 -v 0.011936 0.061458 0.051702 -vn -5.740675 -1.293159 -0.271905 -v -0.089676 0.089115 0.011992 -vn 2.970165 -1.405626 5.250880 -v 0.013992 0.065896 0.052786 -vn 3.635901 -1.895913 3.365978 -v -0.065901 0.117453 0.050750 -vn 1.157068 3.437505 4.681839 -v 0.044728 0.068216 0.025148 -vn 4.026200 0.184060 4.141020 -v -0.037332 0.163692 -0.000866 -vn 2.183929 1.404454 4.063305 -v -0.028334 0.178587 -0.005976 -vn 4.549428 -0.211835 4.307021 -v 0.036982 0.071601 0.036530 -vn 5.397528 0.625255 2.995015 -v 0.044153 0.070434 0.024656 -vn 3.102727 1.753740 3.351305 -v -0.021751 0.183608 -0.012089 -vn 3.687994 -0.852355 4.950009 -v 0.032313 0.071764 0.040470 -vn 3.823063 -1.369466 4.693820 -v 0.020799 0.068880 0.049069 -vn 3.454532 -0.920757 4.808846 -v 0.025894 0.070197 0.043900 -vn -5.001193 -3.552527 1.275367 -v -0.081235 0.076312 0.023820 -vn 5.398329 2.428570 -1.338366 -v 0.041795 0.102982 0.002083 -vn 4.136786 -0.184161 4.312547 -v -0.029255 0.170727 -0.008452 -vn 2.976370 2.577192 4.831935 -v 0.026315 0.103891 0.039915 -vn 3.795969 -1.007732 4.672986 -v 0.031169 0.075669 0.043029 -vn 4.578857 -0.401115 4.154040 -v 0.036619 0.076278 0.037820 -vn 5.670611 0.331080 2.481464 -v 0.043883 0.083725 0.026448 -vn 4.409471 0.200501 4.062643 -v -0.049598 0.149922 0.011833 -vn 3.761862 -0.310466 2.485315 -v -0.012650 0.164076 -0.012638 -vn 2.454954 1.926445 5.295071 -v -0.046165 0.159492 0.007645 -vn 2.300028 -0.675841 5.773763 -v 0.013192 0.074119 0.054188 -vn 2.147017 0.188036 5.444361 -v 0.016207 0.078297 0.054029 -vn 2.659225 1.062280 5.424681 -v 0.022384 0.084471 0.049678 -vn 5.231865 0.156885 3.342188 -v 0.040548 0.080473 0.032775 -vn -5.219738 -1.187020 -2.200430 -v -0.085564 0.109959 0.006691 -vn 2.040293 1.345493 3.748146 -v -0.025997 0.159898 -0.000378 -vn 3.752166 -0.869909 4.866561 -v 0.025611 0.077034 0.047414 -vn 4.274515 2.152036 3.950105 -v -0.055193 0.137655 0.031052 -vn 4.778208 0.553183 3.962800 -v -0.056663 0.142334 0.031414 -vn 1.895524 0.267344 5.952645 -v 0.008797 0.080996 0.055269 -vn 2.685038 2.647466 4.793501 -v -0.026675 0.167340 -0.009261 -vn 2.572105 -2.557608 4.363059 -v -0.063136 0.113212 0.037309 -vn 3.314872 -0.099920 4.622317 -v -0.039398 0.165215 0.003096 -vn 1.616328 4.517775 3.934582 -v -0.023048 0.163626 -0.007644 -vn 2.762914 2.599517 4.676960 -v 0.027285 0.108584 0.037517 -vn 1.206805 -3.498194 4.227875 -v -0.069801 0.109329 0.037844 -vn 3.747622 1.234770 4.658076 -v -0.064598 0.144892 0.039496 -vn 4.592640 -0.224758 4.169909 -v -0.019936 0.179943 -0.016051 -vn 2.656923 1.333205 5.377681 -v 0.016104 0.085391 0.051297 -vn 4.139162 -0.025463 4.707720 -v 0.030880 0.082256 0.042955 -vn 5.143444 1.020655 3.310843 -v -0.047061 0.124863 0.028049 -vn 2.915268 0.626547 4.412439 -v -0.067391 0.122228 0.052778 -vn 1.045301 4.878822 3.709212 -v -0.030525 0.161569 -0.002387 -vn 1.642749 3.110179 5.004900 -v 0.017862 0.118015 0.035502 -vn 3.222754 2.483788 4.568747 -v -0.057193 0.130341 0.038022 -vn 3.760767 0.259540 4.920477 -v 0.026169 0.083575 0.047343 -vn 3.667639 0.150010 4.474477 -v 0.033382 0.088441 0.042187 -vn 5.020711 0.093914 3.747091 -v 0.037217 0.086010 0.036563 -vn 3.072363 0.579712 4.791952 -v -0.042036 0.155272 0.006780 -vn 4.528713 1.753974 3.932786 -v -0.067517 0.132815 0.046060 -vn 2.466482 0.892711 5.306850 -v 0.011669 0.088506 0.054544 -vn 2.999462 2.223691 4.362226 -v 0.014667 0.092195 0.051846 -vn 6.091884 0.872875 -0.408722 -v 0.045858 0.090064 0.006853 -vn 3.610504 -0.173509 4.571314 -v -0.055584 0.122895 0.039367 -vn 5.035666 2.635417 2.047851 -v 0.038141 0.107162 0.025644 -vn 3.822092 1.666329 4.678015 -v -0.015537 0.176512 -0.019205 -vn 3.236660 3.429851 3.682322 -v 0.029226 0.113282 0.032753 -vn -5.756518 1.095186 0.663424 -v -0.093174 0.123594 0.039183 -vn 2.835000 -2.559091 4.779950 -v -0.028891 0.158063 0.000681 -vn 4.107653 1.648150 4.321459 -v -0.061559 0.126903 0.042100 -vn 2.446284 1.998310 3.284959 -v -0.047009 0.120810 0.027667 -vn 3.311918 1.683383 4.945812 -v 0.027912 0.093581 0.044346 -vn 1.991673 1.444735 5.526487 -v -0.072818 0.129250 0.052148 -vn 1.689075 0.715737 5.170299 -v -0.054867 0.114510 0.034993 -vn 4.560048 1.535726 3.636522 -v 0.036564 0.093872 0.037137 -vn 5.636822 1.471644 0.434213 -v -0.061496 0.161015 -0.029952 -vn 2.120607 -5.426591 -1.584703 -v 0.020578 0.035131 -0.002113 -vn 2.587788 -5.182961 -1.866215 -v 0.040168 0.039433 0.002850 -vn 2.956754 -4.936349 -0.780024 -v 0.018618 0.035206 -0.007891 -vn 3.954210 2.893853 -0.481261 -v -0.011316 0.182508 -0.027395 -vn -0.360845 0.566247 -6.221670 -v -0.043479 0.095813 -0.022175 -vn 4.103764 -3.880840 -2.196748 -v 0.023103 0.042010 -0.008406 -vn 2.893077 -4.532371 -1.058532 -v 0.017395 0.035068 -0.014539 -vn 1.802929 -4.133441 -2.626518 -v 0.013275 0.034932 -0.020460 -vn 4.464798 -3.195609 2.618988 -v 0.024751 0.041279 0.037482 -vn 3.837847 -1.567000 -3.464164 -v 0.020165 0.043510 -0.021471 -vn -4.605818 2.202359 -3.498247 -v -0.081165 0.108525 -0.002671 -vn 1.688255 0.159017 -2.029551 -v -0.060770 0.172871 -0.062223 -vn 3.539078 -4.996346 -0.345194 -v 0.049360 0.043275 0.010619 -vn 4.485715 -3.029796 -2.135710 -v 0.055521 0.050320 0.003859 -vn 3.373318 -4.502402 -2.338031 -v 0.048670 0.044885 0.002308 -vn 4.264922 -3.808944 -2.261333 -v 0.022558 0.044480 -0.016002 -vn 5.124133 0.612471 1.751263 -v -0.008995 0.170743 -0.022234 -vn 5.502688 -1.333245 1.725175 -v -0.049245 0.144438 0.008739 -vn 3.702993 -3.710806 2.379018 -v -0.043032 0.147796 0.004361 -vn 4.623991 -3.363169 1.370073 -v 0.056859 0.050577 0.018961 -vn 3.899296 -3.995941 -2.214014 -v 0.027089 0.047336 -0.015999 -vn 4.542627 -0.345970 -1.289463 -v -0.008485 0.173924 -0.027117 -vn -0.952284 2.145038 -5.539727 -v -0.027238 0.104761 -0.023147 -vn 4.608087 2.242475 3.513731 -v 0.036337 0.100368 0.033065 -vn 5.004035 -3.238740 -0.417539 -v 0.057477 0.050787 0.011439 -vn 4.788811 -3.148919 -2.504355 -v 0.031618 0.051716 -0.010657 -vn 6.038418 0.247692 0.386332 -v -0.061439 0.155996 -0.022037 -vn -5.708359 -0.430176 0.328975 -v -0.095150 0.122524 0.020828 -vn 3.539445 -0.201987 -4.307279 -v 0.053738 0.058051 -0.003026 -vn 4.483680 -2.341901 -3.604957 -v 0.031438 0.056335 -0.014912 -vn -4.854239 1.421386 -3.443982 -v -0.083446 0.100310 -0.004261 -vn 6.121156 1.186982 0.486103 -v 0.044971 0.092888 0.014163 -vn 5.820365 -0.936269 -0.152972 -v 0.061018 0.059729 0.012378 -vn 5.186820 -0.307332 -2.523736 -v 0.059284 0.060697 0.004208 -vn 6.164331 -0.164121 0.580500 -v -0.061739 0.168050 -0.053719 -vn 5.043853 -1.714810 -3.085265 -v 0.038215 0.062163 -0.010182 -vn 4.316995 -2.122327 -3.743112 -v 0.033799 0.059079 -0.014761 -vn 5.058934 2.038069 0.117292 -v 0.060856 0.068056 0.013685 -vn 4.170927 -0.877568 -4.469988 -v 0.029676 0.061299 -0.019624 -vn 5.837342 0.404021 -1.532704 -v 0.044685 0.088766 -0.001641 -vn 5.811692 1.502155 1.111640 -v -0.062517 0.168278 -0.048159 -vn 5.129776 -0.428435 -3.008827 -v 0.040553 0.069487 -0.009589 -vn 3.831105 3.942505 -1.329023 -v 0.058096 0.070952 0.008360 -vn 5.235800 2.117617 2.660476 -v -0.052670 0.137724 0.027072 -vn 4.402230 -0.589750 -4.344035 -v 0.032905 0.068512 -0.017939 -vn 4.086227 -0.594648 -4.540856 -v 0.029676 0.072549 -0.021977 -vn 6.005601 0.901536 -0.036226 -v -0.062119 0.163568 -0.039854 -vn 0.361682 5.859539 -1.784732 -v -0.028699 0.124174 0.000045 -vn 2.901078 -4.465433 2.349806 -v -0.033265 0.152755 -0.000935 -vn 5.316133 3.002438 1.399777 -v -0.049588 0.137208 0.019728 -vn -5.332762 -2.716557 0.415736 -v -0.091761 0.117734 0.028047 -vn 5.315184 0.532222 -2.842642 -v -0.050570 0.139278 0.002373 -vn -5.511374 0.018763 -2.576079 -v -0.092000 0.124335 0.007559 -vn 5.999914 -1.516922 -0.543700 -v -0.062895 0.160255 -0.045117 -vn -4.153564 -3.020171 -3.553796 -v -0.086854 0.115536 0.002130 -vn 5.588541 -0.518128 -2.781567 -v 0.042336 0.078603 -0.005669 -vn -4.655971 -3.245469 -0.006853 -v -0.092211 0.113719 0.015803 -vn -1.973225 -1.888964 3.544886 -v -0.060160 0.036142 0.045824 -vn 5.871296 0.943136 1.559232 -v -0.052327 0.144649 0.017802 -vn 5.787077 0.916558 -1.813593 -v 0.046325 0.073679 0.004710 -vn 5.065163 1.502548 -2.815784 -v 0.041690 0.091117 -0.008432 -vn -3.548909 -4.646294 -1.599968 -v -0.073040 0.142854 -0.008478 -vn -5.049344 -2.277116 1.327268 -v -0.086717 0.109949 0.017997 -vn 5.576437 -2.090809 -0.868370 -v -0.062831 0.146571 -0.013245 -vn -3.426531 -4.554816 1.371157 -v -0.071194 0.062750 0.017971 -vn 5.836531 0.112567 -1.917511 -v 0.045495 0.079596 0.000727 -vn 4.772102 -0.640213 -3.815825 -v 0.037230 0.076270 -0.012165 -vn 6.067169 0.559199 1.233306 -v 0.045180 0.085436 0.021900 -vn 5.831976 -0.068505 -2.298472 -v 0.043601 0.081985 -0.003165 -vn 4.857678 -0.777680 -3.402729 -v 0.039433 0.082994 -0.013421 -vn -6.105674 0.694372 0.053635 -v -0.089655 0.097872 0.016003 -vn -5.150023 0.679012 -3.229882 -v -0.084996 0.143869 0.006146 -vn 6.026113 0.718501 1.335790 -v 0.046452 0.075105 0.017808 -vn -5.809597 1.531652 -1.164955 -v -0.092602 0.130410 0.011750 -vn 4.952139 3.525631 1.318580 -v -0.064530 0.169186 -0.041589 -vn 5.610267 -1.978293 -0.980791 -v -0.062167 0.154307 -0.031775 -vn 1.198130 5.856568 1.663475 -v -0.031334 0.125679 0.017991 -vn -2.074432 3.369980 -1.806647 -v -0.072326 0.181192 -0.055142 -vn 1.407635 5.070174 1.212614 -v -0.069451 0.181345 -0.054185 -vn -0.994283 3.704290 4.178440 -v -0.043952 0.167869 0.003076 -vn -2.597573 5.270875 -1.373814 -v -0.083523 0.153771 0.011018 -vn 0.391499 6.066924 0.807585 -v -0.065965 0.156338 0.023925 -vn 0.405464 4.692683 2.791539 -v 0.052485 0.072116 0.022090 -vn 4.148013 3.943976 2.393467 -v -0.066355 0.174273 -0.047584 -vn 1.271963 5.205061 2.476993 -v -0.060944 0.153978 0.031726 -vn 0.160968 6.253486 -0.391569 -v -0.066162 0.156175 0.014162 -vn 2.563544 5.060296 2.670963 -v -0.071352 0.176337 -0.045404 -vn -1.125632 5.112562 1.877706 -v -0.073963 0.179891 -0.049902 -vn 5.669150 1.486904 1.713825 -v -0.051657 0.149961 0.015696 -vn 1.940121 4.814428 2.814738 -v 0.014120 0.127185 0.027892 -vn -3.937955 -4.448478 0.762496 -v -0.084427 0.111720 0.028693 -vn 1.432097 3.894052 -4.037507 -v -0.039787 0.123160 -0.010744 -vn -4.956427 1.138147 -3.530294 -v -0.081741 0.145435 0.000182 -vn -4.591177 -0.424988 -1.796376 -v -0.075599 0.151048 -0.009429 -vn -5.777192 0.430090 -2.157034 -v -0.086395 0.096987 0.000674 -vn 1.690336 3.668887 -0.658081 -v -0.014641 0.185918 -0.024973 -vn -4.260851 2.509016 -1.388882 -v -0.090869 0.150100 0.013951 -vn -4.148738 3.257659 1.423426 -v -0.078250 0.175147 -0.044456 -vn -0.853663 5.173003 3.055238 -v -0.009294 0.099140 0.050199 -vn 0.187851 4.764116 3.959755 -v 0.001684 0.125513 0.032285 -vn 1.105869 2.640572 0.918792 -v -0.017752 0.187453 -0.018494 -vn -0.424456 5.379393 2.472621 -v -0.073737 0.174083 -0.038885 -vn 1.356126 4.555872 3.201677 -v -0.043564 0.122982 0.024784 -vn -5.423351 -1.898461 -0.394247 -v -0.092777 0.117053 0.034803 -vn 0.860369 4.262375 4.025424 -v -0.068912 0.150059 0.038982 -vn 0.420919 6.169803 0.687315 -v -0.057871 0.155743 0.012829 -vn -0.154562 5.317085 3.017347 -v -0.028710 0.121121 0.025743 -vn 1.937456 5.688474 1.040771 -v -0.069086 0.156094 0.000189 -vn -2.485508 4.425166 -0.301309 -v -0.020906 0.186391 -0.017334 -vn 2.933247 5.172490 1.769837 -v -0.069242 0.172311 -0.038155 -vn -0.605938 5.270441 2.747777 -v -0.071882 0.161382 -0.009418 -vn 1.156050 5.432137 -1.451054 -v 0.054112 0.073180 0.009224 -vn 2.145806 5.425278 0.330070 -v 0.047882 0.073529 0.014713 -vn 5.244991 2.619354 1.730502 -v -0.046363 0.131718 0.021925 -vn 5.056289 3.493795 -0.723384 -v 0.037029 0.111384 0.004942 -vn 2.853272 5.083090 -1.718533 -v 0.020200 0.126017 0.001594 -vn -5.254146 -0.613127 -0.482019 -v -0.076308 0.149985 -0.015676 -vn 1.355125 4.720862 1.437473 -v 0.053961 0.073685 0.018761 -vn 0.234429 5.665096 2.150027 -v 0.004460 0.130159 0.024964 -vn 1.423464 5.984650 0.624725 -v -0.035611 0.127806 0.012376 -vn -2.960577 4.792154 2.219521 -v -0.074001 0.157470 -0.004167 -vn 3.066196 4.897271 -1.422764 -v -0.045250 0.129319 0.003323 -vn -1.129174 4.554727 1.843489 -v -0.024152 0.184139 -0.011798 -vn 2.415711 4.752096 3.229428 -v 0.017505 0.124269 0.028518 -vn -0.306560 5.678154 2.418344 -v -0.070930 0.153929 0.032368 -vn 4.637616 1.903230 2.104799 -v 0.059501 0.067622 0.020380 -vn 0.499025 5.654412 2.110123 -v -0.037173 0.126552 0.019782 -vn -0.381038 6.195147 0.034129 -v -0.071667 0.155616 0.005508 -vn -4.300800 0.071478 -3.924859 -v -0.080277 0.111457 -0.001608 -vn 0.482006 4.396123 3.775440 -v -0.001152 0.098689 0.051948 -vn -3.958242 4.197694 -2.017481 -v -0.027487 0.181071 -0.014028 -vn -0.016262 5.308342 2.245415 -v -0.071988 0.169123 -0.024625 -vn 2.916259 4.139410 2.099079 -v -0.043609 0.126626 0.018789 -vn -3.809404 -0.618573 -4.535503 -v -0.071170 0.178641 -0.056502 -vn 2.010828 4.065274 3.515700 -v 0.021124 0.121417 0.031710 -vn -1.718535 4.786687 2.206586 -v -0.029362 0.180309 -0.007715 -vn 3.676759 2.873815 1.512413 -v -0.054698 0.152990 0.027194 -vn -3.197552 5.253566 -0.401559 -v -0.076599 0.154132 0.001804 -vn 1.663596 4.604503 3.230547 -v -0.054148 0.155336 0.011804 -vn 3.578112 4.724551 0.387337 -v -0.043750 0.129665 0.011703 -vn 4.363053 4.368498 0.037657 -v 0.031009 0.119396 0.011805 -vn 3.538241 5.021770 -0.639298 -v 0.025235 0.123945 0.007875 -vn 0.334614 6.097376 -0.181203 -v -0.028928 0.125631 0.009146 -vn 3.640355 4.399567 1.614547 -v -0.066692 0.168011 -0.027462 -vn -0.233089 5.905298 -1.594494 -v 0.001229 0.130758 0.001703 -vn -5.948376 1.237487 -1.220472 -v -0.087983 0.102812 0.008913 -vn -3.517885 4.290505 -1.612052 -v -0.038158 0.174988 -0.008662 -vn 2.171919 5.800751 -0.228056 -v 0.014571 0.129719 0.010288 -vn -3.762906 -2.616167 1.034528 -v -0.072508 0.035045 0.006886 -vn -3.539536 -0.905314 3.258482 -v -0.068612 0.035925 0.013364 -vn -4.165895 -0.824512 -2.265473 -v -0.064587 0.035434 0.024123 -vn -4.860264 -0.362750 1.628607 -v -0.066421 0.036780 0.037772 -vn -3.774728 0.915285 3.995933 -v -0.033256 0.040429 0.050438 -vn -2.161576 0.767358 4.945210 -v -0.028793 0.040250 0.053660 -vn 0.595360 -2.194332 4.492339 -v -0.022254 0.036397 0.054172 -vn -2.468129 0.643499 -5.420550 -v -0.057178 0.095339 -0.021407 -vn -4.664717 0.842293 3.712944 -v -0.063719 0.035889 0.018077 -vn -4.510514 3.128947 0.527595 -v -0.060660 0.037999 0.020107 -vn -5.347980 1.948649 -1.580589 -v -0.065758 0.039184 0.028824 -vn -3.060553 4.016160 1.511542 -v -0.061581 0.046403 0.038949 -vn -4.739681 0.941019 3.872519 -v -0.036281 0.040350 0.046080 -vn -4.663043 1.682945 1.289949 -v -0.072582 0.038446 0.007256 -vn -5.270750 3.327163 -0.653439 -v -0.071075 0.039616 0.003991 -vn -3.761410 1.041319 4.825982 -v -0.075463 0.097646 0.038226 -vn -3.695707 2.431126 3.531357 -v -0.061670 0.042861 0.042835 -vn -0.926462 3.391644 4.298962 -v -0.012919 0.100443 0.044281 -vn -3.152135 3.928678 3.401736 -v -0.065104 0.042809 0.011917 -vn -2.496847 2.449704 4.654127 -v -0.081575 0.134705 0.050585 -vn -3.702577 4.093661 2.389956 -v -0.057810 0.047856 0.008749 -vn -3.787189 3.412211 3.466524 -v -0.034397 0.044450 0.045915 -vn -3.392372 4.594159 1.498398 -v -0.049347 0.166351 0.000744 -vn -3.013031 -3.444648 3.876493 -v -0.071883 0.073139 0.035410 -vn -4.502184 2.427100 2.599777 -v -0.087491 0.141165 0.040141 -vn -3.435941 3.755981 3.232703 -v -0.022403 0.093695 0.050239 -vn -2.522241 4.493736 3.017286 -v -0.050515 0.049618 0.036537 -vn -5.325298 -1.107564 1.683973 -v -0.089312 0.090546 0.021851 -vn -3.868876 3.957101 2.197943 -v -0.075877 0.162385 -0.014929 -vn -2.282869 5.117870 2.484348 -v -0.029778 0.050450 0.042358 -vn -0.348236 3.565649 4.638061 -v -0.046632 0.163856 0.005708 -vn -2.817534 -0.429144 4.903159 -v -0.030127 0.088091 0.043822 -vn -4.056412 -1.000199 4.171714 -v -0.078787 0.085191 0.036634 -vn -4.156331 1.886567 0.796096 -v -0.050132 0.047725 0.016827 -vn -3.753857 1.195405 -4.626152 -v -0.044383 0.165379 -0.009203 -vn -4.712823 3.046287 1.897702 -v -0.051813 0.051098 0.031670 -vn -5.269024 -0.563730 2.661666 -v -0.083520 0.108044 0.025686 -vn -4.171581 -0.643931 3.802685 -v -0.025083 0.082194 0.053862 -vn -3.767498 0.363726 4.829728 -v -0.046851 0.055265 0.037404 -vn -3.016042 2.729937 3.080582 -v -0.023529 0.051721 0.042321 -vn -3.277483 -0.093411 0.873466 -v -0.050184 0.054513 0.015440 -vn -4.665541 -0.523760 2.388376 -v -0.092681 0.120446 0.043376 -vn -5.298493 0.931009 1.316224 -v -0.091732 0.145774 0.025047 -vn -3.483220 -1.863635 -0.025102 -v -0.052279 0.056758 0.020813 -vn -3.210667 -1.460555 4.831923 -v -0.017320 0.061776 0.052119 -vn -4.893488 -1.387324 -0.762990 -v -0.074839 0.150076 -0.030050 -vn -4.937909 -0.317477 3.779040 -v -0.082227 0.090383 0.032092 -vn -3.986070 -2.761930 2.931170 -v -0.051912 0.061602 0.030372 -vn -1.988187 1.129251 5.577729 -v -0.070160 0.097143 0.041714 -vn -5.122376 -1.085538 3.355680 -v -0.022767 0.062836 0.044230 -vn -1.235594 -0.368716 4.927263 -v -0.079813 0.127549 0.053639 -vn -2.906489 0.634298 -1.399307 -v -0.077317 0.177933 -0.051513 -vn -3.357311 -2.565623 3.593840 -v -0.088870 0.116757 0.046080 -vn -4.528044 -1.804694 3.807382 -v -0.049720 0.063025 0.034634 -vn -3.442483 -0.220479 5.132259 -v -0.085947 0.124511 0.048612 -vn -4.691182 0.606698 3.817549 -v -0.083826 0.096831 0.030757 -vn -1.890426 -1.078978 4.611037 -v -0.031068 0.081841 0.041494 -vn -3.309379 0.103908 -4.997811 -v -0.075107 0.113630 -0.006024 -vn -1.907898 4.157027 3.646714 -v -0.016614 0.095750 0.052691 -vn -3.481753 1.764462 4.257040 -v -0.023684 0.086888 0.054410 -vn -2.924878 4.987013 1.872182 -v -0.058430 0.157205 0.007613 -vn -0.254358 -0.295486 -6.251141 -v -0.052027 0.088561 -0.021977 -vn -4.644541 1.495275 3.463665 -v -0.087371 0.130918 0.046734 -vn -2.211095 0.851495 -5.622077 -v -0.071457 0.115205 -0.007847 -vn -1.778540 -2.465528 5.239796 -v -0.080527 0.116727 0.048561 -vn -5.506599 1.378833 2.051031 -v -0.088232 0.100321 0.022327 -vn -2.927709 0.157523 5.364776 -v -0.071665 0.090209 0.041841 -vn -0.277282 2.198507 -5.762552 -v -0.040638 0.107702 -0.019971 -vn -4.244422 -1.972437 3.921573 -v -0.022796 0.074705 0.052353 -vn -5.297521 -1.968002 2.745181 -v -0.026444 0.075095 0.045684 -vn -2.520885 -1.955608 5.220235 -v -0.068977 0.081628 0.041791 -vn -4.462826 -1.842593 -2.095818 -v -0.045100 0.034475 -0.023192 -vn -5.717920 2.101159 0.381723 -v -0.093349 0.130605 0.021401 -vn -4.685751 1.926454 -3.036557 -v -0.061763 0.038716 0.023717 -vn -5.473397 -1.810462 -2.329371 -v -0.071489 0.166078 -0.046220 -vn -5.058003 1.977053 -2.517068 -v -0.044718 0.038309 -0.022782 -vn -4.059040 3.185980 -3.288708 -v -0.060254 0.040382 0.021811 -vn -5.475415 -1.131330 -2.748893 -v -0.068504 0.168672 -0.053981 -vn -4.114663 -1.361141 -1.764503 -v -0.078775 0.173264 -0.046197 -vn -3.873200 2.427289 -3.809093 -v -0.041897 0.038847 -0.026470 -vn -5.258497 0.701612 -3.319133 -v -0.088313 0.129687 0.002588 -vn -3.273174 3.867993 -2.517677 -v -0.040571 0.045501 -0.021744 -vn -3.982594 3.759423 -1.323691 -v -0.069088 0.043131 0.001424 -vn -3.280848 4.328462 0.183596 -v -0.056003 0.042040 0.019429 -vn -4.137817 3.685533 -0.408955 -v -0.063781 0.044721 0.032596 -vn -4.114463 3.279706 -2.182618 -v -0.063794 0.042954 0.028103 -vn -4.221366 -3.469511 -2.634172 -v -0.073957 0.165765 -0.040067 -vn -4.887263 -2.016220 -2.155654 -v -0.091421 0.115996 0.007407 -vn -5.472220 2.249179 -1.685037 -v -0.046069 0.039473 -0.017248 -vn -3.252862 4.562538 -2.680660 -v -0.057799 0.046964 -0.002707 -vn -3.109763 4.453841 0.972929 -v -0.067150 0.045233 0.006394 -vn -3.794018 4.756464 -0.582268 -v -0.054828 0.048688 0.030215 -vn -4.388919 3.016360 -2.412828 -v -0.053441 0.162029 -0.001213 -vn -4.494921 3.212618 -2.236346 -v -0.053216 0.046657 0.023316 -vn -2.034922 5.720964 1.318421 -v -0.053382 0.049317 0.035167 -vn -3.482963 -3.617813 -3.614501 -v -0.074107 0.171918 -0.047624 -vn -3.221081 2.060237 -4.195560 -v -0.027558 0.049037 -0.024812 -vn -2.670611 5.402469 -1.596012 -v -0.032408 0.049091 -0.019049 -vn -4.321980 3.752576 -0.910490 -v -0.058354 0.048352 0.002063 -vn -4.069468 0.745106 -4.370874 -v -0.079702 0.139501 -0.004318 -vn -5.546577 1.660439 1.179043 -v -0.078972 0.166589 -0.031500 -vn -4.486548 2.297696 -1.602006 -v -0.030923 0.050998 -0.014993 -vn -5.449053 0.516589 2.910882 -v -0.055477 0.053838 0.008835 -vn -6.115006 0.323959 -0.510519 -v -0.052227 0.053524 0.025391 -vn -2.418352 0.199386 -5.111060 -v -0.065675 0.176297 -0.060702 -vn -5.130173 1.754356 -2.499742 -v -0.029589 0.050777 -0.020655 -vn -5.198124 -0.841899 -3.250017 -v -0.054647 0.055404 -0.004958 -vn -5.686954 -1.852813 -0.343353 -v -0.057533 0.056760 0.003189 -vn -5.937036 -0.841103 -1.788525 -v -0.030896 0.056784 -0.016670 -vn -2.924379 -5.292533 -0.953841 -v -0.059570 0.059136 0.004220 -vn -3.257044 -2.732197 1.468646 -v -0.055125 0.056655 0.010047 -vn -5.735948 1.283473 -1.637237 -v -0.089346 0.137701 0.012789 -vn -4.483919 -1.670480 -1.181222 -v -0.079310 0.167698 -0.037783 -vn -6.087029 1.140606 0.664260 -v -0.091950 0.127848 0.031773 -vn 1.048131 1.323979 -6.040297 -v 0.001459 0.103554 -0.022208 -vn -2.424145 -1.782817 -2.746691 -v -0.042156 0.034149 -0.027953 -vn -5.591403 1.772020 1.334513 -v -0.076973 0.157861 -0.011049 -vn -1.509918 -3.821166 -4.649479 -v -0.016632 0.166879 -0.019839 -vn -4.426495 -1.006108 -2.875471 -v -0.068878 0.157607 -0.053241 -vn -4.306664 -1.653861 -3.993627 -v -0.025959 0.056063 -0.028477 -vn -5.713107 -1.408136 -2.082056 -v -0.028993 0.059922 -0.023623 -vn -3.838073 2.953544 -3.793759 -v -0.040396 0.171737 -0.009624 -vn -5.928720 1.730234 0.949654 -v -0.090167 0.132068 0.034669 -vn -0.469121 5.483239 -2.956070 -v -0.025370 0.121886 -0.007301 -vn -5.238899 -2.283546 -2.428878 -v -0.032937 0.061785 -0.014457 -vn 1.374102 -3.257416 -4.076581 -v -0.019791 0.034699 -0.027622 -vn -3.706697 4.090268 -1.909637 -v -0.058744 0.157320 0.002895 -vn 4.055600 2.161165 -4.162670 -v 0.033895 0.095496 -0.013888 -vn -3.583514 -4.547219 -1.879148 -v -0.071104 0.064618 0.001461 -vn -4.383003 2.484955 -3.276150 -v -0.085939 0.138620 0.002605 -vn -5.313048 -1.680559 -2.580730 -v -0.029027 0.063647 -0.028167 -vn 5.591245 -1.034597 -2.625534 -v 0.041889 0.065322 -0.003134 -vn -0.006474 2.923205 -5.425916 -v -0.043650 0.116244 -0.015638 -vn -4.964347 -1.995424 -3.124882 -v -0.029045 0.067975 -0.030204 -vn 0.356758 5.097700 -3.118715 -v -0.044443 0.126214 -0.007543 -vn 2.688652 1.928320 -4.775914 -v 0.012771 0.090022 -0.030352 -vn -4.842363 1.677036 -2.727569 -v -0.089617 0.133793 0.004686 -vn -3.996927 -4.469086 -1.802557 -v -0.075737 0.070220 -0.000006 -vn -3.926754 3.793914 -1.588145 -v -0.046374 0.168998 -0.004678 -vn -3.338250 -1.447873 -5.065185 -v -0.035549 0.073546 -0.018811 -vn -3.618954 -3.751968 -2.479409 -v -0.076740 0.072279 -0.005263 -vn -5.081039 -2.616633 -2.003323 -v -0.082266 0.076728 0.000412 -vn -5.055360 -3.541048 0.774614 -v -0.082193 0.075612 0.016612 -vn -4.396467 1.090321 -3.067734 -v -0.089346 0.148423 0.010296 -vn -5.904637 1.286613 0.316107 -v -0.090520 0.135806 0.020071 -vn -6.020581 0.206336 -1.011939 -v -0.073001 0.155262 -0.031430 -vn -4.909943 -2.881738 -1.663398 -v -0.074173 0.159711 -0.030151 -vn -4.318497 2.732601 -2.989066 -v -0.081797 0.150429 0.002131 -vn 2.781409 1.281605 -5.311362 -v 0.026497 0.089950 -0.022537 -vn -6.034796 -1.082136 -0.627063 -v -0.076930 0.153451 -0.009182 -vn -5.772584 -0.960103 -1.792278 -v -0.033418 0.076311 -0.027297 -vn 0.897459 1.608931 -5.946432 -v 0.006391 0.109745 -0.020190 -vn -5.333162 -2.438507 -1.964347 -v -0.082992 0.080904 -0.000199 -vn -5.519381 -2.090490 -0.800946 -v -0.085986 0.079884 0.008747 -vn -5.111777 -2.405573 0.665693 -v -0.086312 0.079733 0.016721 -vn -4.123626 -0.720675 -4.267666 -v -0.075420 0.143697 -0.006221 -vn -5.147453 -0.724552 -0.618276 -v -0.075903 0.150586 -0.020560 -vn -5.008947 -0.725029 -3.063275 -v -0.031744 0.077065 -0.032159 -vn -4.839126 0.811560 -3.566641 -v -0.033376 0.084634 -0.025796 -vn -5.744068 -2.265728 -0.512528 -v -0.086610 0.083724 0.008909 -vn -5.549580 -1.993589 1.999849 -v -0.085174 0.084182 0.024246 -vn -3.992902 3.623828 2.488717 -v -0.086749 0.147938 0.032787 -vn 4.300764 4.026931 -1.587035 -v 0.032397 0.116112 0.000109 -vn -5.829935 -2.012132 0.503632 -v -0.086908 0.084821 0.015355 -vn -3.453119 4.511027 0.799767 -v -0.088933 0.152068 0.020562 -vn 3.538670 0.543402 -5.141011 -v 0.029339 0.085435 -0.020728 -vn -5.544555 1.012051 -2.474277 -v -0.032198 0.081905 -0.030406 -vn -5.024198 -0.597393 -2.880268 -v -0.078821 0.084413 -0.010431 -vn -5.039504 -1.887022 -2.426510 -v -0.084719 0.084231 -0.002304 -vn -5.206524 -1.673001 -1.471460 -v -0.087722 0.085773 0.003947 -vn -5.814547 -0.546874 -1.541406 -v -0.091350 0.144282 0.015552 -vn -5.037554 -0.979019 -1.151433 -v -0.074679 0.153763 -0.018695 -vn -5.636609 1.512849 0.279312 -v -0.091723 0.148034 0.019605 -vn -5.035193 -0.241919 -3.213140 -v -0.084103 0.091128 -0.005384 -vn -5.080513 -1.912513 -0.675305 -v -0.077751 0.156342 -0.017998 -vn -4.994093 -1.696939 -0.504176 -v -0.078594 0.161463 -0.026169 -vn -2.283951 -1.890689 -3.631057 -v -0.066289 0.162096 -0.058357 -vn -5.117329 -1.217907 -0.592836 -v -0.086325 0.109140 0.013157 -vn -5.651597 -0.446094 -2.420356 -v -0.086453 0.092696 0.002756 -vn -5.970924 0.239591 -1.763871 -v -0.088479 0.092153 0.006769 -vn -5.546511 0.352805 0.734027 -v -0.088759 0.137175 0.026184 -vn -4.668717 3.130157 1.437229 -v -0.078630 0.170060 -0.036333 -vn -6.066381 0.059517 -1.520558 -v -0.070421 0.158643 -0.046573 -vn -3.434155 1.435655 -4.016772 -v -0.028368 0.084787 -0.035920 -vn -2.994592 -0.028308 -5.281935 -v -0.073472 0.086184 -0.015753 -vn -3.841007 0.638149 -4.658265 -v -0.077540 0.094106 -0.012339 -vn -6.010108 0.479576 1.120610 -v -0.089567 0.141268 0.031055 -vn -5.672987 -1.492905 -0.791484 -v -0.076688 0.148007 -0.007775 -vn -5.372464 2.424027 -1.112657 -v -0.077171 0.152803 -0.002345 -vn -4.710579 1.066993 -3.952303 -v -0.082137 0.138333 -0.000940 -vn -0.213426 3.361748 -4.799176 -v 0.002527 0.116488 -0.018202 -vn 0.728090 3.685807 -4.417110 -v -0.000446 0.099976 -0.023363 -vn 2.045355 4.161624 -3.897235 -v 0.014292 0.121076 -0.011654 -vn -2.781228 3.648100 -3.078499 -v -0.016798 0.185640 -0.024425 -vn 1.858568 2.900206 -4.450298 -v 0.053184 0.066141 -0.000503 -vn -0.395873 1.983380 -5.587629 -v -0.053018 0.111057 -0.018184 -vn -3.089411 2.906894 -3.642850 -v -0.066550 0.040888 -0.005388 -vn 4.991074 3.107578 -2.158695 -v 0.035673 0.108457 -0.004447 -vn 1.274703 3.328767 -4.597878 -v -0.052004 0.127157 -0.004911 -vn -0.360586 3.859335 -4.161891 -v -0.012572 0.099355 -0.024359 -vn -0.591463 5.764256 -1.360058 -v -0.063471 0.154517 0.003520 -vn -0.422500 2.222833 -3.463716 -v -0.013693 0.183749 -0.028075 -vn -1.028085 0.664265 -5.943066 -v -0.056978 0.149608 -0.001673 -vn 1.913785 3.078248 -5.012307 -v 0.020577 0.106778 -0.016469 -vn 2.496604 4.063100 -3.460741 -v 0.047538 0.071364 0.004894 -vn 1.184667 3.066413 -5.118007 -v 0.013475 0.096868 -0.023723 -vn -1.333376 -2.067802 -3.582000 -v -0.051518 0.034089 -0.012737 -vn 2.482683 4.036065 -2.694777 -v -0.063224 0.151897 -0.000698 -vn 2.799732 1.795544 -4.876194 -v -0.059888 0.145116 -0.002657 -vn -1.498024 1.755812 -5.461653 -v -0.065792 0.117422 -0.008993 -vn 2.706365 3.291737 -4.546779 -v 0.025516 0.112749 -0.011402 -vn 4.044629 0.866009 -4.366913 -v 0.036900 0.087095 -0.016224 -vn 1.424047 3.721227 -4.223684 -v 0.003562 0.095315 -0.031202 -vn 0.612912 4.125947 -4.297299 -v 0.008165 0.120763 -0.014191 -vn 0.830109 2.468724 -5.525443 -v 0.013518 0.105177 -0.019403 -vn 1.803360 2.207177 -5.404728 -v 0.012725 0.111949 -0.018267 -vn 0.832823 3.064453 -4.700019 -v 0.006610 0.100083 -0.021669 -vn -1.429163 4.911261 -3.511646 -v -0.014096 0.121539 -0.009385 -vn -1.483934 3.453614 -4.238971 -v -0.024072 0.096002 -0.025153 -vn 3.230238 0.659414 -5.201444 -v -0.054766 0.142467 -0.001550 -vn 0.113363 3.503714 -5.046353 -v -0.034816 0.113775 -0.017117 -vn 0.035804 -0.814338 -5.430084 -v -0.033852 0.035368 -0.031063 -vn 3.062070 2.082974 -4.983165 -v 0.026890 0.096733 -0.019807 -vn -0.601313 4.196719 -4.442304 -v -0.011368 0.119297 -0.014104 -vn 0.513313 4.714929 -3.813689 -v -0.005209 0.096249 -0.031846 -vn -2.638945 2.340240 -5.073604 -v -0.053254 0.045200 -0.007933 -vn 0.848995 1.139777 -5.978301 -v -0.010635 0.085729 -0.038418 -vn -1.540852 2.887154 -4.533394 -v -0.034508 0.043483 -0.029064 -vn 3.105134 0.688823 -5.158306 -v -0.062065 0.140970 -0.006217 -vn 3.044163 2.536781 -3.017878 -v 0.057450 0.068677 0.003243 -vn -0.299660 3.681948 -4.895190 -v -0.018780 0.113551 -0.018448 -vn -0.407176 4.134895 -4.678569 -v -0.004136 0.116658 -0.016049 -vn 0.851834 2.701036 -4.981826 -v 0.017516 0.102001 -0.022248 -vn -2.216035 2.485471 -4.429418 -v -0.042107 0.047843 -0.011358 -vn -2.558224 4.656334 -2.788987 -v -0.036907 0.046150 -0.024111 -vn 1.535727 1.370578 -5.832878 -v 0.006856 0.088557 -0.032704 -vn 3.695477 2.026347 -4.413884 -v 0.033743 0.091737 -0.017191 -vn 2.909027 1.389085 -5.210147 -v 0.017026 0.086869 -0.028615 -vn 2.832581 4.446975 -2.939241 -v -0.047427 0.129259 -0.000267 -vn 2.608176 0.281911 -4.328668 -v 0.039365 0.058578 -0.004760 -vn -3.169234 1.804911 -3.823170 -v -0.048050 0.036456 -0.012517 -vn -0.369310 2.501712 -5.719421 -v -0.045563 0.111365 -0.017278 -vn 0.019763 2.731796 -4.914706 -v -0.006231 0.110966 -0.022038 -vn -0.217545 3.423695 -5.151430 -v -0.013133 0.112795 -0.018098 -vn -0.647178 5.330300 -2.991719 -v -0.013120 0.096813 -0.030895 -vn 3.284957 0.891990 -4.685681 -v -0.057428 0.138324 -0.005332 -vn 1.998423 1.052634 -5.750774 -v -0.059891 0.133375 -0.007156 -vn -0.545308 3.605767 -5.033075 -v -0.027254 0.111286 -0.017954 -vn 2.804976 2.643938 -4.801428 -v 0.026498 0.102745 -0.017429 -vn 4.881342 2.507492 -2.854039 -v -0.049012 0.133343 0.001109 -vn -0.694675 3.668845 -4.197451 -v -0.017438 0.098212 -0.024657 -vn 2.445362 2.256860 -4.331510 -v 0.044176 0.066522 0.000295 -vn -0.948689 -2.246251 -2.828583 -v -0.037263 0.033693 -0.030427 -vn 4.180097 1.869415 -3.717965 -v 0.035769 0.102443 -0.011071 -vn -0.327554 2.856490 -2.513732 -v -0.066354 0.180335 -0.059708 -vn 3.309835 2.043236 -4.429143 -v -0.052784 0.132589 -0.004133 -vn 1.597489 5.656709 -1.712684 -v -0.037473 0.127192 -0.001114 -vn 1.406698 5.621265 -1.636024 -v 0.010617 0.130194 0.002153 -vn -0.246060 2.983001 -5.295377 -v -0.021638 0.108672 -0.021670 -vn -2.155078 3.762225 -3.496416 -v -0.023139 0.092875 -0.034198 -vn -1.330705 6.015928 -1.051121 -v -0.018555 0.127641 0.005405 -vn 0.585591 2.845164 -5.482149 -v -0.001362 0.111962 -0.019876 -vn 3.851923 3.385612 -3.113956 -v 0.032018 0.112252 -0.007289 -vn -0.581315 4.679611 -4.107591 -v -0.022510 0.117696 -0.013437 -vn -0.564657 2.408912 -5.451535 -v -0.060099 0.120701 -0.009062 -vn -0.071736 3.507671 -4.837597 -v -0.013956 0.092589 -0.036088 -vn -0.796297 3.704876 -4.780685 -v -0.050540 0.120139 -0.013137 -vn 0.990625 5.003748 -3.513777 -v -0.032764 0.121061 -0.008637 -vn -0.647147 4.709548 -3.602543 -v -0.006674 0.125611 -0.008770 -vn 0.635920 5.135188 -3.281871 -v 0.006304 0.126625 -0.006712 -vn 3.048514 4.450634 -2.911419 -v 0.023744 0.120248 -0.005538 -vn 0.963798 2.520165 -5.229930 -v 0.049896 0.062123 -0.003628 -vn -1.404216 5.426106 -2.739289 -v -0.016137 0.125226 -0.003857 -vn -1.156643 5.755827 -1.845091 -v -0.008677 0.128549 -0.001683 -vn 0.537982 -5.591938 -1.850918 -v 0.005402 0.034121 -0.021028 -vn 0.561050 -3.609666 -4.534167 -v -0.001155 0.035187 -0.024178 -vn 0.910445 -3.387452 -5.058351 -v -0.010776 0.035392 -0.025187 -vn 1.029354 -2.215189 -5.054176 -v 0.005162 0.036596 -0.024174 -vn -2.664245 1.720335 -5.391418 -v -0.069064 0.101583 -0.014812 -vn -3.200632 1.141410 -4.532271 -v -0.067338 0.036440 -0.006804 -vn -2.470987 -2.136166 -2.061054 -v -0.068844 0.033871 -0.005651 -vn 2.158489 -5.130451 -2.847184 -v 0.023889 0.036159 -0.000526 -vn 0.721441 -0.527770 -6.143589 -v -0.006619 0.039887 -0.025918 -vn 1.049471 -2.837200 -4.609525 -v -0.025639 0.035034 -0.029055 -vn -2.950443 1.138120 -5.358952 -v -0.078607 0.132765 -0.005546 -vn -1.291233 -2.298125 -3.135402 -v -0.063059 0.033881 -0.008786 -vn 1.753909 -4.266781 -3.657057 -v 0.036740 0.040222 -0.001837 -vn 1.528978 -2.373367 -5.265629 -v -0.016949 0.036119 -0.027097 -vn 1.698999 -2.216789 -5.567635 -v 0.012593 0.039094 -0.022718 -vn 0.732738 -2.254253 -5.222185 -v -0.004555 0.042975 -0.025542 -vn 1.244219 0.346220 -5.971521 -v -0.020553 0.041618 -0.028786 -vn -1.605101 2.258870 -5.534973 -v -0.052658 0.041002 -0.010570 -vn -5.186438 1.607212 -3.051773 -v -0.069939 0.037201 -0.002200 -vn -3.671365 2.088877 -4.368409 -v -0.028539 0.177149 -0.016796 -vn 2.181900 -4.181639 -4.086436 -v 0.024904 0.039334 -0.004110 -vn -2.401276 -3.434235 2.485825 -v -0.033521 0.035342 0.048740 -vn 1.723695 -2.386110 -5.418097 -v 0.012950 0.046859 -0.025875 -vn 0.430755 -1.508382 -5.789563 -v -0.016501 0.044196 -0.027443 -vn 0.321220 1.735906 -5.773506 -v -0.029921 0.041870 -0.029797 -vn 2.284586 -3.813135 -4.270525 -v 0.042608 0.045705 -0.003640 -vn -2.257079 0.833659 -5.694993 -v -0.060656 0.096277 -0.018730 -vn 3.394227 -2.475448 -4.313583 -v 0.020563 0.047260 -0.021115 -vn 0.786958 -2.831846 -5.467429 -v 0.006584 0.045097 -0.025424 -vn -0.093187 -3.756371 -4.469017 -v -0.006634 0.045713 -0.029357 -vn 0.781202 -1.941594 4.614951 -v -0.051201 0.036266 0.046696 -vn -3.393321 2.466035 -4.021859 -v -0.046634 0.041753 -0.011715 -vn 3.575802 -1.462354 -3.453103 -v 0.027361 0.050602 -0.020193 -vn 1.391885 -2.547979 -5.009366 -v 0.001191 0.048251 -0.030116 -vn 0.664783 -1.793236 -5.942995 -v -0.004183 0.051663 -0.031592 -vn -4.704611 1.232496 -3.876639 -v -0.054532 0.048794 -0.005607 -vn 1.031067 -1.886816 -5.588934 -v 0.039717 0.048196 -0.006273 -vn 2.833501 -3.334690 -3.768507 -v 0.029573 0.046826 -0.006942 -vn 1.894240 -1.005548 -5.623591 -v 0.014876 0.055388 -0.028906 -vn -0.146267 -3.519603 -5.102991 -v -0.011675 0.046714 -0.029536 -vn -1.154963 -0.019472 -5.788070 -v -0.021969 0.046638 -0.027647 -vn -0.649189 2.553441 -5.653012 -v -0.033239 0.106954 -0.020055 -vn -2.673129 -0.893073 -5.394556 -v -0.023665 0.172923 -0.020503 -vn 2.878637 -2.873295 -4.307651 -v 0.047593 0.048979 -0.003745 -vn -0.792952 -3.178947 -4.646562 -v -0.069480 0.141087 -0.008223 -vn -0.356856 -4.108925 -3.617630 -v -0.067465 0.155828 -0.052825 -vn 2.550919 -1.422135 -4.752334 -v 0.035448 0.053226 -0.006698 -vn 2.566608 -2.880515 -4.490339 -v 0.022027 0.051394 -0.024219 -vn 0.538059 -1.267633 -5.698787 -v 0.008179 0.054473 -0.030646 -vn 1.396882 -2.129105 -5.680023 -v 0.004858 0.051410 -0.029406 -vn -0.616774 -0.846350 -6.104668 -v -0.043317 0.054322 -0.011249 -vn 3.146122 -0.824063 -4.550228 -v 0.022929 0.056484 -0.026263 -vn 1.829072 -1.858322 -5.585440 -v 0.002296 0.057525 -0.032250 -vn -1.692216 -2.664045 -5.299651 -v -0.017362 0.051882 -0.031852 -vn -2.033151 1.678500 -2.965024 -v -0.032890 0.050995 -0.010667 -vn -2.490085 1.172872 -5.636971 -v -0.068941 0.096173 -0.016213 -vn 1.033723 -1.678642 -5.935401 -v -0.002724 0.055123 -0.031988 -vn -0.261678 -2.271012 -5.631395 -v -0.014241 0.055933 -0.034546 -vn -0.682749 -1.158479 -5.678084 -v -0.035203 0.056818 -0.010542 -vn 1.274792 0.193884 -5.505945 -v 0.046443 0.055228 -0.006332 -vn -4.143450 -0.836806 -3.835458 -v -0.086920 0.121543 -0.001967 -vn 2.425514 -1.551958 -5.258655 -v 0.005380 0.060006 -0.031052 -vn -2.688803 -2.159238 -5.070685 -v -0.021206 0.063178 -0.035407 -vn -0.081434 2.109581 -5.882597 -v -0.014822 0.104813 -0.022748 -vn 1.209774 -0.760586 -5.894783 -v -0.001089 0.063134 -0.034806 -vn 1.183066 -1.207467 -6.016953 -v -0.009726 0.063159 -0.035872 -vn -3.668478 -1.594434 -3.437469 -v -0.032502 0.058736 -0.012148 -vn 0.143391 -2.190269 -5.860161 -v -0.041493 0.062512 -0.013150 -vn -1.193304 1.628470 -5.905185 -v -0.055494 0.103961 -0.019197 -vn -0.420886 0.331960 -6.100231 -v -0.069104 0.127700 -0.009258 -vn 2.836908 -0.033424 -5.520826 -v 0.020632 0.060902 -0.026612 -vn -3.238084 -0.257091 -5.285370 -v -0.050623 0.052431 -0.008290 -vn -3.485631 -3.570259 -3.094790 -v -0.056845 0.061046 -0.003982 -vn -2.151558 0.389041 -5.724267 -v -0.077177 0.127417 -0.007440 -vn 1.129343 -1.017294 -5.154598 -v 0.010593 0.067871 -0.030774 -vn 1.960793 -1.114228 -5.751751 -v 0.006767 0.064712 -0.032530 -vn 0.039676 -1.523710 -5.837566 -v -0.015485 0.064992 -0.037611 -vn -2.314391 -4.711298 -2.531625 -v -0.065281 0.062413 -0.002734 -vn 3.757053 -0.498878 -4.771686 -v 0.026823 0.064951 -0.021337 -vn 2.016375 -0.811496 -5.760109 -v 0.015081 0.066669 -0.030260 -vn -1.766122 -1.274123 -5.577400 -v -0.029944 0.167187 -0.017059 -vn -3.406791 -1.285182 -4.973622 -v -0.017586 0.175944 -0.024574 -vn -1.297792 1.763809 -5.872314 -v -0.032719 0.102131 -0.022168 -vn 1.274720 -0.573349 -6.020175 -v -0.000142 0.068984 -0.033959 -vn 1.464581 -0.691912 -6.010160 -v -0.008058 0.066827 -0.035712 -vn -3.803025 -1.381012 -4.428134 -v -0.027915 0.073585 -0.035382 -vn -2.408362 -2.540107 -4.686806 -v -0.035279 0.066010 -0.014882 -vn -1.882806 -2.061697 -5.508840 -v -0.047000 0.064668 -0.013751 -vn -1.833576 -4.671825 -3.748458 -v -0.060980 0.065642 -0.008172 -vn 1.076484 0.352520 -2.498531 -v -0.010119 0.178375 -0.030193 -vn -2.290289 2.764254 -5.010884 -v -0.061801 0.112880 -0.014394 -vn 0.201073 -0.311417 -6.186754 -v -0.067821 0.139100 -0.008020 -vn -5.402851 -1.841468 -2.491268 -v -0.032818 0.068429 -0.019995 -vn -2.204504 -3.158869 -4.620412 -v -0.053317 0.065128 -0.010205 -vn -2.053773 -1.499814 -5.343858 -v -0.038357 0.160898 -0.012890 -vn -4.535330 -3.603331 0.832002 -v -0.080383 0.071096 0.015962 -vn 3.169443 -0.352102 -5.192020 -v 0.022221 0.069765 -0.027275 -vn -3.980627 0.638005 -4.083691 -v -0.086087 0.126739 -0.002898 -vn 1.420061 -0.640139 -5.996555 -v -0.008005 0.075874 -0.037911 -vn -1.676597 -0.772072 -5.517219 -v -0.022256 0.073469 -0.038837 -vn -0.618755 -2.109227 -5.732773 -v -0.038298 0.073022 -0.017410 -vn -1.037982 -3.893235 -4.346249 -v -0.059352 0.070117 -0.015245 -vn -3.030084 -4.398011 -3.272894 -v -0.068926 0.068296 -0.005829 -vn -3.239716 2.221931 -4.834121 -v -0.065003 0.106783 -0.014640 -vn 2.220161 -1.212501 -5.681921 -v 0.009044 0.070669 -0.032635 -vn -0.422505 -1.958643 -5.517745 -v -0.043296 0.071283 -0.017836 -vn -2.280412 -1.171559 -5.507233 -v -0.076730 0.118361 -0.007049 -vn 2.865802 0.124832 -5.568679 -v 0.013139 0.075411 -0.030629 -vn 2.088827 -0.737078 -5.471972 -v 0.007789 0.073786 -0.034176 -vn 1.605410 -0.649805 -6.010971 -v -0.002096 0.077350 -0.036286 -vn 3.421686 0.391841 -5.196198 -v 0.026025 0.075864 -0.024615 -vn 0.575536 -0.538209 -6.219788 -v -0.014101 0.076218 -0.038681 -vn -0.456441 -2.807613 -5.393512 -v -0.056861 0.075425 -0.018800 -vn -2.969008 -4.130794 -3.507520 -v -0.069305 0.072272 -0.011337 -vn 2.279690 0.499347 -5.757993 -v 0.008278 0.079888 -0.033425 -vn 0.168602 -2.332073 -5.800937 -v -0.045800 0.079265 -0.019488 -vn -1.098329 -2.723700 -5.296250 -v -0.048511 0.072361 -0.015755 -vn 0.741605 -0.228991 -6.003376 -v -0.014679 0.080905 -0.039415 -vn -1.373470 0.275419 -5.892548 -v -0.021161 0.081146 -0.039114 -vn -3.274830 -1.724252 -3.767007 -v -0.035381 0.077826 -0.019690 -vn -1.938116 -0.921117 -5.842093 -v -0.061745 0.081517 -0.019408 -vn -2.651678 -0.999888 -5.423191 -v -0.050646 0.154061 -0.005029 -vn -0.350031 1.499208 -6.047258 -v -0.039408 0.101985 -0.021012 -vn 1.891169 0.309517 -5.518405 -v -0.001989 0.084029 -0.037308 -vn -0.647381 -1.442424 -5.711532 -v -0.055540 0.081356 -0.021564 -vn -2.380841 -2.328468 -4.964579 -v -0.067606 0.076998 -0.016588 -vn -3.552002 -3.157693 -3.938307 -v -0.072835 0.075479 -0.011548 -vn -2.309867 0.900221 -5.315913 -v -0.063403 0.102667 -0.018109 -vn -3.555196 -1.074805 -4.635286 -v -0.074352 0.083824 -0.015033 -vn -4.761543 -2.017496 -3.415118 -v -0.079865 0.080647 -0.007037 -vn -3.251969 1.603944 -4.971340 -v -0.075044 0.099103 -0.012772 -vn 1.284948 -1.992727 -5.521970 -v -0.053079 0.145367 -0.001062 -vn 3.932287 -0.287469 -4.694476 -v 0.033453 0.080862 -0.018831 -vn 3.275712 0.933640 -5.219936 -v 0.024434 0.084201 -0.024724 -vn -0.689848 1.769053 -5.726588 -v -0.018231 0.086384 -0.038771 -vn -2.075829 -0.187702 -5.840717 -v -0.036341 0.087714 -0.023736 -vn -2.292516 -3.041260 -4.876693 -v -0.036038 0.081294 -0.022184 -vn -0.699799 -1.756535 -5.934102 -v -0.042168 0.084087 -0.021148 -vn -4.150049 1.130184 -4.477622 -v -0.055194 0.155854 -0.001816 -vn 1.954654 1.983075 -5.605588 -v 0.020022 0.095055 -0.023044 -vn 2.025712 0.912203 -5.839200 -v 0.003429 0.084856 -0.034063 -vn -1.983852 0.078786 -5.796405 -v -0.057716 0.087047 -0.021331 -vn -1.395693 0.800818 -5.888027 -v -0.064327 0.093460 -0.018729 -vn 1.483109 2.538232 -5.349003 -v -0.002486 0.091428 -0.035022 -vn -0.718306 -0.565213 -6.189129 -v -0.043559 0.089715 -0.022140 -vn 0.586543 -4.735065 -2.507626 -v -0.031048 0.033506 -0.029307 -vn 0.461403 -6.029703 -0.899170 -v -0.027066 0.033518 -0.026370 -vn 0.653404 -5.623094 -1.431303 -v -0.018731 0.033526 -0.024855 -vn 0.361228 -5.864080 -1.355607 -v -0.000795 0.033932 -0.021875 -vn 0.305339 -5.407276 -1.620411 -v -0.010702 0.033665 -0.023378 -vn -0.153150 -6.141954 1.056340 -v 0.000102 0.034145 -0.018265 -vn -1.605566 -5.607874 -0.812614 -v -0.043525 0.033522 -0.023573 -vn 0.616189 -5.788922 1.577282 -v -0.033769 0.033782 -0.021216 -vn -0.256033 -5.011223 2.793563 -v -0.020336 0.033995 -0.020220 -vn -0.871023 -5.627550 1.155264 -v 0.009041 0.034156 -0.014319 -vn 0.457766 -4.303330 4.473708 -v -0.031051 0.035395 -0.019693 -vn -1.109514 -4.547956 3.936728 -v 0.002955 0.034746 -0.015846 -vn -0.536194 -4.832527 3.247339 -v -0.006928 0.034726 -0.017440 -vn -1.075396 -5.837102 -0.047997 -v 0.011382 0.034284 -0.009887 -vn -0.256683 -4.864142 2.679157 -v -0.020731 0.038564 -0.017034 -vn -1.591560 -4.476742 2.600860 -v 0.004305 0.038447 -0.013091 -vn 0.317911 -4.704145 2.560043 -v -0.028384 0.038714 -0.017394 -vn -2.659887 -4.592800 -0.887015 -v 0.006240 0.038638 -0.007066 -vn -2.484054 -2.901412 -1.531463 -v -0.047781 0.033668 -0.014869 -vn 0.087610 -6.281501 -0.095898 -v -0.021419 0.038598 -0.008727 -vn -0.321557 -6.186838 0.352081 -v 0.000226 0.039294 -0.010373 -vn -2.020763 -4.937644 -1.228935 -v 0.005207 0.034351 -0.000718 -vn 1.985232 -4.933501 1.826085 -v -0.034292 0.038263 -0.015016 -vn 2.072284 -5.459241 1.006790 -v -0.040013 0.034067 -0.013197 -vn 0.264455 -4.185878 -0.133220 -v 0.016893 0.034277 0.001943 -vn 1.090160 -5.949840 -1.237476 -v 0.023702 0.034745 0.002605 -vn 1.389204 -5.853153 -1.345016 -v 0.029995 0.035479 0.004802 -vn -1.054663 -2.186803 -2.963243 -v -0.058090 0.033677 -0.010831 -vn 0.036047 -6.266556 -0.260097 -v -0.053264 0.033387 -0.007121 -vn 1.003562 -4.337029 0.157190 -v -0.041975 0.033808 -0.006000 -vn -0.335594 -4.924673 2.478639 -v -0.007668 0.039045 -0.014558 -vn 0.000934 -3.842632 -0.022509 -v 0.021880 0.034389 0.006310 -vn 1.487663 -3.469343 0.507254 -v -0.038045 0.038252 -0.007312 -vn 0.041220 -3.695655 -0.108052 -v -0.029324 0.038238 0.002867 -vn -1.827541 -5.590177 -0.528605 -v -0.003362 0.038557 0.007072 -vn -2.043914 -4.958871 -0.871053 -v 0.001322 0.034177 0.006204 -vn 1.936477 -5.782485 0.069930 -v 0.034929 0.035896 0.011608 -vn 0.023908 -3.749604 -0.014085 -v -0.040483 0.033589 0.000777 -vn -2.288744 -5.148731 -1.490148 -v 0.000503 0.038624 0.000359 -vn 0.281534 -3.749377 0.262137 -v 0.007974 0.035303 0.005239 -vn -0.473364 -5.961977 0.158068 -v 0.025749 0.034373 0.012316 -vn 0.055369 -2.953012 -0.041502 -v -0.034541 0.038318 -0.002259 -vn 0.093556 -6.279986 0.071934 -v -0.011604 0.038268 0.017443 -vn -0.074952 -4.038264 -0.004326 -v 0.004670 0.033954 0.011450 -vn 0.418699 -5.828279 1.457961 -v -0.048354 0.033471 0.005871 -vn -0.925940 -6.100485 -0.191933 -v -0.068580 0.033439 -0.001794 -vn 0.121964 -6.280165 -0.147315 -v -0.014635 0.038471 0.001285 -vn -1.573628 -2.622198 0.055418 -v 0.022591 0.036265 0.012193 -vn 2.620239 -5.560765 0.944825 -v 0.042604 0.039957 0.016454 -vn -0.906931 -4.394035 4.006791 -v -0.056703 0.066649 0.036198 -vn 0.113319 -4.284014 0.352542 -v -0.053385 0.033554 0.010046 -vn -3.394146 -3.469792 -1.179729 -v -0.071524 0.034206 0.000364 -vn -0.159408 -6.265806 -0.192391 -v -0.061312 0.033359 -0.004212 -vn 0.050473 -2.633273 0.059969 -v -0.032691 0.033779 0.007960 -vn -2.315114 -5.047698 1.041707 -v 0.001078 0.034485 0.016979 -vn 0.153018 -4.528936 0.198768 -v 0.020599 0.034822 0.020436 -vn -4.804029 0.027972 -1.735587 -v -0.072546 0.036146 0.000873 -vn 0.300105 -2.153215 1.837942 -v -0.047468 0.035702 0.008340 -vn -0.028522 -3.993120 0.336888 -v -0.038997 0.033805 0.008230 -vn -0.006024 -4.176673 0.188747 -v 0.008542 0.034574 0.019458 -vn 1.518244 -5.860992 1.271450 -v 0.030524 0.035652 0.017933 -vn 0.121771 -4.116627 0.088345 -v -0.034337 0.033842 0.013477 -vn 2.058368 -4.783494 3.234198 -v 0.031776 0.039405 0.026306 -vn 3.364819 -4.909647 1.400233 -v 0.049007 0.043889 0.019645 -vn -1.860308 -5.653318 0.535986 -v -0.003089 0.038241 0.016826 -vn 0.342031 -6.271612 0.086597 -v -0.022988 0.038014 0.018836 -vn -1.457573 -5.533040 1.581061 -v 0.000752 0.038601 0.023468 -vn -1.627662 -5.360640 1.701665 -v 0.007801 0.034790 0.024562 -vn -4.063713 -4.470137 1.557654 -v -0.073774 0.067281 0.021567 -vn -0.281993 -3.549576 0.050529 -v -0.054487 0.033508 0.018481 -vn -0.105478 -5.854477 0.423681 -v -0.033270 0.033792 0.021070 -vn 2.116701 -3.692899 0.647432 -v -0.029582 0.034443 0.017371 -vn 0.863276 -4.246927 0.201679 -v -0.026321 0.037804 0.015218 -vn 3.079411 -4.668875 2.641291 -v 0.026089 0.039285 0.030790 -vn 2.413568 -5.019984 2.592252 -v 0.042374 0.042416 0.025062 -vn -1.759407 -5.404191 1.442599 -v -0.067210 0.033946 0.011670 -vn -1.661236 -3.293296 1.135918 -v 0.007571 0.039379 0.030260 -vn 1.066742 -3.289505 4.462430 -v 0.040646 0.045861 0.031129 -vn -3.614755 -3.687841 2.339877 -v -0.053419 0.060334 0.026371 -vn -1.571296 -2.527946 -1.278923 -v -0.037211 0.035607 0.024040 -vn 0.025373 -6.043966 -0.746673 -v -0.038045 0.034099 0.027078 -vn 2.985725 -4.691442 0.976426 -v -0.028801 0.037509 0.021160 -vn -1.232923 -5.870563 0.061972 -v 0.012965 0.034937 0.030999 -vn -3.301684 -4.171348 0.667302 -v -0.089636 0.112264 0.038288 -vn -2.934777 -3.787755 0.031071 -v -0.061875 0.034283 0.020793 -vn -2.271023 -2.125395 -1.156838 -v 0.009042 0.037872 0.033309 -vn 1.480080 -5.892271 1.042617 -v 0.021603 0.035333 0.026006 -vn -2.263909 -5.780048 0.636655 -v -0.081163 0.109601 0.036369 -vn 3.359541 -4.607021 1.244864 -v -0.031112 0.034889 0.023586 -vn -0.593628 -4.042698 -0.587479 -v 0.007740 0.034745 0.037242 -vn -4.898901 -2.076441 2.203662 -v -0.083078 0.080713 0.028931 -vn -1.832477 -5.790102 -1.409158 -v -0.062974 0.060790 0.000987 -vn 0.142420 -3.484636 0.431723 -v -0.042326 0.033754 0.027276 -vn 0.222945 -6.266785 0.371365 -v -0.018901 0.038543 0.030074 -vn -3.111623 -5.130745 -1.151401 -v -0.071774 0.146677 -0.023282 -vn 0.067569 -3.170924 0.199903 -v -0.005679 0.039194 0.035725 -vn 3.284361 -3.723039 2.566025 -v 0.019719 0.036687 0.040338 -vn -2.245846 -5.371774 -1.021697 -v -0.072229 0.147934 -0.030656 -vn -0.022145 -2.986455 -0.123519 -v -0.005215 0.034847 0.041086 -vn 0.228551 -6.201661 0.392281 -v 0.009956 0.034539 0.039923 -vn 1.443631 -5.718741 1.135563 -v 0.016139 0.034969 0.040147 -vn 0.904384 -5.913854 -1.327276 -v -0.068403 0.147440 -0.029282 -vn -0.253220 -6.258934 0.257634 -v -0.058390 0.034190 0.027637 -vn 0.699566 -4.661230 0.336862 -v -0.035365 0.034571 0.034394 -vn 1.771916 -3.461829 0.743734 -v -0.031632 0.037947 0.032015 -vn -3.860110 -1.900667 2.998550 -v -0.078008 0.107205 0.032959 -vn 0.368451 -5.845762 1.415197 -v -0.006013 0.034624 0.046154 -vn -1.834245 -5.837148 0.437239 -v -0.063268 0.058824 0.013903 -vn -3.532793 -2.694383 -0.918064 -v -0.066256 0.035227 0.029091 -vn 0.036536 -4.482576 0.260501 -v -0.051471 0.034420 0.028042 -vn -0.034162 -6.236789 0.600134 -v -0.043812 0.034534 0.031004 -vn 0.099008 -3.737389 0.475318 -v -0.014431 0.034640 0.045422 -vn 0.280048 -5.883874 1.405071 -v 0.002573 0.034637 0.044014 -vn 1.066722 -2.804399 4.626234 -v 0.001973 0.035858 0.046304 -vn 1.431298 -4.025555 3.229284 -v -0.070262 0.112896 0.049789 -vn -1.430649 -3.419052 4.373636 -v -0.075806 0.114207 0.050642 -vn -1.361290 -4.428194 1.716416 -v -0.057157 0.058702 0.020854 -vn -2.602861 -4.907753 0.553019 -v -0.065535 0.034645 0.035249 -vn -0.792534 -6.080646 0.755981 -v -0.037498 0.034655 0.041837 -vn -0.066416 -3.886854 0.201852 -v -0.029741 0.034716 0.042303 -vn 0.127962 -2.439027 0.264266 -v -0.027066 0.038888 0.037210 -vn 0.042459 -2.534974 0.224597 -v -0.013872 0.039457 0.039436 -vn -1.702588 -4.923590 2.760331 -v -0.080347 0.110762 0.044546 -vn -4.130605 -4.560011 -1.240261 -v -0.077079 0.069098 0.006337 -vn -4.232856 -4.580774 -0.210441 -v -0.075456 0.066787 0.010644 -vn -4.909468 -0.837325 0.161120 -v -0.067206 0.036241 0.033334 -vn -1.244093 -3.861351 3.282135 -v -0.039450 0.035397 0.042800 -vn 1.237205 -3.224719 3.762014 -v -0.013804 0.035777 0.050707 -vn 1.370618 -2.422428 4.595876 -v -0.006285 0.036186 0.048918 -vn -1.243862 -3.686680 4.786521 -v -0.051269 0.068258 0.037389 -vn -2.275620 -5.242646 2.368794 -v -0.065692 0.062670 0.024009 -vn 0.426692 -5.740020 1.767862 -v -0.020574 0.034875 0.051289 -vn -0.225544 -5.668032 2.114560 -v -0.076746 0.109783 0.043694 -vn -2.982723 -5.219554 -0.358499 -v -0.069295 0.061043 0.011518 -vn -2.421857 -2.777637 2.002935 -v -0.063434 0.034779 0.041935 -vn -1.573385 -1.993822 4.509330 -v -0.085006 0.116812 0.048965 -vn 1.843655 1.163222 5.781137 -v -0.010037 0.042225 0.049743 -vn -2.576740 -4.717890 2.987446 -v -0.068510 0.067619 0.030981 -vn -4.044535 -4.091052 2.047774 -v -0.076623 0.071171 0.026666 -vn -1.769626 -5.135836 2.640703 -v -0.076355 0.108199 0.036986 -vn -4.656030 -3.814600 -0.891315 -v -0.081301 0.072740 0.006377 -vn 0.280904 -5.515228 2.010120 -v -0.050956 0.034633 0.044418 -vn -1.336963 -3.287436 2.925502 -v -0.028522 0.035165 0.052652 -vn 2.936245 -3.933468 0.486108 -v -0.016774 0.159536 -0.009411 -vn -2.922822 -2.469049 -2.082016 -v -0.070793 0.152810 -0.047562 -vn -0.389003 -3.097667 -5.346172 -v -0.031176 0.161019 -0.014200 -vn 2.344335 -4.263570 -1.417995 -v -0.013049 0.162775 -0.015775 -vn 0.311267 -5.638084 -1.580442 -v -0.068503 0.145629 -0.023406 -vn 0.194476 -2.295120 -4.254563 -v -0.010404 0.173137 -0.028363 -vn 4.013311 -4.209590 -1.328950 -v -0.064382 0.148615 -0.027080 -vn 2.877273 -4.973421 -1.524262 -v -0.065059 0.145172 -0.016596 -vn 2.113569 -1.333188 -2.476233 -v -0.061667 0.165526 -0.060411 -vn 0.293456 -4.684650 -3.905239 -v -0.020459 0.161121 -0.014151 -vn 0.644213 -4.558288 -4.049148 -v -0.029866 0.157369 -0.011341 -vn 3.414769 -2.991915 -2.228133 -v -0.063618 0.159690 -0.055655 -vn 4.150385 -3.777009 -1.639226 -v -0.049063 0.143476 0.002949 -vn -2.425833 -4.921269 -1.640010 -v -0.071721 0.144075 -0.014849 -vn 2.668813 -4.217816 -1.740614 -v -0.066664 0.152838 -0.047598 -vn 4.303092 -2.791105 -2.795282 -v -0.063526 0.143289 -0.008565 -vn 1.724447 -5.173141 -2.074986 -v -0.040941 0.148870 -0.003017 -vn 5.183498 -3.295669 -1.142609 -v -0.064800 0.154312 -0.041287 -vn 5.687422 -2.333261 -0.634689 -v -0.062677 0.150486 -0.023576 -vn 1.863927 -5.082564 -1.442444 -v -0.068470 0.149689 -0.040031 -vn 2.062991 -5.539170 -1.393987 -v -0.027723 0.155172 -0.006445 -vn -2.958652 -2.518410 -1.496984 -v -0.072019 0.150779 -0.042902 -vn -0.513124 -3.745934 -4.685424 -v -0.044036 0.150708 -0.005709 -# 1016 vertices, 0 vertices normals - -f 124//124 692//692 49//49 -f 705//705 692//692 124//124 -f 364//364 83//83 411//411 -f 448//448 8//8 443//443 -f 497//497 468//468 71//71 -f 686//686 362//362 67//67 -f 49//49 98//98 119//119 -f 504//504 576//576 543//543 -f 414//414 419//419 406//406 -f 672//672 869//869 638//638 -f 426//426 403//403 360//360 -f 585//585 586//586 591//591 -f 426//426 98//98 49//49 -f 1015//1015 995//995 1008//1008 -f 902//902 724//724 712//712 -f 390//390 102//102 130//130 -f 113//113 82//82 373//373 -f 119//119 12//12 99//99 -f 358//358 393//393 427//427 -f 401//401 409//409 321//321 -f 119//119 99//99 383//383 -f 404//404 421//421 411//411 -f 422//422 372//372 235//235 -f 422//422 420//420 372//372 -f 60//60 366//366 219//219 -f 362//362 361//361 371//371 -f 543//543 355//355 561//561 -f 57//57 92//92 482//482 -f 819//819 831//831 807//807 -f 458//458 526//526 17//17 -f 5//5 451//451 482//482 -f 145//145 88//88 451//451 -f 586//586 595//595 591//591 -f 415//415 2//2 460//460 -f 105//105 124//124 82//82 -f 991//991 801//801 574//574 -f 411//411 369//369 632//632 -f 5//5 145//145 451//451 -f 1016//1016 996//996 1004//1004 -f 417//417 483//483 361//361 -f 806//806 825//825 571//571 -f 362//362 370//370 367//367 -f 323//323 270//270 352//352 -f 786//786 64//64 725//725 -f 428//428 124//124 105//105 -f 129//129 280//280 92//92 -f 92//92 280//280 482//482 -f 482//482 280//280 5//5 -f 203//203 409//409 208//208 -f 678//678 660//660 677//677 -f 21//21 280//280 129//129 -f 5//5 211//211 145//145 -f 21//21 259//259 280//280 -f 335//335 1006//1006 301//301 -f 355//355 602//602 575//575 -f 354//354 611//611 216//216 -f 105//105 82//82 689//689 -f 402//402 119//119 383//383 -f 337//337 1005//1005 318//318 -f 402//402 124//124 119//119 -f 480//480 193//193 139//139 -f 143//143 148//148 121//121 -f 818//818 830//830 821//821 -f 705//705 124//124 428//428 -f 193//193 253//253 139//139 -f 18//18 27//27 41//41 -f 15//15 10//10 18//18 -f 1009//1009 1001//1001 347//347 -f 421//421 364//364 411//411 -f 689//689 82//82 431//431 -f 75//75 90//90 72//72 -f 46//46 50//50 39//39 -f 187//187 18//18 10//10 -f 34//34 27//27 18//18 -f 339//339 349//349 563//563 -f 692//692 426//426 49//49 -f 135//135 480//480 498//498 -f 140//140 193//193 480//480 -f 143//143 231//231 157//157 -f 101//101 116//116 95//95 -f 987//987 15//15 14//14 -f 54//54 62//62 72//72 -f 39//39 41//41 27//27 -f 91//91 101//101 75//75 -f 209//209 50//50 46//46 -f 211//211 254//254 388//388 -f 356//356 343//343 270//270 -f 43//43 596//596 151//151 -f 114//114 498//498 106//106 -f 140//140 480//480 135//135 -f 30//30 46//46 34//34 -f 98//98 360//360 390//390 -f 502//502 100//100 106//106 -f 114//114 135//135 498//498 -f 39//39 50//50 56//56 -f 726//726 289//289 743//743 -f 268//268 269//269 116//116 -f 28//28 928//928 189//189 -f 122//122 143//143 134//134 -f 148//148 160//160 197//197 -f 368//368 389//389 365//365 -f 76//76 100//100 502//502 -f 522//522 452//452 530//530 -f 390//390 130//130 80//80 -f 107//107 106//106 100//100 -f 30//30 34//34 187//187 -f 107//107 114//114 106//106 -f 14//14 15//15 18//18 -f 98//98 390//390 12//12 -f 76//76 84//84 100//100 -f 84//84 107//107 100//100 -f 95//95 116//116 110//110 -f 68//68 55//55 99//99 -f 143//143 159//159 148//148 -f 146//146 140//140 135//135 -f 158//158 193//193 140//140 -f 281//281 249//249 193//193 -f 116//116 121//121 413//413 -f 391//391 404//404 411//411 -f 800//800 996//996 1016//1016 -f 779//779 803//803 716//716 -f 526//526 443//443 17//17 -f 360//360 102//102 390//390 -f 748//748 786//786 725//725 -f 114//114 118//118 135//135 -f 118//118 146//146 135//135 -f 91//91 75//75 62//62 -f 160//160 87//87 55//55 -f 75//75 101//101 95//95 -f 84//84 104//104 107//107 -f 146//146 158//158 140//140 -f 158//158 281//281 193//193 -f 269//269 134//134 121//121 -f 122//122 123//123 143//143 -f 753//753 322//322 313//313 -f 474//474 604//604 576//576 -f 437//437 727//727 993//993 -f 89//89 84//84 76//76 -f 89//89 104//104 84//84 -f 104//104 118//118 107//107 -f 107//107 118//118 114//114 -f 56//56 62//62 54//54 -f 138//138 197//197 156//156 -f 329//329 328//328 784//784 -f 340//340 311//311 519//519 -f 76//76 85//85 89//89 -f 56//56 50//50 62//62 -f 52//52 261//261 47//47 -f 367//367 393//393 358//358 -f 137//137 146//146 118//118 -f 158//158 161//161 281//281 -f 209//209 77//77 62//62 -f 62//62 77//77 91//91 -f 750//750 345//345 1007//1007 -f 998//998 952//952 1000//1000 -f 28//28 196//196 195//195 -f 104//104 112//112 118//118 -f 112//112 137//137 118//118 -f 137//137 131//131 146//146 -f 146//146 131//131 158//158 -f 928//928 28//28 195//195 -f 60//60 219//219 40//40 -f 17//17 22//22 458//458 -f 428//428 105//105 689//689 -f 86//86 104//104 89//89 -f 161//161 16//16 281//281 -f 422//422 235//235 237//237 -f 422//422 237//237 462//462 -f 67//67 367//367 324//324 -f 22//22 470//470 458//458 -f 86//86 89//89 85//85 -f 125//125 137//137 112//112 -f 845//845 637//637 664//664 -f 52//52 183//183 261//261 -f 157//157 183//183 52//52 -f 122//122 240//240 123//123 -f 1003//1003 786//786 549//549 -f 176//176 22//22 17//17 -f 86//86 85//85 73//73 -f 137//137 125//125 131//131 -f 155//155 158//158 131//131 -f 995//995 751//751 1008//1008 -f 116//116 269//269 121//121 -f 82//82 124//124 402//402 -f 155//155 161//161 158//158 -f 102//102 16//16 161//161 -f 143//143 157//157 163//163 -f 268//268 101//101 247//247 -f 73//73 74//74 86//86 -f 112//112 104//104 86//86 -f 125//125 155//155 131//131 -f 102//102 278//278 16//16 -f 163//163 157//157 52//52 -f 23//23 44//44 470//470 -f 74//74 78//78 86//86 -f 301//301 235//235 372//372 -f 176//176 9//9 22//22 -f 74//74 470//470 44//44 -f 363//363 11//11 31//31 -f 23//23 22//22 9//9 -f 23//23 29//29 44//44 -f 78//78 112//112 86//86 -f 125//125 153//153 155//155 -f 155//155 153//153 161//161 -f 50//50 209//209 62//62 -f 163//163 52//52 159//159 -f 250//250 11//11 363//363 -f 462//462 250//250 363//363 -f 402//402 383//383 373//373 -f 44//44 63//63 74//74 -f 78//78 108//108 112//112 -f 651//651 837//837 335//335 -f 74//74 93//93 78//78 -f 108//108 109//109 112//112 -f 112//112 109//109 125//125 -f 109//109 126//126 125//125 -f 147//147 153//153 125//125 -f 23//23 24//24 29//29 -f 108//108 78//78 93//93 -f 126//126 147//147 125//125 -f 153//153 42//42 161//161 -f 161//161 42//42 102//102 -f 290//290 289//289 286//286 -f 250//250 31//31 11//11 -f 53//53 63//63 44//44 -f 63//63 93//93 74//74 -f 130//130 102//102 42//42 -f 53//53 44//44 29//29 -f 93//93 109//109 108//108 -f 141//141 42//42 153//153 -f 187//187 34//34 18//18 -f 1014//1014 1003//1003 994//994 -f 332//332 1010//1010 1014//1014 -f 285//285 298//298 296//296 -f 70//70 63//63 53//53 -f 70//70 488//488 63//63 -f 63//63 488//488 93//93 -f 488//488 109//109 93//93 -f 488//488 463//463 109//109 -f 109//109 463//463 126//126 -f 141//141 153//153 147//147 -f 163//163 159//159 143//143 -f 152//152 177//177 419//419 -f 38//38 53//53 29//29 -f 315//315 270//270 174//174 -f 48//48 70//70 53//53 -f 126//126 127//127 147//147 -f 130//130 42//42 141//141 -f 197//197 138//138 148//148 -f 156//156 55//55 68//68 -f 586//586 585//585 574//574 -f 48//48 53//53 38//38 -f 70//70 65//65 488//488 -f 127//127 136//136 147//147 -f 147//147 136//136 141//141 -f 31//31 177//177 152//152 -f 536//536 295//295 608//608 -f 62//62 75//75 72//72 -f 134//134 143//143 121//121 -f 463//463 127//127 126//126 -f 80//80 130//130 141//141 -f 517//517 525//525 508//508 -f 525//525 515//515 508//508 -f 110//110 116//116 413//413 -f 358//358 324//324 367//367 -f 48//48 65//65 70//70 -f 34//34 39//39 27//27 -f 310//310 347//347 1012//1012 -f 124//124 49//49 119//119 -f 127//127 120//120 136//136 -f 136//136 154//154 141//141 -f 247//247 101//101 91//91 -f 167//167 13//13 437//437 -f 192//192 559//559 685//685 -f 145//145 388//388 88//88 -f 154//154 162//162 141//141 -f 162//162 80//80 141//141 -f 254//254 37//37 388//388 -f 321//321 661//661 326//326 -f 323//323 192//192 229//229 -f 913//913 928//928 195//195 -f 46//46 39//39 34//34 -f 991//991 585//585 573//573 -f 415//415 460//460 394//394 -f 136//136 132//132 154//154 -f 13//13 26//26 25//25 -f 26//26 471//471 25//25 -f 52//52 47//47 87//87 -f 167//167 19//19 13//13 -f 19//19 26//26 13//13 -f 604//604 596//596 380//380 -f 568//568 543//543 561//561 -f 407//407 47//47 261//261 -f 81//81 80//80 162//162 -f 47//47 383//383 87//87 -f 208//208 60//60 40//40 -f 368//368 388//388 37//37 -f 132//132 142//142 154//154 -f 142//142 162//162 154//154 -f 81//81 12//12 80//80 -f 449//449 132//132 382//382 -f 325//325 339//339 563//563 -f 689//689 431//431 399//399 -f 4//4 162//162 142//142 -f 321//321 317//317 661//661 -f 792//792 806//806 571//571 -f 77//77 247//247 91//91 -f 167//167 14//14 19//19 -f 79//79 94//94 96//96 -f 97//97 491//491 96//96 -f 4//4 81//81 162//162 -f 1007//1007 1001//1001 750//750 -f 10//10 169//169 182//182 -f 40//40 219//219 51//51 -f 26//26 19//19 33//33 -f 66//66 94//94 79//79 -f 115//115 491//491 97//97 -f 115//115 490//490 491//491 -f 40//40 51//51 196//196 -f 33//33 36//36 476//476 -f 61//61 66//66 79//79 -f 94//94 97//97 96//96 -f 156//156 4//4 142//142 -f 563//563 349//349 343//343 -f 40//40 196//196 28//28 -f 101//101 268//268 116//116 -f 19//19 20//20 33//33 -f 1001//1001 1012//1012 347//347 -f 797//797 1009//1009 660//660 -f 298//298 297//297 296//296 -f 168//168 10//10 15//15 -f 14//14 20//20 19//19 -f 20//20 36//36 33//33 -f 270//270 229//229 174//174 -f 157//157 252//252 183//183 -f 90//90 97//97 94//94 -f 1004//1004 1003//1003 1014//1014 -f 82//82 113//113 431//431 -f 61//61 54//54 66//66 -f 110//110 115//115 97//97 -f 68//68 4//4 156//156 -f 68//68 81//81 4//4 -f 68//68 99//99 81//81 -f 99//99 12//12 81//81 -f 39//39 56//56 41//41 -f 20//20 41//41 36//36 -f 45//45 54//54 61//61 -f 66//66 90//90 94//94 -f 90//90 110//110 97//97 -f 749//749 312//312 297//297 -f 36//36 41//41 45//45 -f 382//382 138//138 449//449 -f 197//197 160//160 55//55 -f 54//54 72//72 66//66 -f 66//66 72//72 90//90 -f 115//115 413//413 382//382 -f 110//110 413//413 115//115 -f 197//197 55//55 156//156 -f 14//14 18//18 20//20 -f 18//18 41//41 20//20 -f 45//45 56//56 54//54 -f 95//95 110//110 90//90 -f 56//56 45//45 41//41 -f 90//90 75//75 95//95 -f 243//243 205//205 276//276 -f 269//269 122//122 134//134 -f 177//177 250//250 220//220 -f 595//595 216//216 591//591 -f 203//203 198//198 178//178 -f 51//51 202//202 196//196 -f 203//203 208//208 198//198 -f 897//897 923//923 884//884 -f 80//80 12//12 390//390 -f 977//977 9//9 171//171 -f 843//843 842//842 825//825 -f 232//232 257//257 244//244 -f 306//306 788//788 747//747 -f 40//40 28//28 189//189 -f 349//349 352//352 270//270 -f 328//328 325//325 319//319 -f 280//280 211//211 5//5 -f 182//182 187//187 10//10 -f 239//239 247//247 238//238 -f 236//236 179//179 199//199 -f 1001//1001 1000//1000 1012//1012 -f 217//217 238//238 77//77 -f 259//259 267//267 280//280 -f 280//280 267//267 211//211 -f 1015//1015 1008//1008 1013//1013 -f 256//256 268//268 247//247 -f 259//259 277//277 267//267 -f 788//788 828//828 747//747 -f 219//219 223//223 51//51 -f 223//223 241//241 51//51 -f 234//234 282//282 265//265 -f 218//218 201//201 259//259 -f 201//201 277//277 259//259 -f 267//267 254//254 211//211 -f 226//226 239//239 238//238 -f 17//17 8//8 176//176 -f 952//952 1013//1013 1000//1000 -f 307//307 274//274 252//252 -f 231//231 282//282 307//307 -f 253//253 249//249 965//965 -f 201//201 218//218 249//249 -f 199//199 179//179 251//251 -f 241//241 222//222 202//202 -f 265//265 282//282 264//264 -f 193//193 249//249 253//253 -f 277//277 210//210 267//267 -f 297//297 317//317 308//308 -f 862//862 860//860 866//866 -f 191//191 188//188 207//207 -f 172//172 182//182 169//169 -f 738//738 304//304 299//299 -f 210//210 254//254 267//267 -f 792//792 556//556 772//772 -f 111//111 236//236 997//997 -f 1//1 243//243 276//276 -f 311//311 357//357 336//336 -f 231//231 143//143 123//123 -f 201//201 271//271 277//277 -f 271//271 262//262 277//277 -f 828//828 499//499 747//747 -f 257//257 233//233 265//265 -f 249//249 281//281 201//201 -f 210//210 117//117 254//254 -f 254//254 117//117 37//37 -f 356//356 270//270 315//315 -f 224//224 103//103 255//255 -f 317//317 316//316 308//308 -f 262//262 210//210 277//277 -f 199//199 251//251 186//186 -f 227//227 232//232 244//244 -f 281//281 271//271 201//201 -f 167//167 987//987 14//14 -f 176//176 8//8 170//170 -f 736//736 176//176 170//170 -f 250//250 237//237 184//184 -f 273//273 230//230 248//248 -f 245//245 246//246 210//210 -f 246//246 117//117 210//210 -f 262//262 245//245 210//210 -f 1009//1009 69//69 660//660 -f 682//682 306//306 690//690 -f 230//230 273//273 255//255 -f 209//209 217//217 77//77 -f 947//947 937//937 292//292 -f 504//504 543//543 357//357 -f 271//271 200//200 262//262 -f 208//208 409//409 214//214 -f 226//226 244//244 239//239 -f 200//200 245//245 262//262 -f 246//246 180//180 117//117 -f 35//35 37//37 117//117 -f 180//180 35//35 117//117 -f 176//176 736//736 171//171 -f 21//21 965//965 218//218 -f 190//190 204//204 206//206 -f 994//994 186//186 1//1 -f 175//175 195//195 188//188 -f 996//996 1003//1003 1004//1004 -f 179//179 273//273 248//248 -f 751//751 608//608 1005//1005 -f 9//9 176//176 171//171 -f 213//213 222//222 225//225 -f 448//448 170//170 8//8 -f 15//15 987//987 168//168 -f 263//263 279//279 240//240 -f 271//271 258//258 200//200 -f 255//255 103//103 230//230 -f 207//207 225//225 204//204 -f 279//279 231//231 123//123 -f 16//16 271//271 281//281 -f 16//16 258//258 271//271 -f 327//327 180//180 246//246 -f 245//245 327//327 246//246 -f 244//244 257//257 263//263 -f 221//221 103//103 419//419 -f 238//238 247//247 77//77 -f 187//187 182//182 194//194 -f 179//179 248//248 251//251 -f 222//222 233//233 225//225 -f 248//248 220//220 185//185 -f 223//223 234//234 241//241 -f 188//188 172//172 292//292 -f 16//16 278//278 258//258 -f 187//187 194//194 30//30 -f 265//265 264//264 257//257 -f 279//279 282//282 231//231 -f 274//274 165//165 183//183 -f 750//750 1009//1009 797//797 -f 227//227 225//225 232//232 -f 166//166 169//169 10//10 -f 159//159 160//160 148//148 -f 718//718 713//713 726//726 -f 195//195 207//207 188//188 -f 179//179 300//300 273//273 -f 876//876 284//284 713//713 -f 166//166 172//172 169//169 -f 225//225 227//227 204//204 -f 659//659 684//684 547//547 -f 251//251 260//260 243//243 -f 333//333 327//327 397//397 -f 244//244 263//263 240//240 -f 251//251 248//248 260//260 -f 240//240 256//256 239//239 -f 579//579 364//364 421//421 -f 200//200 258//258 397//397 -f 270//270 323//323 229//229 -f 1//1 1014//1014 994//994 -f 243//243 1//1 186//186 -f 256//256 122//122 269//269 -f 672//672 723//723 737//737 -f 160//160 52//52 87//87 -f 296//296 297//297 308//308 -f 230//230 221//221 177//177 -f 223//223 356//356 234//234 -f 260//260 248//248 185//185 -f 51//51 241//241 202//202 -f 974//974 569//569 560//560 -f 207//207 204//204 191//191 -f 186//186 251//251 243//243 -f 178//178 198//198 189//189 -f 244//244 240//240 239//239 -f 239//239 256//256 247//247 -f 46//46 215//215 209//209 -f 690//690 769//769 682//682 -f 613//613 2//2 385//385 -f 236//236 111//111 179//179 -f 343//343 349//349 270//270 -f 10//10 168//168 964//964 -f 190//190 206//206 194//194 -f 1011//1011 1008//1008 337//337 -f 231//231 252//252 157//157 -f 233//233 257//257 232//232 -f 335//335 301//301 128//128 -f 795//795 287//287 305//305 -f 178//178 303//303 203//203 -f 749//749 298//298 731//731 -f 1016//1016 1010//1010 1006//1006 -f 301//301 342//342 128//128 -f 269//269 268//268 256//256 -f 40//40 198//198 208//208 -f 225//225 233//233 232//232 -f 302//302 235//235 301//301 -f 202//202 222//222 213//213 -f 257//257 264//264 279//279 -f 302//302 266//266 235//235 -f 266//266 184//184 237//237 -f 235//235 266//266 237//237 -f 978//978 987//987 167//167 -f 230//230 177//177 220//220 -f 753//753 313//313 738//738 -f 194//194 206//206 215//215 -f 215//215 206//206 217//217 -f 243//243 260//260 205//205 -f 384//384 224//224 255//255 -f 241//241 265//265 233//233 -f 234//234 144//144 282//282 -f 196//196 202//202 195//195 -f 300//300 212//212 273//273 -f 260//260 185//185 205//205 -f 206//206 226//226 217//217 -f 276//276 205//205 332//332 -f 222//222 241//241 233//233 -f 924//924 175//175 292//292 -f 354//354 429//429 611//611 -f 653//653 684//684 659//659 -f 274//274 183//183 252//252 -f 215//215 217//217 209//209 -f 217//217 226//226 238//238 -f 1013//1013 1008//1008 1011//1011 -f 339//339 352//352 349//349 -f 198//198 40//40 189//189 -f 356//356 315//315 351//351 -f 207//207 213//213 225//225 -f 273//273 212//212 255//255 -f 128//128 681//681 335//335 -f 264//264 282//282 279//279 -f 220//220 250//250 184//184 -f 255//255 212//212 384//384 -f 307//307 272//272 274//274 -f 159//159 52//52 160//160 -f 353//353 323//323 352//352 -f 257//257 279//279 263//263 -f 191//191 190//190 182//182 -f 183//183 418//418 261//261 -f 265//265 241//241 234//234 -f 205//205 184//184 266//266 -f 172//172 188//188 182//182 -f 204//204 227//227 206//206 -f 227//227 244//244 226//226 -f 248//248 230//230 220//220 -f 185//185 184//184 205//205 -f 184//184 185//185 220//220 -f 31//31 250//250 177//177 -f 168//168 987//987 979//979 -f 301//301 1006//1006 302//302 -f 332//332 266//266 302//302 -f 332//332 205//205 266//266 -f 227//227 226//226 206//206 -f 188//188 191//191 182//182 -f 462//462 237//237 250//250 -f 290//290 299//299 289//289 -f 175//175 188//188 292//292 -f 282//282 144//144 307//307 -f 182//182 190//190 194//194 -f 183//183 165//165 418//418 -f 385//385 381//381 613//613 -f 231//231 307//307 252//252 -f 202//202 207//207 195//195 -f 317//317 321//321 316//316 -f 202//202 213//213 207//207 -f 240//240 279//279 123//123 -f 21//21 129//129 965//965 -f 30//30 194//194 215//215 -f 749//749 297//297 298//298 -f 191//191 204//204 190//190 -f 430//430 570//570 152//152 -f 359//359 310//310 1012//1012 -f 359//359 283//283 310//310 -f 346//346 340//340 609//609 -f 341//341 448//448 985//985 -f 529//529 513//513 760//760 -f 212//212 300//300 287//287 -f 612//612 474//474 576//576 -f 604//604 474//474 596//596 -f 838//838 597//597 643//643 -f 505//505 442//442 508//508 -f 305//305 300//300 133//133 -f 71//71 468//468 346//346 -f 939//939 954//954 931//931 -f 792//792 798//798 556//556 -f 330//330 358//358 283//283 -f 310//310 283//283 32//32 -f 67//67 324//324 318//318 -f 757//757 322//322 753//753 -f 803//803 779//779 766//766 -f 228//228 941//941 592//592 -f 923//923 932//932 922//922 -f 870//870 897//897 884//884 -f 359//359 337//337 283//283 -f 337//337 330//330 283//283 -f 602//602 604//604 380//380 -f 467//467 535//535 523//523 -f 764//764 773//773 792//792 -f 320//320 328//328 319//319 -f 364//364 380//380 596//596 -f 663//663 655//655 700//700 -f 543//543 602//602 355//355 -f 650//650 788//788 306//306 -f 635//635 664//664 646//646 -f 242//242 340//340 519//519 -f 357//357 543//543 568//568 -f 374//374 346//346 468//468 -f 708//708 707//707 855//855 -f 359//359 1011//1011 337//337 -f 802//802 329//329 784//784 -f 738//738 313//313 309//309 -f 535//535 475//475 472//472 -f 199//199 997//997 236//236 -f 300//300 179//179 111//111 -f 304//304 738//738 309//309 -f 625//625 384//384 379//379 -f 111//111 133//133 300//300 -f 293//293 299//299 290//290 -f 338//338 242//242 519//519 -f 609//609 242//242 429//429 -f 592//592 595//595 586//586 -f 303//303 308//308 316//316 -f 309//309 752//752 743//743 -f 357//357 568//568 336//336 -f 304//304 309//309 743//743 -f 324//324 358//358 330//330 -f 838//838 353//353 350//350 -f 644//644 567//567 667//667 -f 1000//1000 359//359 1012//1012 -f 289//289 304//304 743//743 -f 855//855 707//707 854//854 -f 559//559 668//668 654//654 -f 309//309 320//320 752//752 -f 496//496 966//966 129//129 -f 720//720 293//293 291//291 -f 310//310 150//150 347//347 -f 525//525 465//465 515//515 -f 339//339 353//353 352//352 -f 932//932 955//955 939//939 -f 325//325 328//328 350//350 -f 310//310 32//32 150//150 -f 32//32 283//283 6//6 -f 319//319 563//563 671//671 -f 337//337 324//324 330//330 -f 706//706 854//854 707//707 -f 329//329 838//838 350//350 -f 631//631 682//682 769//769 -f 841//841 58//58 590//590 -f 347//347 150//150 69//69 -f 329//329 350//350 328//328 -f 534//534 539//539 530//530 -f 286//286 289//289 284//284 -f 1013//1013 1011//1011 359//359 -f 295//295 67//67 318//318 -f 517//517 523//523 525//525 -f 752//752 319//319 671//671 -f 319//319 325//325 563//563 -f 429//429 378//378 611//611 -f 242//242 609//609 340//340 -f 322//322 320//320 313//313 -f 350//350 353//353 339//339 -f 353//353 643//643 344//344 -f 483//483 371//371 361//361 -f 662//662 679//679 695//695 -f 289//289 726//726 284//284 -f 353//353 344//344 323//323 -f 275//275 545//545 387//387 -f 602//602 380//380 575//575 -f 465//465 535//535 472//472 -f 199//199 186//186 994//994 -f 554//554 275//275 494//494 -f 322//322 328//328 320//320 -f 291//291 293//293 290//290 -f 166//166 947//947 172//172 -f 256//256 240//240 122//122 -f 806//806 843//843 825//825 -f 730//730 659//659 528//528 -f 706//706 709//709 291//291 -f 208//208 214//214 60//60 -f 272//272 307//307 144//144 -f 1003//1003 549//549 997//997 -f 325//325 350//350 339//339 -f 313//313 320//320 309//309 -f 733//733 299//299 293//293 -f 351//351 144//144 234//234 -f 1//1 276//276 332//332 -f 733//733 738//738 299//299 -f 128//128 342//342 333//333 -f 1010//1010 1016//1016 1004//1004 -f 342//342 180//180 327//327 -f 337//337 318//318 324//324 -f 320//320 319//319 752//752 -f 299//299 304//304 289//289 -f 356//356 351//351 234//234 -f 344//344 192//192 323//323 -f 342//342 327//327 333//333 -f 180//180 372//372 420//420 -f 312//312 317//317 297//297 -f 342//342 301//301 372//372 -f 192//192 685//685 229//229 -f 795//795 633//633 287//287 -f 292//292 172//172 947//947 -f 316//316 409//409 203//203 -f 315//315 144//144 351//351 -f 174//174 272//272 144//144 -f 180//180 342//342 372//372 -f 318//318 1005//1005 1002//1002 -f 315//315 174//174 144//144 -f 296//296 308//308 303//303 -f 229//229 629//629 398//398 -f 914//914 296//296 303//303 -f 303//303 316//316 203//203 -f 316//316 321//321 409//409 -f 964//964 168//168 979//979 -f 369//369 83//83 365//365 -f 150//150 32//32 391//391 -f 391//391 411//411 632//632 -f 366//366 214//214 409//409 -f 25//25 436//436 437//437 -f 321//321 326//326 401//401 -f 401//401 366//366 409//409 -f 467//467 470//470 479//479 -f 395//395 401//401 326//326 -f 408//408 43//43 151//151 -f 394//394 404//404 391//391 -f 401//401 219//219 366//366 -f 396//396 401//401 395//395 -f 396//396 219//219 401//401 -f 423//423 128//128 397//397 -f 223//223 219//219 396//396 -f 119//119 98//98 12//12 -f 364//364 596//596 83//83 -f 356//356 223//223 396//396 -f 492//492 389//389 422//422 -f 83//83 596//596 43//43 -f 618//618 612//612 554//554 -f 150//150 391//391 639//639 -f 395//395 636//636 396//396 -f 343//343 356//356 396//396 -f 405//405 681//681 128//128 -f 200//200 397//397 245//245 -f 387//387 545//545 334//334 -f 229//229 398//398 174//174 -f 370//370 393//393 367//367 -f 7//7 403//403 426//426 -f 519//519 311//311 336//336 -f 710//710 495//495 809//809 -f 327//327 245//245 397//397 -f 688//688 7//7 331//331 -f 368//368 408//408 388//388 -f 385//385 415//415 393//393 -f 403//403 423//423 416//416 -f 410//410 403//403 416//416 -f 346//346 609//609 71//71 -f 150//150 639//639 69//69 -f 362//362 367//367 67//67 -f 128//128 333//333 397//397 -f 686//686 361//361 362//362 -f 545//545 504//504 311//311 -f 410//410 416//416 386//386 -f 1001//1001 998//998 1000//1000 -f 99//99 55//55 383//383 -f 7//7 426//426 331//331 -f 420//420 368//368 35//35 -f 393//393 415//415 427//427 -f 360//360 403//403 410//410 -f 595//595 459//459 216//216 -f 347//347 69//69 1009//1009 -f 611//611 378//378 610//610 -f 411//411 83//83 369//369 -f 593//593 596//596 474//474 -f 287//287 633//633 379//379 -f 837//837 1006//1006 335//335 -f 899//899 887//887 296//296 -f 174//174 149//149 272//272 -f 405//405 423//423 688//688 -f 152//152 363//363 31//31 -f 46//46 30//30 215//215 -f 410//410 386//386 102//102 -f 103//103 224//224 406//406 -f 750//750 1001//1001 1009//1009 -f 83//83 43//43 365//365 -f 394//394 460//460 404//404 -f 369//369 365//365 389//389 -f 575//575 380//380 364//364 -f 165//165 272//272 149//149 -f 165//165 274//274 272//272 -f 416//416 397//397 258//258 -f 405//405 128//128 423//423 -f 422//422 389//389 420//420 -f 492//492 632//632 389//389 -f 385//385 393//393 370//370 -f 416//416 258//258 386//386 -f 258//258 278//278 386//386 -f 443//443 523//523 516//516 -f 406//406 419//419 103//103 -f 632//632 369//369 389//389 -f 423//423 397//397 416//416 -f 23//23 470//470 22//22 -f 371//371 385//385 370//370 -f 508//508 515//515 441//441 -f 398//398 424//424 149//149 -f 149//149 424//424 165//165 -f 151//151 88//88 388//388 -f 694//694 398//398 629//629 -f 415//415 6//6 427//427 -f 423//423 403//403 7//7 -f 415//415 394//394 6//6 -f 424//424 113//113 165//165 -f 542//542 534//534 472//472 -f 368//368 365//365 408//408 -f 594//594 398//398 694//694 -f 398//398 594//594 424//424 -f 660//660 678//678 797//797 -f 6//6 391//391 32//32 -f 423//423 7//7 688//688 -f 426//426 692//692 331//331 -f 420//420 389//389 368//368 -f 379//379 384//384 212//212 -f 405//405 670//670 681//681 -f 501//501 488//488 65//65 -f 218//218 259//259 21//21 -f 368//368 37//37 35//35 -f 283//283 358//358 427//427 -f 594//594 425//425 424//424 -f 113//113 418//418 165//165 -f 55//55 87//87 383//383 -f 584//584 585//585 591//591 -f 1003//1003 997//997 994//994 -f 121//121 148//148 413//413 -f 573//573 585//585 584//584 -f 594//594 702//702 425//425 -f 418//418 407//407 261//261 -f 408//408 151//151 388//388 -f 424//424 425//425 113//113 -f 113//113 407//407 418//418 -f 426//426 360//360 98//98 -f 148//148 138//138 413//413 -f 1008//1008 751//751 1005//1005 -f 6//6 394//394 391//391 -f 702//702 399//399 425//425 -f 221//221 230//230 103//103 -f 523//523 526//526 467//467 -f 542//542 539//539 534//534 -f 419//419 177//177 221//221 -f 373//373 47//47 407//407 -f 601//601 216//216 611//611 -f 373//373 407//407 113//113 -f 138//138 382//382 413//413 -f 406//406 392//392 414//414 -f 443//443 516//516 976//976 -f 355//355 575//575 579//579 -f 355//355 579//579 376//376 -f 519//519 336//336 512//512 -f 399//399 431//431 425//425 -f 419//419 430//430 152//152 -f 283//283 427//427 6//6 -f 379//379 212//212 287//287 -f 431//431 113//113 425//425 -f 386//386 278//278 102//102 -f 385//385 2//2 415//415 -f 360//360 410//410 102//102 -f 512//512 336//336 568//568 -f 82//82 402//402 373//373 -f 373//373 383//383 47//47 -f 371//371 381//381 385//385 -f 447//447 498//498 480//480 -f 365//365 43//43 408//408 -f 574//574 585//585 991//991 -f 362//362 371//371 370//370 -f 462//462 492//492 422//422 -f 591//591 216//216 601//601 -f 142//142 449//449 156//156 -f 471//471 481//481 48//48 -f 448//448 443//443 435//435 -f 48//48 481//481 65//65 -f 800//800 64//64 786//786 -f 92//92 57//57 129//129 -f 787//787 633//633 795//795 -f 794//794 807//807 799//799 -f 732//732 848//848 710//710 -f 461//461 471//471 38//38 -f 2//2 532//532 3//3 -f 764//764 792//792 772//772 -f 3//3 460//460 2//2 -f 438//438 437//437 993//993 -f 553//553 430//430 64//64 -f 96//96 491//491 469//469 -f 501//501 500//500 469//469 -f 570//570 454//454 152//152 -f 453//453 461//461 24//24 -f 476//476 500//500 481//481 -f 491//491 457//457 463//463 -f 997//997 199//199 994//994 -f 341//341 170//170 448//448 -f 469//469 491//491 463//463 -f 8//8 17//17 443//443 -f 437//437 13//13 25//25 -f 479//479 470//470 485//485 -f 535//535 929//929 475//475 -f 453//453 444//444 436//436 -f 363//363 152//152 454//454 -f 45//45 61//61 36//36 -f 178//178 914//914 303//303 -f 863//863 859//859 855//855 -f 444//444 453//453 9//9 -f 151//151 596//596 593//593 -f 471//471 26//26 476//476 -f 620//620 404//404 548//548 -f 922//922 939//939 921//921 -f 488//488 469//469 463//463 -f 457//457 132//132 120//120 -f 800//800 466//466 64//64 -f 79//79 469//469 500//500 -f 937//937 924//924 292//292 -f 485//485 470//470 74//74 -f 25//25 461//461 453//453 -f 115//115 382//382 490//490 -f 106//106 498//498 502//502 -f 451//451 88//88 456//456 -f 945//945 952//952 998//998 -f 496//496 129//129 57//57 -f 501//501 469//469 488//488 -f 837//837 1016//1016 1006//1006 -f 471//471 48//48 38//38 -f 986//986 57//57 486//486 -f 189//189 928//928 178//178 -f 490//490 132//132 457//457 -f 494//494 482//482 451//451 -f 482//482 494//494 486//486 -f 65//65 481//481 501//501 -f 61//61 500//500 476//476 -f 438//438 167//167 437//437 -f 710//710 833//833 732//732 -f 496//496 57//57 986//986 -f 797//797 716//716 750//750 -f 96//96 469//469 79//79 -f 453//453 24//24 9//9 -f 473//473 486//486 494//494 -f 482//482 486//486 57//57 -f 467//467 458//458 470//470 -f 494//494 451//451 456//456 -f 502//502 498//498 464//464 -f 445//445 446//446 907//907 -f 60//60 214//214 366//366 -f 381//381 371//371 483//483 -f 665//665 764//764 760//760 -f 61//61 476//476 36//36 -f 432//432 445//445 907//907 -f 461//461 25//25 471//471 -f 941//941 455//455 464//464 -f 716//716 561//561 621//621 -f 443//443 976//976 435//435 -f 444//444 9//9 977//977 -f 986//986 486//486 473//473 -f 436//436 25//25 453//453 -f 929//929 967//967 475//475 -f 462//462 363//363 454//454 -f 79//79 500//500 61//61 -f 447//447 480//480 139//139 -f 522//522 446//446 445//445 -f 514//514 907//907 446//446 -f 848//848 732//732 826//826 -f 442//442 434//434 959//959 -f 498//498 447//447 464//464 -f 764//764 772//772 760//760 -f 848//848 761//761 710//710 -f 976//976 442//442 959//959 -f 800//800 786//786 996//996 -f 773//773 806//806 792//792 -f 445//445 450//450 522//522 -f 517//517 976//976 516//516 -f 1010//1010 332//332 302//302 -f 457//457 127//127 463//463 -f 465//465 452//452 515//515 -f 490//490 382//382 132//132 -f 459//459 487//487 497//497 -f 24//24 461//461 38//38 -f 976//976 517//517 442//442 -f 999//999 305//305 133//133 -f 986//986 473//473 484//484 -f 1010//1010 1004//1004 1014//1014 -f 404//404 620//620 421//421 -f 433//433 450//450 445//445 -f 850//850 841//841 842//842 -f 843//843 850//850 842//842 -f 487//487 468//468 497//497 -f 593//593 474//474 618//618 -f 467//467 479//479 535//535 -f 171//171 736//736 992//992 -f 592//592 478//478 459//459 -f 478//478 487//487 459//459 -f 956//956 468//468 487//487 -f 447//447 139//139 956//956 -f 941//941 478//478 592//592 -f 963//963 957//957 949//949 -f 491//491 490//490 457//457 -f 288//288 828//828 788//788 -f 730//730 653//653 659//659 -f 859//859 863//863 881//881 -f 435//435 985//985 448//448 -f 481//481 500//500 501//501 -f 535//535 479//479 929//929 -f 433//433 440//440 450//450 -f 58//58 288//288 788//788 -f 502//502 464//464 455//455 -f 534//534 465//465 472//472 -f 487//487 447//447 956//956 -f 433//433 926//926 440//440 -f 522//522 450//450 452//452 -f 716//716 531//531 587//587 -f 457//457 120//120 127//127 -f 653//653 715//715 851//851 -f 941//941 464//464 478//478 -f 23//23 9//9 24//24 -f 136//136 120//120 132//132 -f 492//492 454//454 558//558 -f 440//440 441//441 450//450 -f 913//913 175//175 924//924 -f 29//29 24//24 38//38 -f 151//151 593//593 88//88 -f 581//581 620//620 548//548 -f 657//657 741//741 777//777 -f 341//341 736//736 170//170 -f 462//462 454//454 492//492 -f 441//441 515//515 450//450 -f 460//460 548//548 404//404 -f 471//471 476//476 481//481 -f 450//450 515//515 452//452 -f 464//464 447//447 478//478 -f 447//447 487//487 478//478 -f 456//456 88//88 593//593 -f 476//476 26//26 33//33 -f 452//452 465//465 534//534 -f 616//616 826//826 831//831 -f 841//841 288//288 58//58 -f 608//608 295//295 1002//1002 -f 663//663 675//675 655//655 -f 67//67 295//295 536//536 -f 663//663 693//693 674//674 -f 675//675 663//663 674//674 -f 803//803 561//561 716//716 -f 536//536 608//608 509//509 -f 623//623 648//648 644//644 -f 417//417 361//361 536//536 -f 509//509 417//417 536//536 -f 614//614 608//608 550//550 -f 614//614 509//509 608//608 -f 614//614 506//506 509//509 -f 509//509 506//506 417//417 -f 506//506 527//527 417//417 -f 417//417 527//527 483//483 -f 527//527 510//510 483//483 -f 995//995 614//614 550//550 -f 518//518 527//527 506//506 -f 518//518 510//510 527//527 -f 1015//1015 614//614 995//995 -f 544//544 613//613 381//381 -f 510//510 544//544 381//381 -f 518//518 544//544 510//510 -f 2//2 613//613 532//532 -f 517//517 508//508 442//442 -f 545//545 275//275 554//554 -f 577//577 506//506 614//614 -f 668//668 597//597 580//580 -f 428//428 701//701 700//700 -f 577//577 518//518 506//506 -f 636//636 343//343 396//396 -f 1015//1015 577//577 614//614 -f 700//700 655//655 649//649 -f 543//543 576//576 602//602 -f 577//577 578//578 518//518 -f 477//477 577//577 1015//1015 -f 518//518 578//578 544//544 -f 589//589 615//615 791//791 -f 589//589 598//598 615//615 -f 791//791 768//768 565//565 -f 615//615 58//58 691//691 -f 58//58 788//788 650//650 -f 544//544 532//532 613//613 -f 631//631 164//164 676//676 -f 791//791 565//565 589//589 -f 578//578 607//607 544//544 -f 607//607 532//532 544//544 -f 598//598 590//590 615//615 -f 551//551 562//562 565//565 -f 565//565 582//582 589//589 -f 589//589 582//582 598//598 -f 406//406 224//224 392//392 -f 590//590 58//58 615//615 -f 224//224 384//384 392//392 -f 354//354 459//459 497//497 -f 701//701 645//645 663//663 -f 607//607 3//3 532//532 -f 562//562 798//798 565//565 -f 582//582 590//590 598//598 -f 142//142 132//132 449//449 -f 648//648 637//637 644//644 -f 507//507 511//511 547//547 -f 644//644 637//637 567//567 -f 565//565 798//798 582//582 -f 507//507 666//666 511//511 -f 997//997 133//133 111//111 -f 551//551 552//552 562//562 -f 552//552 798//798 562//562 -f 577//577 603//603 578//578 -f 603//603 607//607 578//578 -f 513//513 666//666 507//507 -f 528//528 537//537 551//551 -f 551//551 537//537 552//552 -f 825//825 842//842 590//590 -f 582//582 825//825 590//590 -f 705//705 700//700 704//704 -f 588//588 603//603 477//477 -f 603//603 577//577 477//477 -f 529//529 537//537 528//528 -f 571//571 825//825 798//798 -f 798//798 825//825 582//582 -f 504//504 554//554 576//576 -f 554//554 612//612 576//576 -f 519//519 512//512 766//766 -f 354//354 71//71 429//429 -f 520//520 513//513 507//507 -f 537//537 540//540 552//552 -f 549//549 133//133 997//997 -f 523//523 535//535 525//525 -f 603//603 606//606 607//607 -f 606//606 3//3 607//607 -f 520//520 507//507 869//869 -f 552//552 540//540 798//798 -f 533//533 529//529 760//760 -f 786//786 1003//1003 996//996 -f 533//533 537//537 529//529 -f 612//612 618//618 474//474 -f 414//414 392//392 59//59 -f 922//922 921//921 912//912 -f 540//540 556//556 798//798 -f 701//701 624//624 645//645 -f 658//658 840//840 697//697 -f 945//945 400//400 588//588 -f 588//588 400//400 603//603 -f 606//606 548//548 3//3 -f 537//537 533//533 540//540 -f 540//540 772//772 556//556 -f 525//525 535//535 465//465 -f 548//548 460//460 3//3 -f 414//414 59//59 725//725 -f 719//719 855//855 853//853 -f 869//869 672//672 520//520 -f 334//334 545//545 311//311 -f 665//665 513//513 520//520 -f 533//533 772//772 540//540 -f 760//760 772//772 533//533 -f 855//855 859//859 853//853 -f 664//664 654//654 845//845 -f 377//377 603//603 400//400 -f 603//603 377//377 606//606 -f 593//593 618//618 456//456 -f 599//599 617//617 616//616 -f 71//71 609//609 429//429 -f 1007//1007 619//619 400//400 -f 619//619 377//377 400//400 -f 377//377 581//581 606//606 -f 581//581 548//548 606//606 -f 387//387 473//473 275//275 -f 604//604 602//602 576//576 -f 592//592 459//459 595//595 -f 1007//1007 345//345 619//619 -f 579//579 575//575 364//364 -f 616//616 848//848 826//826 -f 64//64 430//430 725//725 -f 430//430 414//414 725//725 -f 354//354 497//497 71//71 -f 522//522 514//514 446//446 -f 430//430 419//419 414//414 -f 357//357 311//311 504//504 -f 334//334 311//311 340//340 -f 452//452 534//534 530//530 -f 314//314 836//836 617//617 -f 473//473 494//494 275//275 -f 216//216 459//459 354//354 -f 623//623 644//644 656//656 -f 674//674 769//769 675//675 -f 834//834 835//835 599//599 -f 599//599 835//835 617//617 -f 679//679 747//747 652//652 -f 737//737 665//665 520//520 -f 171//171 992//992 977//977 -f 398//398 149//149 174//174 -f 345//345 587//587 619//619 -f 10//10 964//964 166//166 -f 777//777 538//538 799//799 -f 799//799 538//538 778//778 -f 680//680 654//654 664//664 -f 572//572 835//835 832//832 -f 314//314 617//617 605//605 -f 644//644 849//849 656//656 -f 516//516 523//523 517//517 -f 570//570 553//553 466//466 -f 570//570 430//430 553//553 -f 656//656 697//697 676//676 -f 835//835 605//605 617//617 -f 619//619 620//620 581//581 -f 377//377 619//619 581//581 -f 521//521 741//741 657//657 -f 777//777 741//741 538//538 -f 378//378 314//314 605//605 -f 572//572 573//573 835//835 -f 835//835 600//600 605//605 -f 331//331 704//704 555//555 -f 587//587 620//620 619//619 -f 514//514 521//521 628//628 -f 741//741 539//539 538//538 -f 783//783 560//560 808//808 -f 573//573 584//584 835//835 -f 584//584 600//600 835//835 -f 412//412 489//489 294//294 -f 64//64 466//466 553//553 -f 650//650 682//682 691//691 -f 669//669 567//567 637//637 -f 376//376 587//587 531//531 -f 466//466 524//524 570//570 -f 514//514 628//628 724//724 -f 530//530 741//741 521//521 -f 808//808 569//569 572//572 -f 610//610 378//378 605//605 -f 181//181 314//314 378//378 -f 682//682 676//676 691//691 -f 376//376 620//620 587//587 -f 524//524 454//454 570//570 -f 530//530 539//539 741//741 -f 538//538 539//539 778//778 -f 560//560 569//569 808//808 -f 569//569 573//573 572//572 -f 600//600 610//610 605//605 -f 376//376 531//531 621//621 -f 554//554 456//456 618//618 -f 600//600 601//601 610//610 -f 181//181 294//294 314//314 -f 512//512 561//561 803//803 -f 355//355 376//376 621//621 -f 844//844 558//558 524//524 -f 584//584 601//601 600//600 -f 601//601 611//611 610//610 -f 568//568 561//561 512//512 -f 579//579 620//620 376//376 -f 421//421 620//620 579//579 -f 381//381 483//483 510//510 -f 242//242 294//294 181//181 -f 242//242 338//338 412//412 -f 294//294 242//242 412//412 -f 338//338 519//519 766//766 -f 561//561 355//355 621//621 -f 792//792 571//571 798//798 -f 454//454 524//524 558//558 -f 522//522 530//530 514//514 -f 378//378 429//429 181//181 -f 429//429 242//242 181//181 -f 512//512 803//803 766//766 -f 504//504 545//545 554//554 -f 584//584 591//591 601//601 -f 708//708 855//855 719//719 -f 872//872 886//886 889//889 -f 663//663 645//645 622//622 -f 878//878 723//723 638//638 -f 645//645 647//647 622//622 -f 836//836 761//761 617//617 -f 1007//1007 998//998 1001//1001 -f 59//59 392//392 625//625 -f 653//653 851//851 684//684 -f 563//563 683//683 671//671 -f 331//331 699//699 688//688 -f 644//644 667//667 846//846 -f 694//694 642//642 702//702 -f 703//703 626//626 312//312 -f 192//192 668//668 559//559 -f 680//680 559//559 654//654 -f 647//647 583//583 622//622 -f 931//931 961//961 943//943 -f 694//694 629//629 685//685 -f 668//668 643//643 597//597 -f 622//622 693//693 663//663 -f 536//536 686//686 67//67 -f 624//624 642//642 647//647 -f 526//526 458//458 467//467 -f 765//765 671//671 703//703 -f 395//395 661//661 636//636 -f 399//399 702//702 624//624 -f 594//594 694//694 702//702 -f 654//654 668//668 580//580 -f 691//691 676//676 697//697 -f 690//690 306//306 747//747 -f 530//530 521//521 514//514 -f 343//343 683//683 563//563 -f 391//391 632//632 639//639 -f 647//647 642//642 635//635 -f 529//529 528//528 666//666 -f 290//290 864//864 291//291 -f 703//703 671//671 683//683 -f 626//626 317//317 312//312 -f 597//597 839//839 580//580 -f 331//331 692//692 704//704 -f 597//597 816//816 839//839 -f 954//954 969//969 961//961 -f 954//954 961//961 931//931 -f 661//661 317//317 626//626 -f 701//701 689//689 624//624 -f 705//705 704//704 692//692 -f 642//642 624//624 702//702 -f 343//343 636//636 683//683 -f 730//730 715//715 653//653 -f 69//69 640//640 660//660 -f 635//635 680//680 664//664 -f 164//164 656//656 676//676 -f 699//699 555//555 695//695 -f 558//558 632//632 492//492 -f 466//466 844//844 524//524 -f 922//922 912//912 904//904 -f 632//632 558//558 639//639 -f 640//640 69//69 639//639 -f 668//668 344//344 643//643 -f 636//636 661//661 626//626 -f 634//634 639//639 558//558 -f 634//634 640//640 639//639 -f 849//849 697//697 656//656 -f 650//650 691//691 58//58 -f 844//844 634//634 558//558 -f 420//420 35//35 180//180 -f 697//697 840//840 691//691 -f 1006//1006 1010//1010 302//302 -f 838//838 643//643 353//353 -f 511//511 666//666 659//659 -f 546//546 674//674 693//693 -f 769//769 164//164 631//631 -f 675//675 662//662 655//655 -f 726//726 713//713 284//284 -f 704//704 700//700 649//649 -f 666//666 528//528 659//659 -f 608//608 1002//1002 1005//1005 -f 760//760 513//513 665//665 -f 881//881 870//870 865//865 -f 859//859 881//881 865//865 -f 675//675 769//769 662//662 -f 662//662 690//690 679//679 -f 332//332 1014//1014 1//1 -f 654//654 580//580 845//845 -f 634//634 651//651 640//640 -f 757//757 784//784 322//322 -f 677//677 335//335 678//678 -f 646//646 664//664 648//648 -f 698//698 796//796 696//696 -f 322//322 784//784 328//328 -f 335//335 687//687 678//678 -f 630//630 698//698 696//696 -f 192//192 344//344 668//668 -f 694//694 680//680 642//642 -f 335//335 681//681 687//687 -f 747//747 679//679 690//690 -f 681//681 630//630 687//687 -f 769//769 690//690 662//662 -f 555//555 704//704 695//695 -f 704//704 649//649 695//695 -f 681//681 670//670 630//630 -f 630//630 566//566 698//698 -f 673//673 627//627 698//698 -f 694//694 685//685 680//680 -f 649//649 655//655 695//695 -f 164//164 623//623 656//656 -f 564//564 673//673 698//698 -f 682//682 650//650 306//306 -f 597//597 329//329 816//816 -f 670//670 566//566 630//630 -f 375//375 698//698 566//566 -f 375//375 564//564 698//698 -f 331//331 555//555 699//699 -f 655//655 662//662 695//695 -f 587//587 345//345 750//750 -f 670//670 405//405 566//566 -f 636//636 626//626 683//683 -f 513//513 529//529 666//666 -f 680//680 685//685 559//559 -f 428//428 689//689 701//701 -f 399//399 624//624 689//689 -f 688//688 566//566 405//405 -f 845//845 669//669 637//637 -f 624//624 647//647 645//645 -f 652//652 673//673 564//564 -f 395//395 326//326 661//661 -f 521//521 657//657 628//628 -f 566//566 688//688 375//375 -f 652//652 499//499 673//673 -f 695//695 679//679 652//652 -f 723//723 628//628 657//657 -f 700//700 701//701 663//663 -f 699//699 564//564 375//375 -f 699//699 652//652 564//564 -f 703//703 683//683 626//626 -f 642//642 680//680 635//635 -f 699//699 695//695 652//652 -f 392//392 384//384 625//625 -f 845//845 580//580 839//839 -f 699//699 375//375 688//688 -f 682//682 631//631 676//676 -f 845//845 839//839 669//669 -f 428//428 700//700 705//705 -f 1008//1008 1005//1005 337//337 -f 836//836 314//314 489//489 -f 717//717 711//711 628//628 -f 826//826 847//847 830//830 -f 710//710 836//836 495//495 -f 796//796 495//495 641//641 -f 834//834 599//599 616//616 -f 761//761 836//836 710//710 -f 921//921 931//931 930//930 -f 749//749 765//765 312//312 -f 945//945 588//588 477//477 -f 799//799 822//822 793//793 -f 439//439 732//732 774//774 -f 285//285 731//731 298//298 -f 731//731 742//742 749//749 -f 749//749 742//742 765//765 -f 285//285 718//718 731//731 -f 847//847 732//732 439//439 -f 851//851 715//715 852//852 -f 439//439 173//173 493//493 -f 852//852 557//557 853//853 -f 557//557 852//852 715//715 -f 590//590 842//842 841//841 -f 742//742 752//752 765//765 -f 752//752 671//671 765//765 -f 712//712 724//724 711//711 -f 412//412 812//812 489//489 -f 766//766 779//779 812//812 -f 812//812 775//775 641//641 -f 711//711 724//724 628//628 -f 812//812 641//641 495//495 -f 718//718 742//742 731//731 -f 715//715 730//730 722//722 -f 774//774 833//833 627//627 -f 696//696 678//678 630//630 -f 834//834 616//616 831//831 -f 843//843 493//493 850//850 -f 847//847 439//439 493//493 -f 583//583 693//693 622//622 -f 779//779 716//716 797//797 -f 821//821 843//843 806//806 -f 718//718 743//743 742//742 -f 743//743 752//752 742//742 -f 807//807 818//818 822//822 -f 756//756 764//764 665//665 -f 640//640 651//651 660//660 -f 970//970 993//993 727//727 -f 294//294 489//489 314//314 -f 718//718 726//726 743//743 -f 677//677 660//660 651//651 -f 931//931 943//943 930//930 -f 832//832 835//835 834//834 -f 783//783 794//794 778//778 -f 664//664 637//637 648//648 -f 793//793 822//822 811//811 -f 778//778 794//794 799//799 -f 912//912 921//921 930//930 -f 832//832 834//834 831//831 -f 554//554 494//494 456//456 -f 335//335 677//677 651//651 -f 737//737 657//657 665//665 -f 833//833 809//809 796//796 -f 878//878 717//717 723//723 -f 329//329 802//802 816//816 -f 821//821 830//830 843//843 -f 999//999 133//133 549//549 -f 449//449 138//138 156//156 -f 572//572 832//832 808//808 -f 714//714 707//707 708//708 -f 493//493 173//173 288//288 -f 499//499 173//173 673//673 -f 827//827 800//800 1016//1016 -f 546//546 646//646 648//648 -f 934//934 387//387 334//334 -f 832//832 819//819 808//808 -f 738//738 733//733 753//753 -f 784//784 776//776 802//802 -f 756//756 793//793 773//773 -f 229//229 685//685 629//629 -f 827//827 466//466 800//800 -f 489//489 812//812 495//495 -f 828//828 173//173 499//499 -f 775//775 779//779 797//797 -f 776//776 785//785 802//802 -f 816//816 669//669 839//839 -f 811//811 821//821 806//806 -f 753//753 744//744 757//757 -f 744//744 776//776 757//757 -f 733//733 744//744 753//753 -f 813//813 802//802 785//785 -f 813//813 816//816 802//802 -f 816//816 813//813 669//669 -f 329//329 597//597 838//838 -f 939//939 931//931 921//921 -f 775//775 797//797 678//678 -f 293//293 728//728 733//733 -f 733//733 728//728 744//744 -f 813//813 820//820 669//669 -f 765//765 703//703 312//312 -f 822//822 821//821 811//811 -f 672//672 638//638 723//723 -f 293//293 720//720 728//728 -f 767//767 776//776 744//744 -f 696//696 796//796 641//641 -f 773//773 811//811 806//806 -f 300//300 305//305 287//287 -f 776//776 767//767 785//785 -f 785//785 810//810 813//813 -f 499//499 652//652 747//747 -f 827//827 1016//1016 837//837 -f 667//667 669//669 820//820 -f 669//669 667//667 567//567 -f 592//592 586//586 228//228 -f 728//728 754//754 744//744 -f 767//767 781//781 785//785 -f 781//781 780//780 785//785 -f 780//780 810//810 785//785 -f 514//514 724//724 907//907 -f 777//777 756//756 657//657 -f 826//826 830//830 818//818 -f 412//412 766//766 812//812 -f 754//754 767//767 744//744 -f 810//810 814//814 813//813 -f 813//813 814//814 820//820 -f 793//793 811//811 773//773 -f 969//969 977//977 961//961 -f 583//583 647//647 646//646 -f 546//546 583//583 646//646 -f 728//728 734//734 754//754 -f 977//977 992//992 961//961 -f 493//493 288//288 850//850 -f 720//720 734//734 728//728 -f 734//734 755//755 754//754 -f 781//781 810//810 780//780 -f 846//846 820//820 814//814 -f 827//827 844//844 466//466 -f 291//291 709//709 720//720 -f 709//709 721//721 720//720 -f 720//720 721//721 734//734 -f 767//767 754//754 755//755 -f 777//777 793//793 756//756 -f 734//734 739//739 755//755 -f 789//789 814//814 810//810 -f 846//846 667//667 820//820 -f 716//716 587//587 750//750 -f 623//623 546//546 648//648 -f 693//693 583//583 546//546 -f 847//847 826//826 732//732 -f 755//755 758//758 767//767 -f 767//767 758//758 781//781 -f 758//758 770//770 781//781 -f 779//779 775//775 812//812 -f 706//706 707//707 709//709 -f 789//789 810//810 781//781 -f 770//770 789//789 781//781 -f 815//815 846//846 814//814 -f 849//849 644//644 846//846 -f 737//737 520//520 672//672 -f 698//698 627//627 796//796 -f 338//338 766//766 412//412 -f 739//739 762//762 755//755 -f 755//755 762//762 758//758 -f 818//818 821//821 822//822 -f 737//737 723//723 657//657 -f 815//815 829//829 846//846 -f 734//734 721//721 739//739 -f 739//739 740//740 762//762 -f 762//762 770//770 758//758 -f 829//829 849//849 846//846 -f 775//775 678//678 696//696 -f 789//789 815//815 814//814 -f 808//808 794//794 783//783 -f 808//808 819//819 794//794 -f 831//831 826//826 818//818 -f 634//634 837//837 651//651 -f 714//714 721//721 709//709 -f 770//770 790//790 789//789 -f 634//634 844//844 827//827 -f 721//721 735//735 739//739 -f 735//735 740//740 739//739 -f 789//789 790//790 815//815 -f 164//164 674//674 546//546 -f 709//709 707//707 714//714 -f 657//657 756//756 665//665 -f 815//815 790//790 804//804 -f 804//804 658//658 815//815 -f 815//815 658//658 829//829 -f 658//658 849//849 829//829 -f 762//762 771//771 770//770 -f 771//771 790//790 770//770 -f 286//286 875//875 864//864 -f 634//634 827//827 837//837 -f 740//740 763//763 762//762 -f 658//658 697//697 849//849 -f 164//164 769//769 674//674 -f 809//809 495//495 796//796 -f 557//557 719//719 853//853 -f 646//646 647//647 635//635 -f 627//627 833//833 796//796 -f 745//745 735//735 721//721 -f 745//745 740//740 735//735 -f 745//745 763//763 740//740 -f 762//762 763//763 771//771 -f 732//732 833//833 774//774 -f 819//819 807//807 794//794 -f 719//719 721//721 714//714 -f 804//804 817//817 658//658 -f 633//633 625//625 379//379 -f 976//976 968//968 435//435 -f 771//771 782//782 790//790 -f 782//782 804//804 790//790 -f 850//850 288//288 841//841 -f 659//659 547//547 511//511 -f 830//830 493//493 843//843 -f 799//799 793//793 777//777 -f 708//708 719//719 714//714 -f 729//729 721//721 719//719 -f 729//729 745//745 721//721 -f 817//817 823//823 658//658 -f 288//288 173//173 828//828 -f 756//756 773//773 764//764 -f 787//787 795//795 999//999 -f 763//763 782//782 771//771 -f 823//823 840//840 658//658 -f 774//774 627//627 673//673 -f 799//799 807//807 822//822 -f 717//717 712//712 711//711 -f 955//955 954//954 939//939 -f 727//727 977//977 969//969 -f 729//729 759//759 745//745 -f 782//782 817//817 804//804 -f 902//902 907//907 724//724 -f 549//549 787//787 999//999 -f 550//550 608//608 751//751 -f 745//745 759//759 763//763 -f 831//831 818//818 807//807 -f 830//830 847//847 493//493 -f 890//890 886//886 872//872 -f 59//59 633//633 787//787 -f 782//782 805//805 817//817 -f 824//824 823//823 817//817 -f 625//625 633//633 59//59 -f 557//557 722//722 719//719 -f 719//719 722//722 729//729 -f 768//768 782//782 763//763 -f 823//823 824//824 840//840 -f 935//935 434//434 441//441 -f 746//746 759//759 729//729 -f 768//768 763//763 759//759 -f 832//832 831//831 819//819 -f 439//439 774//774 173//173 -f 505//505 508//508 441//441 -f 748//748 787//787 549//549 -f 768//768 805//805 782//782 -f 817//817 805//805 824//824 -f 836//836 489//489 495//495 -f 848//848 616//616 761//761 -f 173//173 774//774 673//673 -f 434//434 442//442 505//505 -f 557//557 715//715 722//722 -f 746//746 729//729 722//722 -f 628//628 723//723 717//717 -f 940//940 963//963 949//949 -f 59//59 787//787 748//748 -f 505//505 441//441 434//434 -f 833//833 710//710 809//809 -f 551//551 759//759 746//746 -f 551//551 768//768 759//759 -f 617//617 761//761 616//616 -f 678//678 687//687 630//630 -f 893//893 897//897 885//885 -f 528//528 551//551 746//746 -f 551//551 565//565 768//768 -f 791//791 805//805 768//768 -f 546//546 623//623 164//164 -f 305//305 999//999 795//795 -f 361//361 686//686 536//536 -f 786//786 748//748 549//549 -f 775//775 696//696 641//641 -f 722//722 730//730 746//746 -f 730//730 528//528 746//746 -f 791//791 824//824 805//805 -f 824//824 615//615 840//840 -f 840//840 615//615 691//691 -f 1007//1007 400//400 945//945 -f 1000//1000 1013//1013 359//359 -f 526//526 523//523 443//443 -f 615//615 824//824 791//791 -f 748//748 725//725 59//59 -f 776//776 784//784 757//757 -f 621//621 531//531 716//716 -f 951//951 950//950 933//933 -f 891//891 906//906 898//898 -f 877//877 876//876 713//713 -f 718//718 877//877 713//713 -f 477//477 1015//1015 948//948 -f 982//982 978//978 438//438 -f 166//166 963//963 950//950 -f 972//972 971//971 944//944 -f 906//906 933//933 910//910 -f 937//937 951//951 933//933 -f 951//951 166//166 950//950 -f 296//296 914//914 899//899 -f 914//914 925//925 899//899 -f 952//952 948//948 1013//1013 -f 917//917 946//946 893//893 -f 948//948 945//945 477//477 -f 507//507 503//503 869//869 -f 891//891 876//876 877//877 -f 945//945 948//948 952//952 -f 436//436 727//727 437//437 -f 899//899 925//925 911//911 -f 862//862 863//863 856//856 -f 936//936 933//933 940//940 -f 970//970 969//969 954//954 -f 864//864 872//872 868//868 -f 917//917 893//893 915//915 -f 979//979 978//978 957//957 -f 905//905 917//917 915//915 -f 889//889 885//885 871//871 -f 444//444 727//727 436//436 -f 897//897 916//916 923//923 -f 340//340 346//346 334//334 -f 932//932 939//939 922//922 -f 978//978 979//979 987//987 -f 963//963 166//166 964//964 -f 1002//1002 295//295 318//318 -f 876//876 891//891 882//882 -f 891//891 898//898 882//882 -f 911//911 906//906 891//891 -f 863//863 862//862 866//866 -f 911//911 937//937 906//906 -f 933//933 918//918 910//910 -f 947//947 166//166 951//951 -f 950//950 963//963 940//940 -f 946//946 944//944 893//893 -f 346//346 374//374 334//334 -f 374//374 934//934 334//334 -f 886//886 905//905 915//915 -f 957//957 964//964 979//979 -f 875//875 890//890 872//872 -f 881//881 897//897 870//870 -f 868//868 872//872 889//889 -f 286//286 864//864 290//290 -f 875//875 872//872 864//864 -f 947//947 951//951 937//937 -f 933//933 936//936 927//927 -f 484//484 473//473 934//934 -f 882//882 875//875 876//876 -f 962//962 982//982 970//970 -f 915//915 893//893 885//885 -f 863//863 866//866 881//881 -f 925//925 913//913 911//911 -f 957//957 978//978 962//962 -f 569//569 991//991 573//573 -f 374//374 938//938 934//934 -f 978//978 982//982 962//962 -f 866//866 871//871 881//881 -f 956//956 374//374 468//468 -f 938//938 973//973 934//934 -f 991//991 569//569 974//974 -f 374//374 956//956 938//938 -f 986//986 484//484 934//934 -f 973//973 986//986 934//934 -f 963//963 964//964 957//957 -f 885//885 881//881 871//871 -f 887//887 891//891 877//877 -f 574//574 228//228 586//586 -f 944//944 971//971 955//955 -f 854//854 856//856 855//855 -f 388//388 145//145 211//211 -f 916//916 944//944 955//955 -f 856//856 863//863 855//855 -f 990//990 973//973 938//938 -f 916//916 932//932 923//923 -f 970//970 727//727 969//969 -f 991//991 975//975 801//801 -f 801//801 989//989 574//574 -f 938//938 956//956 990//990 -f 974//974 975//975 991//991 -f 990//990 983//983 973//973 -f 560//560 975//975 974//974 -f 982//982 993//993 970//970 -f 973//973 496//496 986//986 -f 574//574 989//989 228//228 -f 989//989 941//941 228//228 -f 982//982 438//438 993//993 -f 975//975 989//989 801//801 -f 966//966 496//496 973//973 -f 957//957 962//962 949//949 -f 139//139 990//990 956//956 -f 432//432 433//433 445//445 -f 927//927 946//946 917//917 -f 560//560 984//984 975//975 -f 975//975 919//919 989//989 -f 139//139 253//253 990//990 -f 983//983 966//966 973//973 -f 218//218 965//965 249//249 -f 918//918 933//933 927//927 -f 975//975 348//348 919//919 -f 253//253 983//983 990//990 -f 965//965 966//966 983//983 -f 984//984 348//348 975//975 -f 885//885 886//886 915//915 -f 935//935 440//440 926//926 -f 783//783 942//942 560//560 -f 560//560 942//942 984//984 -f 455//455 941//941 989//989 -f 965//965 983//983 253//253 -f 712//712 896//896 902//902 -f 902//902 432//432 907//907 -f 887//887 911//911 891//891 -f 988//988 455//455 989//989 -f 860//860 856//856 706//706 -f 866//866 864//864 868//868 -f 910//910 905//905 894//894 -f 876//876 875//875 284//284 -f 919//919 981//981 989//989 -f 913//913 924//924 937//937 -f 284//284 875//875 286//286 -f 896//896 926//926 902//902 -f 926//926 432//432 902//902 -f 727//727 444//444 977//977 -f 981//981 988//988 989//989 -f 918//918 917//917 905//905 -f 1007//1007 945//945 998//998 -f 778//778 541//541 942//942 -f 783//783 778//778 942//942 -f 195//195 175//175 913//913 -f 903//903 712//712 717//717 -f 995//995 550//550 751//751 -f 348//348 981//981 919//919 -f 860//860 862//862 856//856 -f 878//878 903//903 717//717 -f 432//432 926//926 433//433 -f 541//541 984//984 942//942 -f 864//864 866//866 860//860 -f 903//903 896//896 712//712 -f 959//959 434//434 935//935 -f 984//984 958//958 348//348 -f 958//958 981//981 348//348 -f 910//910 918//918 905//905 -f 913//913 937//937 911//911 -f 926//926 896//896 903//903 -f 984//984 541//541 958//958 -f 291//291 860//860 706//706 -f 541//541 542//542 958//958 -f 868//868 871//871 866//866 -f 879//879 903//903 878//878 -f 958//958 967//967 981//981 -f 455//455 76//76 502//502 -f 178//178 928//928 925//925 -f 387//387 934//934 473//473 -f 988//988 900//900 455//455 -f 868//868 889//889 871//871 -f 285//285 887//887 877//877 -f 879//879 901//901 903//903 -f 901//901 926//926 903//903 -f 929//929 981//981 967//967 -f 981//981 900//900 988//988 -f 900//900 76//76 455//455 -f 894//894 905//905 886//886 -f 879//879 878//878 638//638 -f 542//542 967//967 958//958 -f 929//929 900//900 981//981 -f 869//869 879//879 638//638 -f 935//935 926//926 901//901 -f 916//916 955//955 932//932 -f 950//950 940//940 933//933 -f 547//547 857//857 503//503 -f 503//503 857//857 869//869 -f 959//959 968//968 976//976 -f 920//920 935//935 901//901 -f 440//440 935//935 441//441 -f 1015//1015 1013//1013 948//948 -f 684//684 857//857 547//547 -f 880//880 879//879 869//869 -f 880//880 895//895 879//879 -f 895//895 901//901 879//879 -f 953//953 959//959 935//935 -f 953//953 968//968 959//959 -f 296//296 887//887 285//285 -f 874//874 869//869 857//857 -f 968//968 985//985 435//435 -f 890//890 894//894 886//886 -f 893//893 916//916 897//897 -f 953//953 985//985 968//968 -f 479//479 900//900 929//929 -f 858//858 874//874 857//857 -f 920//920 953//953 935//935 -f 889//889 886//886 885//885 -f 937//937 933//933 906//906 -f 858//858 857//857 684//684 -f 874//874 880//880 869//869 -f 908//908 901//901 895//895 -f 778//778 539//539 541//541 -f 479//479 980//980 900//900 -f 900//900 980//980 76//76 -f 888//888 895//895 880//880 -f 485//485 980//980 479//479 -f 980//980 85//85 76//76 -f 706//706 856//856 854//854 -f 858//858 684//684 851//851 -f 960//960 985//985 953//953 -f 980//980 73//73 85//85 -f 914//914 178//178 925//925 -f 873//873 874//874 858//858 -f 873//873 883//883 874//874 -f 883//883 880//880 874//874 -f 909//909 895//895 888//888 -f 895//895 909//909 908//908 -f 960//960 953//953 920//920 -f 992//992 341//341 985//985 -f 539//539 542//542 541//541 -f 861//861 873//873 858//858 -f 960//960 992//992 985//985 -f 965//965 129//129 966//966 -f 485//485 74//74 980//980 -f 74//74 73//73 980//980 -f 291//291 864//864 860//860 -f 852//852 858//858 851//851 -f 167//167 438//438 978//978 -f 861//861 867//867 873//873 -f 892//892 883//883 873//873 -f 736//736 341//341 992//992 -f 285//285 877//877 718//718 -f 503//503 507//507 547//547 -f 867//867 892//892 873//873 -f 899//899 911//911 887//887 -f 893//893 944//944 916//916 -f 946//946 972//972 944//944 -f 918//918 927//927 917//917 -f 943//943 961//961 960//960 -f 859//859 861//861 858//858 -f 881//881 885//885 897//897 -f 852//852 859//859 858//858 -f 904//904 909//909 888//888 -f 925//925 928//928 913//913 -f 861//861 865//865 867//867 -f 865//865 870//870 867//867 -f 870//870 892//892 867//867 -f 904//904 912//912 909//909 -f 861//861 859//859 865//865 -f 884//884 892//892 870//870 -f 961//961 992//992 960//960 -f 853//853 859//859 852//852 -# 2000 faces, 0 coords texture - -# End of File diff --git a/ICE/Graphics/include/Renderer.h b/ICE/Graphics/include/Renderer.h index 339544da..48c00aa3 100644 --- a/ICE/Graphics/include/Renderer.h +++ b/ICE/Graphics/include/Renderer.h @@ -25,18 +25,16 @@ struct alignas(16) LightUBO { Eigen::Vector3f rotation; float __padding1; //align to vec4 Eigen::Vector3f color; - float __padding2; //align to vec4 float distance_dropoff; int type; - float __padding3[2]; }; struct alignas(16) SceneLightsUBO { LightUBO lights[MAX_LIGHTS]; - int light_count; - float __padding0[3]; Eigen::Vector4f ambient_light; + int light_count; + float __padding[3]; }; struct alignas(16) CameraUBO { From cec6bf523e12fd70b11a13d436a45c2484dd9a56 Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Fri, 12 Dec 2025 12:47:12 +0100 Subject: [PATCH 05/21] work on extracting bones --- Assets/Shaders/phong.vs | 20 +++++++++ ICE/Graphics/include/Mesh.h | 26 ++++++++--- ICE/Graphics/src/Mesh.cpp | 26 +++-------- ICE/IO/include/ModelLoader.h | 3 +- ICE/IO/src/ModelLoader.cpp | 80 ++++++++++++++++++++++++++-------- ICE/Util/include/BufferUtils.h | 26 +++++++++++ 6 files changed, 137 insertions(+), 44 deletions(-) diff --git a/Assets/Shaders/phong.vs b/Assets/Shaders/phong.vs index e698eb71..215096ba 100644 --- a/Assets/Shaders/phong.vs +++ b/Assets/Shaders/phong.vs @@ -1,12 +1,17 @@ #version 420 core #include "vert_uniforms.glsl" +#define MAX_BONES 100 +#define MAX_BONE_INFLUENCE 4 layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; layout (location = 2) in vec2 tex_coords; +layout (location = 5) in ivec4 bone_ids; +layout (location = 6) in vec4 bone_weights; uniform mat4 model; +uniform mat4 finalBonesMatrices[MAX_BONES]; out vec3 fnormal; out vec3 fposition; @@ -14,6 +19,21 @@ out vec3 fview; out vec2 ftex_coords; void main() { + vec4 totalPosition = vec4(0.0f); + for(int i = 0 ; i < MAX_BONE_INFLUENCE ; i++) + { + if(bone_ids[i] == -1) + continue; + if(bone_ids[i] >= MAX_BONES) + { + totalPosition = vec4(vertex, 1.0f); + break; + } + vec4 localPosition = finalBonesMatrices[bone_ids[i]] * vec4(vertex,1.0f); + totalPosition += localPosition * bone_weights[i]; + vec3 localNormal = mat3(finalBonesMatrices[bone_ids[i]]) * normal; + } + fview = (inverse(uView) * vec4(0, 0, 0, 1)).xyz; fnormal = normalize(mat3(transpose(inverse(model))) * normal); fposition = (model * vec4(vertex, 1.0)).xyz; diff --git a/ICE/Graphics/include/Mesh.h b/ICE/Graphics/include/Mesh.h index b1881ca3..795782ad 100644 --- a/ICE/Graphics/include/Mesh.h +++ b/ICE/Graphics/include/Mesh.h @@ -13,12 +13,26 @@ #include "VertexArray.h" namespace ICE { + +constexpr int MAX_BONES_PER_VERTEX = 4; +constexpr int MAX_BONES = 100; +constexpr int INVALID_BONE_ID = -1; + +struct MeshData { + std::vector vertices; + std::vector normals; + std::vector uvCoords; + std::vector tangents; + std::vector bitangents; + std::vector boneIDs; + std::vector boneWeights; + std::vector indices; +}; + class Mesh : public Asset { public: - Mesh(const std::vector &vertices, const std::vector &normals, const std::vector &uvCoords, - const std::vector &indices); - Mesh(std::vector &&vertices, std::vector &&normals, std::vector &&uvCoords, - std::vector &&indices); + Mesh(const MeshData &data); + Mesh(MeshData &&data); const std::vector &getVertices() const; @@ -37,9 +51,7 @@ class Mesh : public Asset { AssetType getType() const override; private: - std::vector vertices, normals; - std::vector uvCoords; - std::vector indices; + MeshData m_data; std::shared_ptr vertexArray; AABB boundingBox; }; diff --git a/ICE/Graphics/src/Mesh.cpp b/ICE/Graphics/src/Mesh.cpp index ae1b2265..44f689b2 100644 --- a/ICE/Graphics/src/Mesh.cpp +++ b/ICE/Graphics/src/Mesh.cpp @@ -10,36 +10,24 @@ #include namespace ICE { -Mesh::Mesh(const std::vector &vertices, const std::vector &normals, const std::vector &uvCoords, - const std::vector &indices) - : vertices(vertices), - normals(normals), - uvCoords(uvCoords), - indices(indices), - boundingBox(vertices) { -} -Mesh::Mesh(std::vector &&vertices, std::vector &&normals, std::vector &&uvCoords, - std::vector &&indices) - : vertices(std::move(vertices)), - normals(std::move(normals)), - uvCoords(std::move(uvCoords)), - indices(std::move(indices)), - boundingBox(this->vertices) { +Mesh::Mesh(const MeshData &data) : m_data(data), boundingBox(data.vertices) { +} +Mesh::Mesh(MeshData &&data) : m_data(std::move(data)), boundingBox(getVertices()) { } const std::vector &Mesh::getVertices() const { - return vertices; + return m_data.vertices; } const std::vector &Mesh::getNormals() const { - return normals; + return m_data.normals; } const std::vector &Mesh::getUVCoords() const { - return uvCoords; + return m_data.uvCoords; } const std::vector &Mesh::getIndices() const { - return indices; + return m_data.indices; } const std::shared_ptr Mesh::getVertexArray() const { diff --git a/ICE/IO/include/ModelLoader.h b/ICE/IO/include/ModelLoader.h index 2cd8eea4..0b29d339 100644 --- a/ICE/IO/include/ModelLoader.h +++ b/ICE/IO/include/ModelLoader.h @@ -24,11 +24,12 @@ class ModelLoader : public IAssetLoader { IAssetLoader(factory) {} std::shared_ptr load(const std::vector &file) override; - + int processNode(const aiNode *node, std::vector &nodes); std::shared_ptr extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene); AssetUID extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene); AssetUID extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type); + void extractBoneWeightForVertices(const aiMesh *mesh, const aiScene *scene, MeshData &data); private: Eigen::Vector4f colorToVec(aiColor4D *color); diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index 69b709b6..9b3cc30a 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -42,7 +42,6 @@ std::shared_ptr ModelLoader::load(const std::vector &nodes) { Model::Node node; node.name = ainode->mName.C_Str(); - // compute local transform (relative to parent) aiMatrix4x4 local = ainode->mTransformation; node.localTransform = aiMat4ToEigen(local); // store local transform (or AiMat4ToGlm(world) if you want world) @@ -63,47 +62,66 @@ int ModelLoader::processNode(const aiNode *ainode, std::vector &nod } std::shared_ptr ModelLoader::extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene) { - auto vertices = std::vector(); - auto normals = std::vector(); - auto uvs = std::vector(); - auto indices = std::vector(); + MeshData data; for (int i = 0; i < mesh->mNumVertices; i++) { auto v = mesh->mVertices[i]; auto n = mesh->HasNormals() ? mesh->mNormals[i] : aiVector3D{0, 0, 0}; + auto t = mesh->HasTangentsAndBitangents() ? mesh->mTangents[i] : aiVector3D{0, 0, 0}; + auto b = mesh->HasTangentsAndBitangents() ? mesh->mBitangents[i] : aiVector3D{0, 0, 0}; Eigen::Vector2f uv(0, 0); if (mesh->mTextureCoords[0] != nullptr) { auto uv_file = mesh->mTextureCoords[0][i]; uv.x() = uv_file.x; uv.y() = uv_file.y; } - vertices.emplace_back(v.x, v.y, v.z); - normals.emplace_back(n.x, n.y, n.z); - uvs.push_back(uv); + data.vertices.emplace_back(v.x, v.y, v.z); + data.normals.emplace_back(n.x, n.y, n.z); + data.uvCoords.push_back(uv); + data.tangents.emplace_back(t.x, t.y, t.z); + data.bitangents.emplace_back(b.x, b.y, b.z); + data.boneIDs.emplace_back(Eigen::Vector4i::Constant(-1)); + data.boneWeights.emplace_back(Eigen::Vector4f::Zero()); } for (int i = 0; i < mesh->mNumFaces; i++) { auto f = mesh->mFaces[i]; assert(f.mNumIndices == 3); - indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); + data.indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); + } + + if (mesh->HasBones()) { + extractBoneWeightForVertices(mesh, scene, data); } - auto mesh_ = std::make_shared(vertices, normals, uvs, indices); + auto mesh_ = std::make_shared(data); auto vertexArray = graphics_factory->createVertexArray(); auto vertexBuffer = graphics_factory->createVertexBuffer(); auto normalsBuffer = graphics_factory->createVertexBuffer(); auto uvBuffer = graphics_factory->createVertexBuffer(); + auto tangentBuffer = graphics_factory->createVertexBuffer(); + auto biTangentBuffer = graphics_factory->createVertexBuffer(); + auto boneIDBuffer = graphics_factory->createVertexBuffer(); + auto boneWeightBuffer = graphics_factory->createVertexBuffer(); auto indexBuffer = graphics_factory->createIndexBuffer(); - vertexBuffer->putData(BufferUtils::CreateFloatBuffer(vertices), 3 * vertices.size() * sizeof(float)); - normalsBuffer->putData(BufferUtils::CreateFloatBuffer(normals), 3 * normals.size() * sizeof(float)); - uvBuffer->putData(BufferUtils::CreateFloatBuffer(uvs), 2 * uvs.size() * sizeof(float)); - indexBuffer->putData(BufferUtils::CreateIntBuffer(indices), 3 * indices.size() * sizeof(int)); + vertexBuffer->putData(BufferUtils::CreateFloatBuffer(data.vertices), 3 * data.vertices.size() * sizeof(float)); + normalsBuffer->putData(BufferUtils::CreateFloatBuffer(data.normals), 3 * data.normals.size() * sizeof(float)); + tangentBuffer->putData(BufferUtils::CreateFloatBuffer(data.tangents), 3 * data.tangents.size() * sizeof(float)); + biTangentBuffer->putData(BufferUtils::CreateFloatBuffer(data.bitangents), 3 * data.bitangents.size() * sizeof(float)); + boneIDBuffer->putData(BufferUtils::CreateIntBuffer(data.boneIDs), 4 * data.boneIDs.size() * sizeof(int)); + boneWeightBuffer->putData(BufferUtils::CreateFloatBuffer(data.boneWeights), 4 * data.boneWeights.size() * sizeof(float)); + uvBuffer->putData(BufferUtils::CreateFloatBuffer(data.uvCoords), 2 * data.uvCoords.size() * sizeof(float)); + indexBuffer->putData(BufferUtils::CreateIntBuffer(data.indices), 3 * data.indices.size() * sizeof(int)); - vertexArray->pushVertexBuffer(vertexBuffer, 3); - vertexArray->pushVertexBuffer(normalsBuffer, 3); - vertexArray->pushVertexBuffer(uvBuffer, 2); + vertexArray->pushVertexBuffer(vertexBuffer, 0, 3); + vertexArray->pushVertexBuffer(normalsBuffer, 1, 3); + vertexArray->pushVertexBuffer(uvBuffer, 2, 2); + vertexArray->pushVertexBuffer(tangentBuffer, 3, 3); + vertexArray->pushVertexBuffer(biTangentBuffer, 4, 3); + vertexArray->pushVertexBuffer(boneIDBuffer, 5, 4); + vertexArray->pushVertexBuffer(boneWeightBuffer, 6, 4); vertexArray->setIndexBuffer(indexBuffer); mesh_->setVertexArray(vertexArray); @@ -193,6 +211,34 @@ AssetUID ModelLoader::extractTexture(const aiMaterial *material, const std::stri return tex_id; } +void extractBoneWeightForVertices(const aiMesh *mesh, const aiScene *scene, MeshData &data) { + unsigned int numBones = mesh->mNumBones > MAX_BONES ? MAX_BONES : mesh->mNumBones; + + for (unsigned int boneIndex = 0; boneIndex < numBones; ++boneIndex) { + int boneID = boneIndex; + std::string boneName = mesh->mBones[boneIndex]->mName.C_Str(); + + // Get all vertex weights for current bone + aiVertexWeight *weights = mesh->mBones[boneIndex]->mWeights; + unsigned int numWeights = mesh->mBones[boneIndex]->mNumWeights; + + // For each weight at vertex x for current bone + for (int weightIndex = 0; weightIndex < numWeights; ++weightIndex) { + unsigned int vertexId = weights[weightIndex].mVertexId; + float weight = weights[weightIndex].mWeight; + + // Update four most influential bones + for (int i = 0; i < 4; ++i) { + if (data.boneIDs[vertexId][i] < 0) { + data.boneWeights[vertexId][i] = weight; + data.boneIDs[vertexId][i] = boneID; + break; + } + } + } + } +} + Eigen::Vector4f ModelLoader::colorToVec(aiColor4D *color) { Eigen::Vector4f v; v.x() = color->r; diff --git a/ICE/Util/include/BufferUtils.h b/ICE/Util/include/BufferUtils.h index f60e0f67..c02bb62a 100644 --- a/ICE/Util/include/BufferUtils.h +++ b/ICE/Util/include/BufferUtils.h @@ -25,6 +25,19 @@ namespace ICE { return buffer; } + static float* CreateFloatBuffer(const std::vector& vectors) { + auto buffer = static_cast(malloc(sizeof(float) * 4 * vectors.size())); + uint32_t i = 0; + for (const auto& v : vectors) { + buffer[i] = (float) v.x(); + buffer[i + 1] = (float) v.y(); + buffer[i + 2] = (float) v.z(); + buffer[i + 3] = (float) v.w(); + i += 4; + } + return buffer; + } + static float* CreateFloatBuffer(const std::vector& vectors) { auto* buffer = static_cast(malloc(sizeof(float) * 2 * vectors.size())); uint32_t i = 0; @@ -48,6 +61,19 @@ namespace ICE { return buffer; } + static int* CreateIntBuffer(const std::vector& vectors) { + auto* buffer = static_cast(malloc(sizeof(int) * 4 * vectors.size())); + uint32_t i = 0; + for (const auto& v : vectors) { + buffer[i] = v.x(); + buffer[i + 1] = v.y(); + buffer[i + 2] = v.z(); + buffer[i + 3] = v.w(); + i += 4; + } + return buffer; + } + static std::vector CreateCharBuffer(const std::vector& strings) { std::vector pointerVec(strings.size()); for(unsigned i = 0; i < strings.size(); ++i) From 8a597d9ab23581162d2834d10754cce0710c1fd0 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 12 Dec 2025 15:44:54 +0100 Subject: [PATCH 06/21] Add animation loading and animation system, untested --- ICE/Components/include/AnimationComponent.h | 13 + ICE/Graphics/CMakeLists.txt | 64 +- ICE/Graphics/include/Animation.h | 32 + ICE/Graphics/include/Mesh.h | 114 ++-- ICE/Graphics/include/Model.h | 20 + ICE/IO/include/ModelLoader.h | 85 +-- ICE/IO/src/ModelLoader.cpp | 612 +++++++++++--------- ICE/System/CMakeLists.txt | 46 +- ICE/System/include/AnimationSystem.h | 39 ++ ICE/System/src/AnimationSystem.cpp | 146 +++++ 10 files changed, 744 insertions(+), 427 deletions(-) create mode 100644 ICE/Components/include/AnimationComponent.h create mode 100644 ICE/Graphics/include/Animation.h create mode 100644 ICE/System/include/AnimationSystem.h create mode 100644 ICE/System/src/AnimationSystem.cpp diff --git a/ICE/Components/include/AnimationComponent.h b/ICE/Components/include/AnimationComponent.h new file mode 100644 index 00000000..d60c360e --- /dev/null +++ b/ICE/Components/include/AnimationComponent.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace ICE { +struct AnimationComponent { + std::string currentAnimation; + double currentTime = 0.0; + double speed = 1.0; + bool playing = true; + bool loop = true; +}; +} // namespace ICE \ No newline at end of file diff --git a/ICE/Graphics/CMakeLists.txt b/ICE/Graphics/CMakeLists.txt index d1e42010..86100b0d 100644 --- a/ICE/Graphics/CMakeLists.txt +++ b/ICE/Graphics/CMakeLists.txt @@ -1,32 +1,32 @@ -cmake_minimum_required(VERSION 3.19) -project(graphics) - -message(STATUS "Building ${PROJECT_NAME} module") - -add_library(${PROJECT_NAME} STATIC) - -target_sources(${PROJECT_NAME} PRIVATE - src/PerspectiveCamera.cpp - src/OrthographicCamera.cpp - src/ForwardRenderer.cpp - src/Material.cpp - src/Mesh.cpp - src/Model.cpp - src/GeometryPass.cpp) - -target_link_libraries(${PROJECT_NAME} - PUBLIC - assets - math - entity - scene -) - -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $ - PRIVATE - ${CMAKE_SOURCE_DIR}/src) - -enable_testing() -#add_subdirectory(test) +cmake_minimum_required(VERSION 3.19) +project(graphics) + +message(STATUS "Building ${PROJECT_NAME} module") + +add_library(${PROJECT_NAME} STATIC) + +target_sources(${PROJECT_NAME} PRIVATE + src/PerspectiveCamera.cpp + src/OrthographicCamera.cpp + src/ForwardRenderer.cpp + src/Material.cpp + src/Mesh.cpp + src/Model.cpp + src/GeometryPass.cpp) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + assets + math + entity + scene +) + +target_include_directories(${PROJECT_NAME} PUBLIC + $ + $ + PRIVATE + ${CMAKE_SOURCE_DIR}/src) + +enable_testing() +#add_subdirectory(test) diff --git a/ICE/Graphics/include/Animation.h b/ICE/Graphics/include/Animation.h new file mode 100644 index 00000000..00044da4 --- /dev/null +++ b/ICE/Graphics/include/Animation.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include + +namespace ICE { +struct BoneAnimation { + struct PositionKey { + float timeStamp; + Eigen::Vector3f position; + }; + struct RotationKey { + float timeStamp; + Eigen::Quaternionf rotation; + }; + struct ScaleKey { + float timeStamp; + Eigen::Vector3f scale; + }; + + std::vector positions; + std::vector rotations; + std::vector scales; +}; + +struct Animation { + float duration; + float ticksPerSecond; + + std::unordered_map tracks; +}; +} \ No newline at end of file diff --git a/ICE/Graphics/include/Mesh.h b/ICE/Graphics/include/Mesh.h index 795782ad..c117d65f 100644 --- a/ICE/Graphics/include/Mesh.h +++ b/ICE/Graphics/include/Mesh.h @@ -1,58 +1,58 @@ -// -// Created by Thomas Ibanez on 16.11.20. -// - -#pragma once - -#include -#include - -#include -#include - -#include "VertexArray.h" - -namespace ICE { - -constexpr int MAX_BONES_PER_VERTEX = 4; -constexpr int MAX_BONES = 100; -constexpr int INVALID_BONE_ID = -1; - -struct MeshData { - std::vector vertices; - std::vector normals; - std::vector uvCoords; - std::vector tangents; - std::vector bitangents; - std::vector boneIDs; - std::vector boneWeights; - std::vector indices; -}; - -class Mesh : public Asset { - public: - Mesh(const MeshData &data); - Mesh(MeshData &&data); - - const std::vector &getVertices() const; - - const std::vector &getNormals() const; - - const std::vector &getUVCoords() const; - - const std::vector &getIndices() const; - - const std::shared_ptr getVertexArray() const; - void setVertexArray(const std::shared_ptr &vao); - - const AABB &getBoundingBox() const; - - std::string getTypeName() const override; - AssetType getType() const override; - - private: - MeshData m_data; - std::shared_ptr vertexArray; - AABB boundingBox; -}; +// +// Created by Thomas Ibanez on 16.11.20. +// + +#pragma once + +#include +#include + +#include +#include + +#include "VertexArray.h" + +namespace ICE { + +constexpr int MAX_BONES_PER_VERTEX = 4; +constexpr int MAX_BONES = 100; +constexpr int INVALID_BONE_ID = -1; + +struct MeshData { + std::vector vertices; + std::vector normals; + std::vector uvCoords; + std::vector tangents; + std::vector bitangents; + std::vector boneIDs; + std::vector boneWeights; + std::vector indices; +}; + +class Mesh : public Asset { + public: + Mesh(const MeshData &data); + Mesh(MeshData &&data); + + const std::vector &getVertices() const; + + const std::vector &getNormals() const; + + const std::vector &getUVCoords() const; + + const std::vector &getIndices() const; + + const std::shared_ptr getVertexArray() const; + void setVertexArray(const std::shared_ptr &vao); + + const AABB &getBoundingBox() const; + + std::string getTypeName() const override; + AssetType getType() const override; + + private: + MeshData m_data; + std::shared_ptr vertexArray; + AABB boundingBox; +}; } // namespace ICE \ No newline at end of file diff --git a/ICE/Graphics/include/Model.h b/ICE/Graphics/include/Model.h index e90ab635..a3ff7380 100644 --- a/ICE/Graphics/include/Model.h +++ b/ICE/Graphics/include/Model.h @@ -1,5 +1,6 @@ #pragma once +#include "Animation.h" #include "Asset.h" #include "Mesh.h" @@ -9,16 +10,33 @@ class Model : public Asset { struct Node { std::string name; Eigen::Matrix4f localTransform; + Eigen::Matrix4f globalTransform; // For mesh-only animation (no bones) std::vector meshIndices; // Meshes used by this node std::vector children; // Node indices }; + struct BoneInfo { + Eigen::Matrix4f offsetMatrix; + Eigen::Matrix4f finalTransformation; + }; + + struct Skeleton { + std::unordered_map boneMapping; + std::vector bones; + Eigen::Matrix4f globalInverseTransform; + }; + Model(const std::vector &nodes, const std::vector> &meshes, const std::vector &materials); std::vector getNodes() const { return m_nodes; } + std::vector& getNodes() { return m_nodes; } std::vector> getMeshes() const { return m_meshes; } std::vector getMaterialsIDs() const { return m_materials; } AABB getBoundingBox() const { return m_boundingbox; } + std::unordered_map getAnimations() const { return m_animations; } + Skeleton &getSkeleton() { return m_skeleton; } + void setSkeleton(const Skeleton &skeleton) { m_skeleton = skeleton; } + void setAnimations(const std::unordered_map &animations) { m_animations = animations; } AssetType getType() const override { return AssetType::EModel; } std::string getTypeName() const override { return "Model"; } @@ -27,6 +45,8 @@ class Model : public Asset { std::vector m_nodes; std::vector> m_meshes; std::vector m_materials; + std::unordered_map m_animations; + Skeleton m_skeleton; AABB m_boundingbox{{0, 0, 0}, {0, 0, 0}}; }; } // namespace ICE \ No newline at end of file diff --git a/ICE/IO/include/ModelLoader.h b/ICE/IO/include/ModelLoader.h index 0b29d339..cedcff1a 100644 --- a/ICE/IO/include/ModelLoader.h +++ b/ICE/IO/include/ModelLoader.h @@ -1,41 +1,44 @@ -// -// Created by Thomas Ibanez on 31.07.21. -// - -#pragma once - -#include -#include - -#include - -#include "Asset.h" -#include "IAssetLoader.h" -#include "Model.h" - -namespace ICE { -class AssetBank; - -class ModelLoader : public IAssetLoader { - public: - ModelLoader(const std::shared_ptr &factory, AssetBank &bank) - : ref_bank(bank), - m_graphics_factory(factory), - IAssetLoader(factory) {} - - std::shared_ptr load(const std::vector &file) override; - - int processNode(const aiNode *node, std::vector &nodes); - std::shared_ptr extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene); - AssetUID extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene); - AssetUID extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type); - void extractBoneWeightForVertices(const aiMesh *mesh, const aiScene *scene, MeshData &data); - - private: - Eigen::Vector4f colorToVec(aiColor4D *color); - Eigen::Matrix4f aiMat4ToEigen(const aiMatrix4x4 &mat); - - AssetBank &ref_bank; - std::shared_ptr m_graphics_factory; -}; -} // namespace ICE +// +// Created by Thomas Ibanez on 31.07.21. +// + +#pragma once + +#include +#include + +#include + +#include "Asset.h" +#include "IAssetLoader.h" +#include "Model.h" + +namespace ICE { +class AssetBank; + +class ModelLoader : public IAssetLoader { + public: + ModelLoader(const std::shared_ptr &factory, AssetBank &bank) + : ref_bank(bank), + m_graphics_factory(factory), + IAssetLoader(factory) {} + + std::shared_ptr load(const std::vector &file) override; + + int processNode(const aiNode *node, std::vector &nodes); + std::shared_ptr extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene, Model::Skeleton &skeleton); + AssetUID extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene); + AssetUID extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type); + void extractBoneData(const aiMesh *mesh, const aiScene *scene, MeshData &data, Model::Skeleton &skeleton); + std::unordered_map extractAnimations(const aiScene *scene, Model::Skeleton &skeleton); + + private: + Eigen::Vector4f colorToVec(aiColor4D *color); + Eigen::Matrix4f aiMat4ToEigen(const aiMatrix4x4 &mat); + Eigen::Vector3f aiVec3ToEigen(const aiVector3D &vec); + Eigen::Quaternionf aiQuatToEigen(const aiQuaternion &q); + + AssetBank &ref_bank; + std::shared_ptr m_graphics_factory; +}; +} // namespace ICE diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index 9b3cc30a..415820ed 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -1,274 +1,338 @@ -// -// Created by Thomas Ibanez on 31.07.21. -// - -#include "ModelLoader.h" - -#include -#include -#include -#include -#include - -#include -#include - -namespace ICE { -std::shared_ptr ModelLoader::load(const std::vector &file) { - Assimp::Importer importer; - - const aiScene *scene = importer.ReadFile(file[0].string(), - aiProcess_FlipUVs | aiProcess_ValidateDataStructure | aiProcess_SortByPType | aiProcess_GenSmoothNormals - | aiProcess_CalcTangentSpace | aiProcess_Triangulate); - - std::vector> meshes; - std::vector materials; - std::vector nodes; - - for (int m = 0; m < scene->mNumMeshes; m++) { - auto mesh = scene->mMeshes[m]; - auto material = scene->mMaterials[mesh->mMaterialIndex]; - auto model_name = file[0].filename().stem().string(); - meshes.push_back(extractMesh(mesh, model_name, scene)); - materials.push_back(extractMaterial(material, model_name, scene)); - meshes.back()->setSources(file); - } - processNode(scene->mRootNode, nodes); - auto model = std::make_shared(nodes, meshes, materials); - model->setSources(file); - return model; -} - -int ModelLoader::processNode(const aiNode *ainode, std::vector &nodes) { - Model::Node node; - node.name = ainode->mName.C_Str(); - // compute local transform (relative to parent) - aiMatrix4x4 local = ainode->mTransformation; - node.localTransform = aiMat4ToEigen(local); // store local transform (or AiMat4ToGlm(world) if you want world) - - for (unsigned int i = 0; i < ainode->mNumMeshes; ++i) { - unsigned int mesh_idx = ainode->mMeshes[i]; - node.meshIndices.push_back(mesh_idx); - } - auto insert_pos = nodes.size(); - nodes.push_back(node); - - for (unsigned int c = 0; c < ainode->mNumChildren; ++c) { - const aiNode *child = ainode->mChildren[c]; - int child_pos = processNode(child, nodes); - nodes.at(insert_pos).children.push_back(child_pos); - } - return insert_pos; -} - -std::shared_ptr ModelLoader::extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene) { - MeshData data; - - for (int i = 0; i < mesh->mNumVertices; i++) { - auto v = mesh->mVertices[i]; - auto n = mesh->HasNormals() ? mesh->mNormals[i] : aiVector3D{0, 0, 0}; - auto t = mesh->HasTangentsAndBitangents() ? mesh->mTangents[i] : aiVector3D{0, 0, 0}; - auto b = mesh->HasTangentsAndBitangents() ? mesh->mBitangents[i] : aiVector3D{0, 0, 0}; - Eigen::Vector2f uv(0, 0); - if (mesh->mTextureCoords[0] != nullptr) { - auto uv_file = mesh->mTextureCoords[0][i]; - uv.x() = uv_file.x; - uv.y() = uv_file.y; - } - data.vertices.emplace_back(v.x, v.y, v.z); - data.normals.emplace_back(n.x, n.y, n.z); - data.uvCoords.push_back(uv); - data.tangents.emplace_back(t.x, t.y, t.z); - data.bitangents.emplace_back(b.x, b.y, b.z); - data.boneIDs.emplace_back(Eigen::Vector4i::Constant(-1)); - data.boneWeights.emplace_back(Eigen::Vector4f::Zero()); - } - for (int i = 0; i < mesh->mNumFaces; i++) { - auto f = mesh->mFaces[i]; - assert(f.mNumIndices == 3); - data.indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); - } - - if (mesh->HasBones()) { - extractBoneWeightForVertices(mesh, scene, data); - } - - auto mesh_ = std::make_shared(data); - - auto vertexArray = graphics_factory->createVertexArray(); - - auto vertexBuffer = graphics_factory->createVertexBuffer(); - auto normalsBuffer = graphics_factory->createVertexBuffer(); - auto uvBuffer = graphics_factory->createVertexBuffer(); - auto tangentBuffer = graphics_factory->createVertexBuffer(); - auto biTangentBuffer = graphics_factory->createVertexBuffer(); - auto boneIDBuffer = graphics_factory->createVertexBuffer(); - auto boneWeightBuffer = graphics_factory->createVertexBuffer(); - auto indexBuffer = graphics_factory->createIndexBuffer(); - - vertexBuffer->putData(BufferUtils::CreateFloatBuffer(data.vertices), 3 * data.vertices.size() * sizeof(float)); - normalsBuffer->putData(BufferUtils::CreateFloatBuffer(data.normals), 3 * data.normals.size() * sizeof(float)); - tangentBuffer->putData(BufferUtils::CreateFloatBuffer(data.tangents), 3 * data.tangents.size() * sizeof(float)); - biTangentBuffer->putData(BufferUtils::CreateFloatBuffer(data.bitangents), 3 * data.bitangents.size() * sizeof(float)); - boneIDBuffer->putData(BufferUtils::CreateIntBuffer(data.boneIDs), 4 * data.boneIDs.size() * sizeof(int)); - boneWeightBuffer->putData(BufferUtils::CreateFloatBuffer(data.boneWeights), 4 * data.boneWeights.size() * sizeof(float)); - uvBuffer->putData(BufferUtils::CreateFloatBuffer(data.uvCoords), 2 * data.uvCoords.size() * sizeof(float)); - indexBuffer->putData(BufferUtils::CreateIntBuffer(data.indices), 3 * data.indices.size() * sizeof(int)); - - vertexArray->pushVertexBuffer(vertexBuffer, 0, 3); - vertexArray->pushVertexBuffer(normalsBuffer, 1, 3); - vertexArray->pushVertexBuffer(uvBuffer, 2, 2); - vertexArray->pushVertexBuffer(tangentBuffer, 3, 3); - vertexArray->pushVertexBuffer(biTangentBuffer, 4, 3); - vertexArray->pushVertexBuffer(boneIDBuffer, 5, 4); - vertexArray->pushVertexBuffer(boneWeightBuffer, 6, 4); - vertexArray->setIndexBuffer(indexBuffer); - - mesh_->setVertexArray(vertexArray); - return mesh_; -} - -AssetUID ModelLoader::extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene) { - auto mtl_name = material->GetName(); - if (mtl_name.length == 0) { - mtl_name = "DefaultMat"; - } - auto bank_name = model_name + "/" + mtl_name.C_Str(); - auto mtl = std::make_shared(); - mtl->setUniform("material.use_diffuse_map", false); - mtl->setUniform("material.use_ambient_map", false); - mtl->setUniform("material.use_specular_map", false); - mtl->setUniform("material.use_normal_map", false); - if (auto ambient_map = extractTexture(material, bank_name + "/ambient_map", scene, aiTextureType_AMBIENT); ambient_map != 0) { - mtl->setUniform("material.ambient_map", ambient_map); - mtl->setUniform("material.use_ambient_map", true); - } - if (auto diffuse_tex = extractTexture(material, bank_name + "/diffuse_map", scene, aiTextureType_DIFFUSE); diffuse_tex != 0) { - mtl->setUniform("material.diffuse_map", diffuse_tex); - mtl->setUniform("material.use_diffuse_map", true); - } - if (auto specular_tex = extractTexture(material, bank_name + "/specular_map", scene, aiTextureType_SPECULAR); specular_tex != 0) { - mtl->setUniform("material.specular_map", specular_tex); - mtl->setUniform("material.use_specular_map", true); - } - if (auto normal_tex = extractTexture(material, bank_name + "/normal_map", scene, aiTextureType_NORMALS); normal_tex != 0) { - mtl->setUniform("material.normal_map", normal_tex); - mtl->setUniform("material.use_normal_map", true); - } - - if (ref_bank.getUID(AssetPath::WithTypePrefix(bank_name)) != 0) { - return ref_bank.getUID(AssetPath::WithTypePrefix(bank_name)); - } - mtl->setShader(ref_bank.getUID(AssetPath::WithTypePrefix("phong"))); - - aiColor4D diffuse; - aiColor4D specular; - aiColor4D ambient; - ai_real alpha = 1.0; - - if (aiGetMaterialColor(material, AI_MATKEY_COLOR_DIFFUSE, &diffuse) == aiReturn_SUCCESS) - mtl->setUniform("material.albedo", colorToVec(&diffuse)); - if (aiGetMaterialColor(material, AI_MATKEY_COLOR_SPECULAR, &specular) == aiReturn_SUCCESS) - mtl->setUniform("material.specular", colorToVec(&specular)); - if (aiGetMaterialColor(material, AI_MATKEY_COLOR_AMBIENT, &ambient) == aiReturn_SUCCESS) - mtl->setUniform("material.ambient", colorToVec(&ambient)); - if (aiGetMaterialFloat(material, AI_MATKEY_SHININESS, &alpha) == aiReturn_SUCCESS) - mtl->setUniform("material.alpha", std::max(alpha, 1.0f)); - - ref_bank.addAsset(bank_name, mtl); - return ref_bank.getUID(AssetPath::WithTypePrefix(bank_name)); -} - -AssetUID ModelLoader::extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type) { - AssetUID tex_id = 0; - aiString texture_file; - if (material->Get(AI_MATKEY_TEXTURE(type, 0), texture_file) == aiReturn_SUCCESS) { - if (auto texture = scene->GetEmbeddedTexture(texture_file.C_Str())) { - unsigned char *data = reinterpret_cast(texture->pcData); - void *data2 = nullptr; - int width = texture->mWidth; - int height = texture->mHeight; - int channels = 0; - if (height == 0) { - //Compressed memory, use stbi to load - data2 = stbi_load_from_memory(data, texture->mWidth, &width, &height, &channels, 4); - } else { - data2 = data; - } - auto texture_ice = m_graphics_factory->createTexture2D(data2, width, height, TextureFormat::RGBA); - if (tex_id = ref_bank.getUID(AssetPath::WithTypePrefix(tex_path)); tex_id != 0) { - ref_bank.removeAsset(AssetPath::WithTypePrefix(tex_path)); - ref_bank.addAssetWithSpecificUID(AssetPath::WithTypePrefix(tex_path), texture_ice, tex_id); - } else { - ref_bank.addAsset(tex_path, texture_ice); - tex_id = ref_bank.getUID(AssetPath::WithTypePrefix(tex_path)); - } - } else { - //regular file, check if it exists and read it - //TODO :) - } - } - return tex_id; -} - -void extractBoneWeightForVertices(const aiMesh *mesh, const aiScene *scene, MeshData &data) { - unsigned int numBones = mesh->mNumBones > MAX_BONES ? MAX_BONES : mesh->mNumBones; - - for (unsigned int boneIndex = 0; boneIndex < numBones; ++boneIndex) { - int boneID = boneIndex; - std::string boneName = mesh->mBones[boneIndex]->mName.C_Str(); - - // Get all vertex weights for current bone - aiVertexWeight *weights = mesh->mBones[boneIndex]->mWeights; - unsigned int numWeights = mesh->mBones[boneIndex]->mNumWeights; - - // For each weight at vertex x for current bone - for (int weightIndex = 0; weightIndex < numWeights; ++weightIndex) { - unsigned int vertexId = weights[weightIndex].mVertexId; - float weight = weights[weightIndex].mWeight; - - // Update four most influential bones - for (int i = 0; i < 4; ++i) { - if (data.boneIDs[vertexId][i] < 0) { - data.boneWeights[vertexId][i] = weight; - data.boneIDs[vertexId][i] = boneID; - break; - } - } - } - } -} - -Eigen::Vector4f ModelLoader::colorToVec(aiColor4D *color) { - Eigen::Vector4f v; - v.x() = color->r; - v.y() = color->g; - v.z() = color->b; - v.w() = color->a; - return v; -} - -Eigen::Matrix4f ModelLoader::aiMat4ToEigen(const aiMatrix4x4 &m) { - Eigen::Matrix4f out; - - out(0, 0) = m.a1; - out(0, 1) = m.a2; - out(0, 2) = m.a3; - out(0, 3) = m.a4; - out(1, 0) = m.b1; - out(1, 1) = m.b2; - out(1, 2) = m.b3; - out(1, 3) = m.b4; - out(2, 0) = m.c1; - out(2, 1) = m.c2; - out(2, 2) = m.c3; - out(2, 3) = m.c4; - out(3, 0) = m.d1; - out(3, 1) = m.d2; - out(3, 2) = m.d3; - out(3, 3) = m.d4; - - return out; -} - -} // namespace ICE +// +// Created by Thomas Ibanez on 31.07.21. +// + +#include "ModelLoader.h" + +#include +#include +#include +#include +#include + +#include +#include + +namespace ICE { +std::shared_ptr ModelLoader::load(const std::vector &file) { + Assimp::Importer importer; + + const aiScene *scene = importer.ReadFile(file[0].string(), + aiProcess_FlipUVs | aiProcess_ValidateDataStructure | aiProcess_SortByPType | aiProcess_GenSmoothNormals + | aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_LimitBoneWeights); + + std::vector> meshes; + std::vector materials; + std::vector nodes; + Model::Skeleton skeleton; + skeleton.globalInverseTransform = aiMat4ToEigen(scene->mRootNode->mTransformation).inverse(); + for (int m = 0; m < scene->mNumMeshes; m++) { + auto mesh = scene->mMeshes[m]; + auto material = scene->mMaterials[mesh->mMaterialIndex]; + auto model_name = file[0].filename().stem().string(); + meshes.push_back(extractMesh(mesh, model_name, scene, skeleton)); + materials.push_back(extractMaterial(material, model_name, scene)); + meshes.back()->setSources(file); + } + processNode(scene->mRootNode, nodes); + auto model = std::make_shared(nodes, meshes, materials); + + if (scene->HasAnimations()) { + auto animations = extractAnimations(scene, skeleton); + model->setAnimations(animations); + model->setSkeleton(skeleton); + } + model->setSources(file); + return model; +} + +int ModelLoader::processNode(const aiNode *ainode, std::vector &nodes) { + Model::Node node; + node.name = ainode->mName.C_Str(); + // compute local transform (relative to parent) + aiMatrix4x4 local = ainode->mTransformation; + node.localTransform = aiMat4ToEigen(local); + + for (unsigned int i = 0; i < ainode->mNumMeshes; ++i) { + unsigned int mesh_idx = ainode->mMeshes[i]; + node.meshIndices.push_back(mesh_idx); + } + auto insert_pos = nodes.size(); + nodes.push_back(node); + + for (unsigned int c = 0; c < ainode->mNumChildren; ++c) { + const aiNode *child = ainode->mChildren[c]; + int child_pos = processNode(child, nodes); + nodes.at(insert_pos).children.push_back(child_pos); + } + return insert_pos; +} + +std::shared_ptr ModelLoader::extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene, Model::Skeleton &skeleton) { + MeshData data; + + for (int i = 0; i < mesh->mNumVertices; i++) { + auto v = mesh->mVertices[i]; + auto n = mesh->HasNormals() ? mesh->mNormals[i] : aiVector3D{0, 0, 0}; + auto t = mesh->HasTangentsAndBitangents() ? mesh->mTangents[i] : aiVector3D{0, 0, 0}; + auto b = mesh->HasTangentsAndBitangents() ? mesh->mBitangents[i] : aiVector3D{0, 0, 0}; + Eigen::Vector2f uv(0, 0); + if (mesh->mTextureCoords[0] != nullptr) { + auto uv_file = mesh->mTextureCoords[0][i]; + uv.x() = uv_file.x; + uv.y() = uv_file.y; + } + data.vertices.emplace_back(v.x, v.y, v.z); + data.normals.emplace_back(n.x, n.y, n.z); + data.uvCoords.push_back(uv); + data.tangents.emplace_back(t.x, t.y, t.z); + data.bitangents.emplace_back(b.x, b.y, b.z); + data.boneIDs.emplace_back(Eigen::Vector4i::Constant(-1)); + data.boneWeights.emplace_back(Eigen::Vector4f::Zero()); + } + for (int i = 0; i < mesh->mNumFaces; i++) { + auto f = mesh->mFaces[i]; + assert(f.mNumIndices == 3); + data.indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); + } + + if (mesh->HasBones()) { + extractBoneData(mesh, scene, data, skeleton); + } + + auto mesh_ = std::make_shared(data); + + auto vertexArray = graphics_factory->createVertexArray(); + + auto vertexBuffer = graphics_factory->createVertexBuffer(); + auto normalsBuffer = graphics_factory->createVertexBuffer(); + auto uvBuffer = graphics_factory->createVertexBuffer(); + auto tangentBuffer = graphics_factory->createVertexBuffer(); + auto biTangentBuffer = graphics_factory->createVertexBuffer(); + auto boneIDBuffer = graphics_factory->createVertexBuffer(); + auto boneWeightBuffer = graphics_factory->createVertexBuffer(); + auto indexBuffer = graphics_factory->createIndexBuffer(); + + vertexBuffer->putData(BufferUtils::CreateFloatBuffer(data.vertices), 3 * data.vertices.size() * sizeof(float)); + normalsBuffer->putData(BufferUtils::CreateFloatBuffer(data.normals), 3 * data.normals.size() * sizeof(float)); + tangentBuffer->putData(BufferUtils::CreateFloatBuffer(data.tangents), 3 * data.tangents.size() * sizeof(float)); + biTangentBuffer->putData(BufferUtils::CreateFloatBuffer(data.bitangents), 3 * data.bitangents.size() * sizeof(float)); + boneIDBuffer->putData(BufferUtils::CreateIntBuffer(data.boneIDs), 4 * data.boneIDs.size() * sizeof(int)); + boneWeightBuffer->putData(BufferUtils::CreateFloatBuffer(data.boneWeights), 4 * data.boneWeights.size() * sizeof(float)); + uvBuffer->putData(BufferUtils::CreateFloatBuffer(data.uvCoords), 2 * data.uvCoords.size() * sizeof(float)); + indexBuffer->putData(BufferUtils::CreateIntBuffer(data.indices), 3 * data.indices.size() * sizeof(int)); + + vertexArray->pushVertexBuffer(vertexBuffer, 0, 3); + vertexArray->pushVertexBuffer(normalsBuffer, 1, 3); + vertexArray->pushVertexBuffer(uvBuffer, 2, 2); + vertexArray->pushVertexBuffer(tangentBuffer, 3, 3); + vertexArray->pushVertexBuffer(biTangentBuffer, 4, 3); + vertexArray->pushVertexBuffer(boneIDBuffer, 5, 4); + vertexArray->pushVertexBuffer(boneWeightBuffer, 6, 4); + vertexArray->setIndexBuffer(indexBuffer); + + mesh_->setVertexArray(vertexArray); + return mesh_; +} + +AssetUID ModelLoader::extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene) { + auto mtl_name = material->GetName(); + if (mtl_name.length == 0) { + mtl_name = "DefaultMat"; + } + auto bank_name = model_name + "/" + mtl_name.C_Str(); + auto mtl = std::make_shared(); + mtl->setUniform("material.use_diffuse_map", false); + mtl->setUniform("material.use_ambient_map", false); + mtl->setUniform("material.use_specular_map", false); + mtl->setUniform("material.use_normal_map", false); + if (auto ambient_map = extractTexture(material, bank_name + "/ambient_map", scene, aiTextureType_AMBIENT); ambient_map != 0) { + mtl->setUniform("material.ambient_map", ambient_map); + mtl->setUniform("material.use_ambient_map", true); + } + if (auto diffuse_tex = extractTexture(material, bank_name + "/diffuse_map", scene, aiTextureType_DIFFUSE); diffuse_tex != 0) { + mtl->setUniform("material.diffuse_map", diffuse_tex); + mtl->setUniform("material.use_diffuse_map", true); + } + if (auto specular_tex = extractTexture(material, bank_name + "/specular_map", scene, aiTextureType_SPECULAR); specular_tex != 0) { + mtl->setUniform("material.specular_map", specular_tex); + mtl->setUniform("material.use_specular_map", true); + } + if (auto normal_tex = extractTexture(material, bank_name + "/normal_map", scene, aiTextureType_NORMALS); normal_tex != 0) { + mtl->setUniform("material.normal_map", normal_tex); + mtl->setUniform("material.use_normal_map", true); + } + + if (ref_bank.getUID(AssetPath::WithTypePrefix(bank_name)) != 0) { + return ref_bank.getUID(AssetPath::WithTypePrefix(bank_name)); + } + mtl->setShader(ref_bank.getUID(AssetPath::WithTypePrefix("phong"))); + + aiColor4D diffuse; + aiColor4D specular; + aiColor4D ambient; + ai_real alpha = 1.0; + + if (aiGetMaterialColor(material, AI_MATKEY_COLOR_DIFFUSE, &diffuse) == aiReturn_SUCCESS) + mtl->setUniform("material.albedo", colorToVec(&diffuse)); + if (aiGetMaterialColor(material, AI_MATKEY_COLOR_SPECULAR, &specular) == aiReturn_SUCCESS) + mtl->setUniform("material.specular", colorToVec(&specular)); + if (aiGetMaterialColor(material, AI_MATKEY_COLOR_AMBIENT, &ambient) == aiReturn_SUCCESS) + mtl->setUniform("material.ambient", colorToVec(&ambient)); + if (aiGetMaterialFloat(material, AI_MATKEY_SHININESS, &alpha) == aiReturn_SUCCESS) + mtl->setUniform("material.alpha", std::max(alpha, 1.0f)); + + ref_bank.addAsset(bank_name, mtl); + return ref_bank.getUID(AssetPath::WithTypePrefix(bank_name)); +} + +AssetUID ModelLoader::extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type) { + AssetUID tex_id = 0; + aiString texture_file; + if (material->Get(AI_MATKEY_TEXTURE(type, 0), texture_file) == aiReturn_SUCCESS) { + if (auto texture = scene->GetEmbeddedTexture(texture_file.C_Str())) { + unsigned char *data = reinterpret_cast(texture->pcData); + void *data2 = nullptr; + int width = texture->mWidth; + int height = texture->mHeight; + int channels = 0; + if (height == 0) { + //Compressed memory, use stbi to load + data2 = stbi_load_from_memory(data, texture->mWidth, &width, &height, &channels, 4); + } else { + data2 = data; + } + auto texture_ice = m_graphics_factory->createTexture2D(data2, width, height, TextureFormat::RGBA); + if (tex_id = ref_bank.getUID(AssetPath::WithTypePrefix(tex_path)); tex_id != 0) { + ref_bank.removeAsset(AssetPath::WithTypePrefix(tex_path)); + ref_bank.addAssetWithSpecificUID(AssetPath::WithTypePrefix(tex_path), texture_ice, tex_id); + } else { + ref_bank.addAsset(tex_path, texture_ice); + tex_id = ref_bank.getUID(AssetPath::WithTypePrefix(tex_path)); + } + } else { + //regular file, check if it exists and read it + //TODO :) + } + } + return tex_id; +} + +void ModelLoader::extractBoneData(const aiMesh *mesh, const aiScene *scene, MeshData &data, Model::Skeleton &skeleton) { + for (unsigned int boneIndex = 0; boneIndex < mesh->mNumBones; ++boneIndex) { + std::string boneName = mesh->mBones[boneIndex]->mName.C_Str(); + int boneID = -1; + // If the bone is new (hasn't been added by a previous mesh) + if (!skeleton.boneMapping.contains(boneName)) { + boneID = skeleton.boneMapping.size(); + skeleton.boneMapping[boneName] = boneID; + Model::BoneInfo newBoneInfo = {.offsetMatrix = aiMat4ToEigen(mesh->mBones[boneIndex]->mOffsetMatrix), + .finalTransformation = Eigen::Matrix4f::Identity()}; + skeleton.bones.push_back(newBoneInfo); + } else { + //Bone Already Exists + boneID = skeleton.boneMapping.at(boneName); + } + + aiVertexWeight *weights = mesh->mBones[boneIndex]->mWeights; + unsigned int numWeights = mesh->mBones[boneIndex]->mNumWeights; + + for (int weightIndex = 0; weightIndex < numWeights; ++weightIndex) { + unsigned int vertexId = weights[weightIndex].mVertexId; + float weight = weights[weightIndex].mWeight; + + for (int i = 0; i < 4; ++i) { + if (data.boneIDs[vertexId][i] < 0) { + data.boneWeights[vertexId][i] = weight; + data.boneIDs[vertexId][i] = boneID; + } + } + } + } +} + +std::unordered_map ModelLoader::extractAnimations(const aiScene *scene, Model::Skeleton &skeleton) { + std::unordered_map out; + for (unsigned int i = 0; i < scene->mNumAnimations; i++) { + aiAnimation *anim = scene->mAnimations[i]; + + Animation a; + a.duration = anim->mDuration; + a.ticksPerSecond = anim->mTicksPerSecond != 0 ? anim->mTicksPerSecond : 25.0f; + + for (unsigned int c = 0; c < anim->mNumChannels; c++) { + aiNodeAnim *channel = anim->mChannels[c]; + std::string boneName = channel->mNodeName.C_Str(); + + BoneAnimation track; + + for (int k = 0; k < channel->mNumPositionKeys; k++) { + track.positions.push_back({(float) channel->mPositionKeys[k].mTime, aiVec3ToEigen(channel->mPositionKeys[k].mValue)}); + } + + for (int k = 0; k < channel->mNumRotationKeys; k++) { + track.rotations.push_back({(float) channel->mRotationKeys[k].mTime, aiQuatToEigen(channel->mRotationKeys[k].mValue)}); + } + + for (int k = 0; k < channel->mNumScalingKeys; k++) { + track.scales.push_back({(float) channel->mScalingKeys[k].mTime, aiVec3ToEigen(channel->mScalingKeys[k].mValue)}); + } + + a.tracks[boneName] = std::move(track); + } + + out.try_emplace(anim->mName.C_Str(), std::move(a)); + } + return out; +} + +Eigen::Vector4f ModelLoader::colorToVec(aiColor4D *color) { + Eigen::Vector4f v; + v.x() = color->r; + v.y() = color->g; + v.z() = color->b; + v.w() = color->a; + return v; +} + +Eigen::Matrix4f ModelLoader::aiMat4ToEigen(const aiMatrix4x4 &m) { + Eigen::Matrix4f out; + + out(0, 0) = m.a1; + out(0, 1) = m.a2; + out(0, 2) = m.a3; + out(0, 3) = m.a4; + out(1, 0) = m.b1; + out(1, 1) = m.b2; + out(1, 2) = m.b3; + out(1, 3) = m.b4; + out(2, 0) = m.c1; + out(2, 1) = m.c2; + out(2, 2) = m.c3; + out(2, 3) = m.c4; + out(3, 0) = m.d1; + out(3, 1) = m.d2; + out(3, 2) = m.d3; + out(3, 3) = m.d4; + + return out; +} + +Eigen::Vector3f ModelLoader::aiVec3ToEigen(const aiVector3D &vec) { + Eigen::Vector3f v; + v.x() = vec.x; + v.y() = vec.y; + v.z() = vec.z; + return v; +} + +Eigen::Quaternionf ModelLoader::aiQuatToEigen(const aiQuaternion &q) { + Eigen::Quaternionf quat; + quat.w() = q.w; + quat.x() = q.x; + quat.y() = q.y; + quat.z() = q.z; + return quat; +} + +} // namespace ICE diff --git a/ICE/System/CMakeLists.txt b/ICE/System/CMakeLists.txt index 932e0c79..fe990d96 100644 --- a/ICE/System/CMakeLists.txt +++ b/ICE/System/CMakeLists.txt @@ -1,23 +1,23 @@ -cmake_minimum_required(VERSION 3.19) -project(system) - -message(STATUS "Building ${PROJECT_NAME} module") - -add_library(${PROJECT_NAME} STATIC) - -target_sources(${PROJECT_NAME} PRIVATE - src/RenderSystem.cpp -) - -target_link_libraries(${PROJECT_NAME} - PUBLIC - graphics - entity -) - -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $) - -enable_testing() -#add_subdirectory(test) +cmake_minimum_required(VERSION 3.19) +project(system) + +message(STATUS "Building ${PROJECT_NAME} module") + +add_library(${PROJECT_NAME} STATIC) + +target_sources(${PROJECT_NAME} PRIVATE + src/RenderSystem.cpp + src/AnimationSystem.cpp) + +target_link_libraries(${PROJECT_NAME} + PUBLIC + graphics + entity +) + +target_include_directories(${PROJECT_NAME} PUBLIC + $ + $) + +enable_testing() +#add_subdirectory(test) diff --git a/ICE/System/include/AnimationSystem.h b/ICE/System/include/AnimationSystem.h new file mode 100644 index 00000000..ed4cb0cb --- /dev/null +++ b/ICE/System/include/AnimationSystem.h @@ -0,0 +1,39 @@ +#pragma once + +#include + +#include "Animation.h" +#include "AnimationComponent.h" +#include "System.h" + +namespace ICE { +class AnimationSystem : public System { + public: + void update(double delta) override; + + private: + template + size_t findKeyIndex(double animationTime, const std::vector& keys) { + for (size_t i = 0; i < keys.size() - 1; ++i) { + if (animationTime < keys[i + 1].timeStamp) { + return i; + } + } + return keys.size() - 1; + } + + void updateSkeleton(const std::shared_ptr& model, double time, const Animation& anim); + + Eigen::Matrix4f interpolatePosition(double timeInTicks, const BoneAnimation& track); + + Eigen::Matrix4f interpolateScale(double timeInTicks, const BoneAnimation& track); + + Eigen::Matrix4f interpolateRotation(double time, const BoneAnimation& track); + + void applyTransforms(Model::Node* node, const Eigen::Matrix4f& parentTransform, Model::Skeleton& skeleton, double time, const Animation& anim, + std::vector& allModelNodes); + + std::shared_ptr m_registry; + std::shared_ptr m_asset_bank; +}; +} // namespace ICE diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp new file mode 100644 index 00000000..b2448af4 --- /dev/null +++ b/ICE/System/src/AnimationSystem.cpp @@ -0,0 +1,146 @@ +#include "AnimationSystem.h" + +namespace ICE { +void AnimationSystem::update(double delta) { + for (auto e : entities) { + auto anim = m_registry->getComponent(e); + auto rc = m_registry->getComponent(e); + if (!anim->playing) + continue; + + anim->currentTime += delta * anim->speed; + + auto model = m_asset_bank->getAsset(rc->model); + auto animation = model->getAnimations().at(anim->currentAnimation); + + if (anim->currentTime > animation.duration) { + if (anim->loop) { + anim->currentTime = std::fmod(anim->currentTime, animation.duration); + } else { + anim->currentTime = animation.duration; + anim->playing = false; + } + } + updateSkeleton(model, anim->currentTime, animation); + } +} + +void AnimationSystem::updateSkeleton(const std::shared_ptr& model, double time, const Animation& anim) { + auto& all_nodes = model->getNodes(); + applyTransforms(&all_nodes[0], Eigen::Matrix4f::Identity(), model->getSkeleton(), time, anim, all_nodes); +} + +Eigen::Matrix4f AnimationSystem::interpolatePosition(double timeInTicks, const BoneAnimation& track) { + if (track.positions.empty()) { + return Eigen::Matrix4f::Identity(); + } + if (track.positions.size() == 1) { + Eigen::Matrix4f positionMatrix = Eigen::Matrix4f::Identity(); + positionMatrix.block<3, 1>(0, 3) = track.positions[0].position; + return positionMatrix; + } + + size_t startIndex = findKeyIndex(timeInTicks, track.positions); + size_t nextIndex = startIndex + 1; + + const auto& startKey = track.positions[startIndex]; + const auto& nextKey = track.positions[nextIndex]; + + double totalTime = nextKey.timeStamp - startKey.timeStamp; + if (totalTime == 0.0) + return Eigen::Matrix4f::Identity(); + + double currentTime = timeInTicks - startKey.timeStamp; + float factor = (float) (currentTime / totalTime); + + Eigen::Vector3f interpolatedPosition = startKey.position + factor * (nextKey.position - startKey.position); + + Eigen::Matrix4f positionMatrix = Eigen::Matrix4f::Identity(); + positionMatrix.block<3, 1>(0, 3) = interpolatedPosition; + + return positionMatrix; +} + +Eigen::Matrix4f AnimationSystem::interpolateScale(double timeInTicks, const BoneAnimation& track) { + if (track.scales.empty()) { + return Eigen::Matrix4f::Identity(); + } + if (track.scales.size() == 1) { + Eigen::Matrix4f scaleMatrix = Eigen::Matrix4f::Identity(); + scaleMatrix.block<3, 3>(0, 0) = + Eigen::Array3f(track.scales[0].scale.x(), track.scales[0].scale.y(), track.scales[0].scale.z()).matrix().asDiagonal(); + return scaleMatrix; + } + + size_t startIndex = findKeyIndex(timeInTicks, track.scales); + size_t nextIndex = startIndex + 1; + + const auto& startKey = track.scales[startIndex]; + const auto& nextKey = track.scales[nextIndex]; + + double totalTime = nextKey.timeStamp - startKey.timeStamp; + if (totalTime == 0.0) + return Eigen::Matrix4f::Identity(); + + double currentTime = timeInTicks - startKey.timeStamp; + float factor = (float) (currentTime / totalTime); + + Eigen::Vector3f interpolatedScale = startKey.scale + factor * (nextKey.scale - startKey.scale); + + Eigen::Matrix4f scaleMatrix = Eigen::Matrix4f::Identity(); + scaleMatrix.block<3, 3>(0, 0) = interpolatedScale.asDiagonal(); + return scaleMatrix; +} + +Eigen::Matrix4f AnimationSystem::interpolateRotation(double time, const BoneAnimation& track) { + if (track.rotations.size() == 1) { + return track.rotations[0].rotation.toRotationMatrix(); + } + + size_t startIdx = findKeyIndex(time, track.rotations); + size_t nextIdx = startIdx + 1; + + const auto& startKey = track.rotations[startIdx]; + const auto& nextKey = track.rotations[nextIdx]; + + double totalTime = nextKey.timeStamp - startKey.timeStamp; + double factor = (time - startKey.timeStamp) / totalTime; + + Eigen::Quaternionf finalQuat = startKey.rotation.slerp((float) factor, nextKey.rotation); + finalQuat.normalize(); + + return finalQuat.toRotationMatrix(); +} + +void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& parentTransform, Model::Skeleton& skeleton, double time, + const Animation& anim, std::vector& allModelNodes) { + Eigen::Matrix4f nodeLocalTransform = node->localTransform; + std::string nodeName = node->name; + + if (anim.tracks.contains(nodeName)) { + const BoneAnimation& track = anim.tracks.at(nodeName); + + Eigen::Matrix4f posMatrix = interpolatePosition(time, track); + Eigen::Matrix4f rotMatrix = interpolateRotation(time, track); + Eigen::Matrix4f scaleMatrix = interpolateScale(time, track); + + nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; + } + + Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; + node->globalTransform = globalTransform; + + if (skeleton.boneMapping.contains(nodeName)) { + int boneID = skeleton.boneMapping.at(nodeName); + + Eigen::Matrix4f finalMatrix = skeleton.globalInverseTransform * globalTransform * skeleton.bones[boneID].offsetMatrix; + + skeleton.bones[boneID].finalTransformation = finalMatrix; + } + + for (int childIndex : node->children) { + applyTransforms(&allModelNodes[childIndex], globalTransform, skeleton, time, anim, allModelNodes); + } +} + +} // namespace ICE \ No newline at end of file From 4f913f6d75d1092d28e10d2251139bd02cf9d077 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 12 Dec 2025 15:54:29 +0100 Subject: [PATCH 07/21] Fix eigen error in animationsystem --- ICE/System/src/AnimationSystem.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index b2448af4..02d3cab7 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -67,8 +67,7 @@ Eigen::Matrix4f AnimationSystem::interpolateScale(double timeInTicks, const Bone } if (track.scales.size() == 1) { Eigen::Matrix4f scaleMatrix = Eigen::Matrix4f::Identity(); - scaleMatrix.block<3, 3>(0, 0) = - Eigen::Array3f(track.scales[0].scale.x(), track.scales[0].scale.y(), track.scales[0].scale.z()).matrix().asDiagonal(); + scaleMatrix.block<3, 3>(0, 0) = track.scales[0].scale.asDiagonal(); return scaleMatrix; } @@ -94,7 +93,10 @@ Eigen::Matrix4f AnimationSystem::interpolateScale(double timeInTicks, const Bone Eigen::Matrix4f AnimationSystem::interpolateRotation(double time, const BoneAnimation& track) { if (track.rotations.size() == 1) { - return track.rotations[0].rotation.toRotationMatrix(); + Eigen::Matrix4f rotation_matrix = Eigen::Matrix4f::Identity(); + rotation_matrix.block<3, 3>(0, 0) = track.rotations[0].rotation.toRotationMatrix(); + + return rotation_matrix; } size_t startIdx = findKeyIndex(time, track.rotations); @@ -109,7 +111,10 @@ Eigen::Matrix4f AnimationSystem::interpolateRotation(double time, const BoneAnim Eigen::Quaternionf finalQuat = startKey.rotation.slerp((float) factor, nextKey.rotation); finalQuat.normalize(); - return finalQuat.toRotationMatrix(); + Eigen::Matrix4f rotation_matrix = Eigen::Matrix4f::Identity(); + rotation_matrix.block<3, 3>(0, 0) = finalQuat.toRotationMatrix(); + + return rotation_matrix; } void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& parentTransform, Model::Skeleton& skeleton, double time, From f27ba25845328476dcc248b7b9baf177da2dfdd6 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 12 Dec 2025 16:12:26 +0100 Subject: [PATCH 08/21] Start working on testbench for anims --- ICE/IO/src/Project.cpp | 2 - ICEFIELD/Assets/cube.obj | 44 ---------- ICEFIELD/Assets/solid.fs | 9 -- ICEFIELD/Assets/solid.vs | 13 --- ICEFIELD/CMakeLists.txt | 35 ++++---- ICEFIELD/ImportAssets/Adventurer.glb | Bin 0 -> 1944116 bytes ICEFIELD/ImportAssets/glock.glb | Bin 0 -> 305512 bytes ICEFIELD/icefield.cpp | 127 +++++++++++++-------------- 8 files changed, 77 insertions(+), 153 deletions(-) delete mode 100644 ICEFIELD/Assets/cube.obj delete mode 100644 ICEFIELD/Assets/solid.fs delete mode 100644 ICEFIELD/Assets/solid.vs create mode 100644 ICEFIELD/ImportAssets/Adventurer.glb create mode 100644 ICEFIELD/ImportAssets/glock.glb diff --git a/ICE/IO/src/Project.cpp b/ICE/IO/src/Project.cpp index 7cb537e7..e88c2034 100644 --- a/ICE/IO/src/Project.cpp +++ b/ICE/IO/src/Project.cpp @@ -47,8 +47,6 @@ bool Project::CreateDirectories() { assetBank->addAsset("lastpass", {m_shaders_directory / "lastpass.vs", m_shaders_directory / "lastpass.fs"}); assetBank->addAsset("__ice__picking_shader", {m_shaders_directory / "picking.vs", m_shaders_directory / "picking.fs"}); - assetBank->addAsset("skybox", {m_cubemaps_directory / "skybox.png"}); - assetBank->addAsset("base_mat", {m_materials_directory / "base_mat.icm"}); assetBank->addAsset("cube", {m_meshes_directory / "cube.obj"}); diff --git a/ICEFIELD/Assets/cube.obj b/ICEFIELD/Assets/cube.obj deleted file mode 100644 index ce1ad5a0..00000000 --- a/ICEFIELD/Assets/cube.obj +++ /dev/null @@ -1,44 +0,0 @@ -# Blender v2.82 (sub 7) OBJ File: '' -# www.blender.org -o Cube -v 0.500097 0.500097 -0.500097 -v 0.500097 -0.500097 -0.500097 -v 0.500097 0.500097 0.500097 -v 0.500097 -0.500097 0.500097 -v -0.500097 0.500097 -0.500097 -v -0.500097 -0.500097 -0.500097 -v -0.500097 0.500097 0.500097 -v -0.500097 -0.500097 0.500097 -vt 0.875000 0.500000 -vt 0.625000 0.750000 -vt 0.625000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.750000 -vt 0.625000 0.000000 -vt 0.375000 0.250000 -vt 0.375000 0.000000 -vt 0.375000 0.500000 -vt 0.125000 0.750000 -vt 0.125000 0.500000 -vt 0.625000 0.250000 -vt 0.875000 0.750000 -vt 0.625000 1.000000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -s off -f 5/1/1 3/2/1 1/3/1 -f 3/2/2 8/4/2 4/5/2 -f 7/6/3 6/7/3 8/8/3 -f 2/9/4 8/10/4 6/11/4 -f 1/3/5 4/5/5 2/9/5 -f 5/12/6 2/9/6 6/7/6 -f 5/1/1 7/13/1 3/2/1 -f 3/2/2 7/14/2 8/4/2 -f 7/6/3 5/12/3 6/7/3 -f 2/9/4 4/5/4 8/10/4 -f 1/3/5 3/2/5 4/5/5 -f 5/12/6 1/3/6 2/9/6 diff --git a/ICEFIELD/Assets/solid.fs b/ICEFIELD/Assets/solid.fs deleted file mode 100644 index ffdd27a1..00000000 --- a/ICEFIELD/Assets/solid.fs +++ /dev/null @@ -1,9 +0,0 @@ -#version 420 core - -out vec4 frag_color; - -uniform vec3 uAlbedo; - -void main() { - frag_color = vec4(uAlbedo, 1.0); -} \ No newline at end of file diff --git a/ICEFIELD/Assets/solid.vs b/ICEFIELD/Assets/solid.vs deleted file mode 100644 index 3da3a435..00000000 --- a/ICEFIELD/Assets/solid.vs +++ /dev/null @@ -1,13 +0,0 @@ -#version 420 core - -layout (location = 0) in vec3 vertex; -layout (location = 1) in vec3 normal; -layout (location = 2) in vec2 tex_coords; - -uniform mat4 projection; -uniform mat4 view; -uniform mat4 model; - -void main() { - gl_Position = projection * view * model * vec4(vertex, 1.0); -} \ No newline at end of file diff --git a/ICEFIELD/CMakeLists.txt b/ICEFIELD/CMakeLists.txt index d1c27fc5..dc48c186 100644 --- a/ICEFIELD/CMakeLists.txt +++ b/ICEFIELD/CMakeLists.txt @@ -1,17 +1,18 @@ -cmake_minimum_required(VERSION 3.19) -project(ICEFIELD) - -message(STATUS "Building ${PROJECT_NAME}") - -add_executable(${PROJECT_NAME} - icefield.cpp - ${GL3W_SRC} -) - -target_include_directories(${PROJECT_NAME} PUBLIC - $ - ${CMAKE_SOURCE_DIR} -) - -target_link_libraries(${PROJECT_NAME} PUBLIC ICE glfw) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/Assets DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) \ No newline at end of file +cmake_minimum_required(VERSION 3.19) +project(ICEFIELD) + +message(STATUS "Building ${PROJECT_NAME}") + +add_executable(${PROJECT_NAME} + icefield.cpp + ${GL3W_SRC} +) + +target_include_directories(${PROJECT_NAME} PUBLIC + $ + ${CMAKE_SOURCE_DIR} +) + +target_link_libraries(${PROJECT_NAME} PUBLIC ICE glfw) +file(COPY ${ICE_ROOT_SOURCE_DIR}/Assets DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/ImportAssets DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/ICEFIELD/ImportAssets/Adventurer.glb b/ICEFIELD/ImportAssets/Adventurer.glb new file mode 100644 index 0000000000000000000000000000000000000000..883c51939efbe9e57f481941d8e0d158e7f811f7 GIT binary patch literal 1944116 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%0Ac=okjw+T(1c#Vi^hXqnT_;*n6R(o@1MVN96`W$R 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μc)kvyGrN#oF?-Y{L_4!xvt=x0)& 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

)*a*HTVA)$ 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�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 D|H~Vl literal 0 HcmV?d00001 diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index a2d3851b..2ead95e6 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -1,69 +1,60 @@ -#include -#include -#include -#include -#include - -#include - -using namespace ICE; - -int main(void) { - ICEEngine engine; - WindowFactory win_factory; - auto window = win_factory.createWindow(WindowBackend::GLFW, 1280, 720, "IceField"); - auto g_factory = std::make_shared(); - - engine.initialize(g_factory, window); - - auto project = std::make_shared(".", "IceField"); - project->addScene(Scene("TestScene")); - auto scene = project->getScenes().front(); - project->setCurrentScene(scene); - - engine.setProject(project); - - engine.getAssetBank()->addAsset("cube", {"Assets/cube.obj"}); - - engine.getAssetBank()->addAsset("solid", {"Assets/solid.vs", "Assets/solid.fs"}); - auto shader_id = engine.getAssetBank()->getUID(std::string("Shaders/solid")); - - auto mat = std::make_shared(); - mat->setShader(shader_id); - mat->setUniform("uAlbedo", Eigen::Vector3f(0.2, 0.5, 1)); - engine.getAssetBank()->addAsset("mat", mat); - - auto mesh_id = engine.getAssetBank()->getUID(std::string("Models/cube")); - auto material_id = engine.getAssetBank()->getUID(std::string("Materials/mat")); - - auto entity = scene->createEntity(); - scene->getRegistry()->addComponent(entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(1, 1, 1))); - scene->getRegistry()->addComponent(entity, RenderComponent(mesh_id)); - - auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); - camera->backward(2); - camera->up(1); - camera->pitch(-30); - scene->getRegistry()->getSystem()->setCamera(camera); - - int i = 0; - while (!window->shouldClose()) { - window->pollEvents(); - - engine.step(); - - mat->setUniform("uAlbedo", Eigen::Vector3f(abs(sin(i / 100.0)), 0.5, 1)); - scene->getRegistry()->getComponent(entity)->rotation().y() = i; - - //Render system duty - int display_w, display_h; - window->getFramebufferSize(&display_w, &display_h); - engine.getApi()->setViewport(0, 0, display_w, display_h); - window->swapBuffers(); - i++; - } - - MaterialExporter().writeToJson("base_mat.icm", *mat); - - return 0; +#include +#include +#include +#include +#include +#include + +using namespace ICE; + +int main(void) { + std::filesystem::remove_all("IceField_project"); + ICEEngine engine; + WindowFactory win_factory; + auto window = win_factory.createWindow(WindowBackend::GLFW, 1280, 720, "IceField"); + auto g_factory = std::make_shared(); + + engine.initialize(g_factory, window); + + auto project = std::make_shared(".", "IceField_project"); + project->CreateDirectories(); + project->addScene(Scene("TestScene")); + auto scene = project->getScenes().front(); + project->setCurrentScene(scene); + + engine.setProject(project); + + engine.getProject()->copyAssetFile("Models", "glock", "ImportAssets/glock.glb"); + engine.getAssetBank()->addAsset("glock", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "glock.glb"}); + + auto mesh_id = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("cube")); + + auto entity = scene->createEntity(); + scene->getRegistry()->addComponent( + entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(1, 1, 1))); + scene->getRegistry()->addComponent(entity, RenderComponent(mesh_id)); + + auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); + camera->backward(2); + camera->up(1); + camera->pitch(-30); + scene->getRegistry()->getSystem()->setCamera(camera); + + int i = 0; + while (!window->shouldClose()) { + window->pollEvents(); + + engine.step(); + + scene->getRegistry()->getComponent(entity)->rotation().y() = i; + + //Render system duty + int display_w, display_h; + window->getFramebufferSize(&display_w, &display_h); + engine.getApi()->setViewport(0, 0, display_w, display_h); + window->swapBuffers(); + i++; + } + + return 0; } \ No newline at end of file From 2003ea2bde7bb615111bb49f9ed83d35054f337f Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 12 Dec 2025 18:29:37 +0100 Subject: [PATCH 09/21] First test of animation --- ICE/Assets/test/AssetBankTest.cpp | 128 +++++----- ICE/Components/include/Component.h | 344 +++++++++++++-------------- ICE/Core/include/ICEEngine.h | 134 ++++++----- ICE/Core/src/ICEEngine.cpp | 199 ++++++++-------- ICE/GraphicsAPI/None/NoneGraphics.h | 4 +- ICE/System/include/AnimationSystem.h | 8 + ICE/System/include/Registry.h | 233 +++++++++--------- ICE/System/include/RenderSystem.h | 84 ++++--- ICE/System/include/System.h | 195 +++++++-------- ICE/System/src/AnimationSystem.cpp | 4 + ICEFIELD/icefield.cpp | 15 +- 11 files changed, 683 insertions(+), 665 deletions(-) diff --git a/ICE/Assets/test/AssetBankTest.cpp b/ICE/Assets/test/AssetBankTest.cpp index 28c789e2..34ff34fd 100644 --- a/ICE/Assets/test/AssetBankTest.cpp +++ b/ICE/Assets/test/AssetBankTest.cpp @@ -1,65 +1,63 @@ -// -// Created by Thomas Ibanez on 24.02.21. -// -#define STB_IMAGE_IMPLEMENTATION -#include - -#include "AssetBank.h" -#include "NoneGraphicsFactory.h" - -using namespace ICE; - - -TEST(AssetBankTest, AddedAssetsCanBeRetrieved) { - NoneGraphicsFactory g_fac; - AssetBank ab(std::make_shared(g_fac)); - auto mtl = std::make_shared(); - ab.addAsset("a_ice_test_mtl", mtl); - ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), mtl); - ASSERT_EQ(ab.getAsset("lol"), nullptr); - - auto dummy_vert = std::vector(); - dummy_vert.emplace_back(1, 1, 1); - auto mesh = std::make_shared(dummy_vert, std::vector(), std::vector(), std::vector()); - ab.addAsset("a_ice_test_mesh", mesh); - ASSERT_EQ(ab.getAsset("a_ice_test_mesh"), mesh); - ASSERT_EQ(ab.getAsset("lel"), nullptr); - - auto tex = g_fac.createTexture2D("Not needed for this"); - ab.addAsset("a_ice_test_tex", tex); - ASSERT_EQ(ab.getAsset("a_ice_test_tex"), tex); - ASSERT_EQ(ab.getAsset("lil"), nullptr); - - auto shader = g_fac.createShader("", ""); - ab.addAsset("a_ice_test_shader", shader); - ASSERT_EQ(ab.getAsset("a_ice_test_shader"), shader); - ASSERT_EQ(ab.getAsset("lul"), nullptr); -} - -TEST(AssetBankTest, AssetsCanBeRenamed) { - AssetBank ab(std::make_shared()); - auto mtl = std::make_shared(); - ab.addAsset("a_ice_test_mtl", mtl); - ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), mtl); - ASSERT_EQ(ab.getAsset("lol"), nullptr); - - ab.renameAsset(AssetPath("Materials/a_ice_test_mtl"), AssetPath("Materials/lol")); - ASSERT_EQ(ab.getAsset("lol"), mtl); - ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), nullptr); -} - -TEST(AssetBankTest, GetNameReturnsCorrectName) { - AssetBank ab(std::make_shared()); - auto mtl = std::make_shared(); - ab.addAsset("a_ice_test_mtl", mtl); - ASSERT_EQ(AssetPath("Materials/a_ice_test_mtl"), ab.getName(ab.getUID(AssetPath("Materials/a_ice_test_mtl")))); - ASSERT_EQ(AssetPath(""), ab.getName(0)); -} - -TEST(AssetBankTest, NameInUseBehavesCorrectly) { - AssetBank ab(std::make_shared()); - auto mtl = std::make_shared(); - ab.addAsset("a_ice_test_mtl", mtl); - ASSERT_TRUE(ab.nameInUse(AssetPath::WithTypePrefix("a_ice_test_mtl"))); - ASSERT_FALSE(ab.nameInUse(AssetPath::WithTypePrefix("hey"))); -} +// +// Created by Thomas Ibanez on 24.02.21. +// +#define STB_IMAGE_IMPLEMENTATION +#include + +#include "AssetBank.h" +#include "NoneGraphicsFactory.h" + +using namespace ICE; + + +TEST(AssetBankTest, AddedAssetsCanBeRetrieved) { + NoneGraphicsFactory g_fac; + AssetBank ab(std::make_shared(g_fac)); + auto mtl = std::make_shared(); + ab.addAsset("a_ice_test_mtl", mtl); + ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), mtl); + ASSERT_EQ(ab.getAsset("lol"), nullptr); + + auto mesh = std::make_shared(MeshData{}); + ab.addAsset("a_ice_test_mesh", mesh); + ASSERT_EQ(ab.getAsset("a_ice_test_mesh"), mesh); + ASSERT_EQ(ab.getAsset("lel"), nullptr); + + auto tex = g_fac.createTexture2D("Not needed for this"); + ab.addAsset("a_ice_test_tex", tex); + ASSERT_EQ(ab.getAsset("a_ice_test_tex"), tex); + ASSERT_EQ(ab.getAsset("lil"), nullptr); + + auto shader = g_fac.createShader("", ""); + ab.addAsset("a_ice_test_shader", shader); + ASSERT_EQ(ab.getAsset("a_ice_test_shader"), shader); + ASSERT_EQ(ab.getAsset("lul"), nullptr); +} + +TEST(AssetBankTest, AssetsCanBeRenamed) { + AssetBank ab(std::make_shared()); + auto mtl = std::make_shared(); + ab.addAsset("a_ice_test_mtl", mtl); + ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), mtl); + ASSERT_EQ(ab.getAsset("lol"), nullptr); + + ab.renameAsset(AssetPath("Materials/a_ice_test_mtl"), AssetPath("Materials/lol")); + ASSERT_EQ(ab.getAsset("lol"), mtl); + ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), nullptr); +} + +TEST(AssetBankTest, GetNameReturnsCorrectName) { + AssetBank ab(std::make_shared()); + auto mtl = std::make_shared(); + ab.addAsset("a_ice_test_mtl", mtl); + ASSERT_EQ(AssetPath("Materials/a_ice_test_mtl"), ab.getName(ab.getUID(AssetPath("Materials/a_ice_test_mtl")))); + ASSERT_EQ(AssetPath(""), ab.getName(0)); +} + +TEST(AssetBankTest, NameInUseBehavesCorrectly) { + AssetBank ab(std::make_shared()); + auto mtl = std::make_shared(); + ab.addAsset("a_ice_test_mtl", mtl); + ASSERT_TRUE(ab.nameInUse(AssetPath::WithTypePrefix("a_ice_test_mtl"))); + ASSERT_FALSE(ab.nameInUse(AssetPath::WithTypePrefix("hey"))); +} diff --git a/ICE/Components/include/Component.h b/ICE/Components/include/Component.h index a1bf9fac..8d916063 100644 --- a/ICE/Components/include/Component.h +++ b/ICE/Components/include/Component.h @@ -1,172 +1,172 @@ -// -// Created by Thomas Ibanez on 16.11.20. -// - -#ifndef ICE_COMPONENT_H -#define ICE_COMPONENT_H - -#include - -#include -#include -#include - -namespace ICE { - -using ComponentType = std::uint8_t; - -struct Component {}; - -class IComponentArray { - public: - virtual ~IComponentArray() = default; - virtual void entityDestroyed(Entity entity) = 0; -}; - -template -class ComponentArray : public IComponentArray { - public: - void insertData(Entity entity, T component) { - assert(entityToIndexMap.find(entity) == entityToIndexMap.end() && "Component added to same entity more than once."); - - // Put new entry at end and update the maps - size_t newIndex = size; - entityToIndexMap[entity] = newIndex; - indexToEntityMap[newIndex] = entity; - if (size < componentArray.size()) { - componentArray[newIndex] = component; - } else { - componentArray.push_back(component); - } - size++; - } - - void removeData(Entity entity) { - assert(entityToIndexMap.find(entity) != entityToIndexMap.end() && "Removing non-existent component."); - - // Copy element at end into deleted element's place to maintain density - size_t indexOfRemovedEntity = entityToIndexMap[entity]; - size_t indexOfLastElement = size - 1; - componentArray[indexOfRemovedEntity] = componentArray[indexOfLastElement]; - - // Update map to point to moved spot - Entity entityOfLastElement = indexToEntityMap[indexOfLastElement]; - entityToIndexMap[entityOfLastElement] = indexOfRemovedEntity; - indexToEntityMap[indexOfRemovedEntity] = entityOfLastElement; - - entityToIndexMap.erase(entity); - indexToEntityMap.erase(indexOfLastElement); - - size--; - } - - T* getData(Entity entity) { - assert(entityToIndexMap.find(entity) != entityToIndexMap.end() && "Retrieving non-existent component."); - - // Return a reference to the entity's component - return &(componentArray[entityToIndexMap[entity]]); - } - - void entityDestroyed(Entity entity) override { - if (entityToIndexMap.find(entity) != entityToIndexMap.end()) { - // Remove the entity's component if it existed - removeData(entity); - } - } - - private: - // The packed array of components (of generic type T), - // set to a specified maximum amount, matching the maximum number - // of entities allowed to exist simultaneously, so that each entity - // has a unique spot. - std::vector componentArray; - - // Map from an entity ID to an array index. - std::unordered_map entityToIndexMap; - - // Map from an array index to an entity ID. - std::unordered_map indexToEntityMap; - - // Total size of valid entries in the array. - size_t size; -}; - -class ComponentManager { - public: - template - void registerComponent() { - auto const& type = typeid(T); - - assert(componentTypes.find(type) == componentTypes.end() && "Registering component type more than once."); - - // Add this component type to the component type map - componentTypes.insert({type, nextComponentType}); - - // Create a ComponentArray pointer and add it to the component arrays map - componentArrays.insert({type, std::make_shared>()}); - - // Increment the value so that the next component registered will be different - ++nextComponentType; - } - - template - ComponentType getComponentType() { - auto const& type = typeid(T); - - assert(componentTypes.find(type) != componentTypes.end() && "Component not registered before use."); - - // Return this component's type - used for creating signatures - return componentTypes[type]; - } - - template - void addComponent(Entity entity, T component) { - // Add a component to the array for an entity - getComponentArray()->insertData(entity, component); - } - - template - void removeComponent(Entity entity) { - // Remove a component from the array for an entity - getComponentArray()->removeData(entity); - } - - template - T* getComponent(Entity entity) { - // Get a reference to a component from the array for an entity - return getComponentArray()->getData(entity); - } - - void entityDestroyed(Entity entity) { - // Notify each component array that an entity has been destroyed - // If it has a component for that entity, it will remove it - for (auto const& pair : componentArrays) { - auto const& component = pair.second; - - component->entityDestroyed(entity); - } - } - - private: - // Map from type string pointer to a component type - std::unordered_map componentTypes{}; - - // Map from type string pointer to a component array - std::unordered_map> componentArrays{}; - - // The component type to be assigned to the next registered component - starting at 0 - ComponentType nextComponentType{}; - - // Convenience function to get the statically casted pointer to the ComponentArray of type T. - template - std::shared_ptr> getComponentArray() { - auto const& type = typeid(T); - - assert(componentTypes.find(type) != componentTypes.end() && "Component not registered before use."); - - return std::static_pointer_cast>(componentArrays[type]); - } -}; -} // namespace ICE - -#endif //ICE_COMPONENT_H +// +// Created by Thomas Ibanez on 16.11.20. +// + +#ifndef ICE_COMPONENT_H +#define ICE_COMPONENT_H + +#include + +#include +#include +#include + +namespace ICE { + +using ComponentType = std::uint8_t; + +struct Component {}; + +class IComponentArray { + public: + virtual ~IComponentArray() = default; + virtual void entityDestroyed(Entity entity) = 0; +}; + +template +class ComponentArray : public IComponentArray { + public: + void insertData(Entity entity, T component) { + assert(entityToIndexMap.find(entity) == entityToIndexMap.end() && "Component added to same entity more than once."); + + // Put new entry at end and update the maps + size_t newIndex = size; + entityToIndexMap[entity] = newIndex; + indexToEntityMap[newIndex] = entity; + if (size < componentArray.size()) { + componentArray[newIndex] = component; + } else { + componentArray.push_back(component); + } + size++; + } + + void removeData(Entity entity) { + assert(entityToIndexMap.find(entity) != entityToIndexMap.end() && "Removing non-existent component."); + + // Copy element at end into deleted element's place to maintain density + size_t indexOfRemovedEntity = entityToIndexMap[entity]; + size_t indexOfLastElement = size - 1; + componentArray[indexOfRemovedEntity] = componentArray[indexOfLastElement]; + + // Update map to point to moved spot + Entity entityOfLastElement = indexToEntityMap[indexOfLastElement]; + entityToIndexMap[entityOfLastElement] = indexOfRemovedEntity; + indexToEntityMap[indexOfRemovedEntity] = entityOfLastElement; + + entityToIndexMap.erase(entity); + indexToEntityMap.erase(indexOfLastElement); + + size--; + } + + T* getData(Entity entity) { + assert(entityToIndexMap.find(entity) != entityToIndexMap.end() && "Retrieving non-existent component."); + + // Return a reference to the entity's component + return &(componentArray[entityToIndexMap[entity]]); + } + + void entityDestroyed(Entity entity) override { + if (entityToIndexMap.find(entity) != entityToIndexMap.end()) { + // Remove the entity's component if it existed + removeData(entity); + } + } + + private: + // The packed array of components (of generic type T), + // set to a specified maximum amount, matching the maximum number + // of entities allowed to exist simultaneously, so that each entity + // has a unique spot. + std::vector componentArray; + + // Map from an entity ID to an array index. + std::unordered_map entityToIndexMap; + + // Map from an array index to an entity ID. + std::unordered_map indexToEntityMap; + + // Total size of valid entries in the array. + size_t size; +}; + +class ComponentManager { + public: + template + void registerComponent() { + auto const& type = typeid(T); + + assert(componentTypes.find(type) == componentTypes.end() && "Registering component type more than once."); + + // Add this component type to the component type map + componentTypes.insert({type, nextComponentType}); + + // Create a ComponentArray pointer and add it to the component arrays map + componentArrays.insert({type, std::make_shared>()}); + + // Increment the value so that the next component registered will be different + ++nextComponentType; + } + + template + ComponentType getComponentType() const { + auto const& type = typeid(T); + + assert(componentTypes.find(type) != componentTypes.end() && "Component not registered before use."); + + // Return this component's type - used for creating signatures + return componentTypes.at(type); + } + + template + void addComponent(Entity entity, T component) { + // Add a component to the array for an entity + getComponentArray()->insertData(entity, component); + } + + template + void removeComponent(Entity entity) { + // Remove a component from the array for an entity + getComponentArray()->removeData(entity); + } + + template + T* getComponent(Entity entity) { + // Get a reference to a component from the array for an entity + return getComponentArray()->getData(entity); + } + + void entityDestroyed(Entity entity) { + // Notify each component array that an entity has been destroyed + // If it has a component for that entity, it will remove it + for (auto const& pair : componentArrays) { + auto const& component = pair.second; + + component->entityDestroyed(entity); + } + } + + private: + // Map from type string pointer to a component type + std::unordered_map componentTypes{}; + + // Map from type string pointer to a component array + std::unordered_map> componentArrays{}; + + // The component type to be assigned to the next registered component - starting at 0 + ComponentType nextComponentType{}; + + // Convenience function to get the statically casted pointer to the ComponentArray of type T. + template + std::shared_ptr> getComponentArray() { + auto const& type = typeid(T); + + assert(componentTypes.find(type) != componentTypes.end() && "Component not registered before use."); + + return std::static_pointer_cast>(componentArrays[type]); + } +}; +} // namespace ICE + +#endif //ICE_COMPONENT_H diff --git a/ICE/Core/include/ICEEngine.h b/ICE/Core/include/ICEEngine.h index ad37c1c5..a2f71f54 100644 --- a/ICE/Core/include/ICEEngine.h +++ b/ICE/Core/include/ICEEngine.h @@ -1,66 +1,68 @@ -// -// Created by Thomas Ibanez on 25.11.20. -// - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace ICE { -class ICEEngine { - public: - ICEEngine(); - - void initialize(const std::shared_ptr& graphics_factor, const std::shared_ptr& window); - - void step(); - - void setupScene(const std::shared_ptr& camera_); - - std::shared_ptr getCamera(); - - std::shared_ptr getAssetBank(); - - Entity getSelected() const; - - std::shared_ptr getApi() const; - - std::shared_ptr getProject() const; - - void setProject(const std::shared_ptr& project); - - void setSelected(Entity selected); - - EngineConfig& getConfig(); - - std::shared_ptr getGraphicsFactory() const; - - std::shared_ptr getContext() const; - - std::shared_ptr getInternalFramebuffer() const; - void setRenderFramebufferInternal(bool use_internal); - - private: - std::shared_ptr m_graphics_factory; - std::shared_ptr ctx; - std::shared_ptr api; - std::shared_ptr internalFB; - std::shared_ptr m_target_fb = nullptr; - std::shared_ptr m_window; - - std::shared_ptr camera; - std::shared_ptr project = nullptr; - - EngineConfig config; - Registry registry; -}; -} // namespace ICE +// +// Created by Thomas Ibanez on 25.11.20. +// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace ICE { +class ICEEngine { + public: + ICEEngine(); + + void initialize(const std::shared_ptr& graphics_factor, const std::shared_ptr& window); + + void step(); + + void setupScene(const std::shared_ptr& camera_); + + std::shared_ptr getCamera(); + + std::shared_ptr getAssetBank(); + + Entity getSelected() const; + + std::shared_ptr getApi() const; + + std::shared_ptr getProject() const; + + void setProject(const std::shared_ptr& project); + + void setSelected(Entity selected); + + EngineConfig& getConfig(); + + std::shared_ptr getGraphicsFactory() const; + + std::shared_ptr getContext() const; + + std::shared_ptr getInternalFramebuffer() const; + void setRenderFramebufferInternal(bool use_internal); + + private: + std::shared_ptr m_graphics_factory; + std::shared_ptr ctx; + std::shared_ptr api; + std::shared_ptr internalFB; + std::shared_ptr m_target_fb = nullptr; + std::shared_ptr m_window; + + std::shared_ptr camera; + std::shared_ptr project = nullptr; + + std::chrono::steady_clock::time_point lastFrameTime; + + EngineConfig config; + Registry registry; +}; +} // namespace ICE diff --git a/ICE/Core/src/ICEEngine.cpp b/ICE/Core/src/ICEEngine.cpp index 2d901755..9b226ed2 100644 --- a/ICE/Core/src/ICEEngine.cpp +++ b/ICE/Core/src/ICEEngine.cpp @@ -1,98 +1,101 @@ -#define STB_IMAGE_IMPLEMENTATION - -#include "ICEEngine.h" - -#include -#include -#include -#include -#include -#include -#include - -namespace ICE { -ICEEngine::ICEEngine() : camera(std::make_shared(60, 16.f / 9.f, 0.1f, 100000)), config(EngineConfig::LoadFromFile()) { -} - -void ICEEngine::initialize(const std::shared_ptr &graphics_factory, const std::shared_ptr &window) { - Logger::Log(Logger::INFO, "Core", "Engine starting up..."); - m_graphics_factory = graphics_factory; - m_window = window; - m_window->setSwapInterval(1); - m_window->setResizeCallback([this](int w, int h) { - if (project) { - project->getCurrentScene()->getRegistry()->getSystem()->setViewport(0, 0, w, h); - project->getCurrentScene()->getRegistry()->getSystem()->getCamera()->resize(w, h); - } - }); - ctx = graphics_factory->createContext(m_window); - ctx->initialize(); - api = graphics_factory->createRendererAPI(); - api->initialize(); - internalFB = graphics_factory->createFramebuffer({720, 720, 1}); -} - -void ICEEngine::step() { - auto render_system = project->getCurrentScene()->getRegistry()->getSystem(); - render_system->setTarget(m_target_fb); - project->getCurrentScene()->getRegistry()->updateSystems(0.0); -} - -void ICEEngine::setupScene(const std::shared_ptr &camera_) { - auto renderer = std::make_shared(api, m_graphics_factory, project->getCurrentScene()->getRegistry(), project->getAssetBank()); - auto rs = std::make_shared(); - rs->setCamera(camera_); - rs->setRenderer(renderer); - project->getCurrentScene()->getRegistry()->addSystem(rs); - - auto [w, h] = m_window->getSize(); - renderer->resize(w, h); -} - -std::shared_ptr ICEEngine::getCamera() { - return camera; -} - -std::shared_ptr ICEEngine::getAssetBank() { - return project->getAssetBank(); -} - -std::shared_ptr ICEEngine::getApi() const { - return api; -} - -std::shared_ptr ICEEngine::getProject() const { - return project; -} - -std::shared_ptr ICEEngine::getInternalFramebuffer() const { - return internalFB; -} - -void ICEEngine::setRenderFramebufferInternal(bool use_internal) { - if (use_internal) { - m_target_fb = internalFB; - } else { - m_target_fb = nullptr; - } -} - -void ICEEngine::setProject(const std::shared_ptr &project) { - this->project = project; - this->camera->getPosition() = project->getCameraPosition(); - this->camera->getRotation() = project->getCameraRotation(); - setupScene(camera); -} - -EngineConfig &ICEEngine::getConfig() { - return config; -} - -std::shared_ptr ICEEngine::getGraphicsFactory() const { - return m_graphics_factory; -} - -std::shared_ptr ICEEngine::getContext() const { - return ctx; -} -} // namespace ICE +#define STB_IMAGE_IMPLEMENTATION + +#include "ICEEngine.h" + +#include +#include +#include +#include +#include +#include +#include + +namespace ICE { +ICEEngine::ICEEngine() : camera(std::make_shared(60, 16.f / 9.f, 0.1f, 100000)), config(EngineConfig::LoadFromFile()) { +} + +void ICEEngine::initialize(const std::shared_ptr &graphics_factory, const std::shared_ptr &window) { + Logger::Log(Logger::INFO, "Core", "Engine starting up..."); + m_graphics_factory = graphics_factory; + m_window = window; + m_window->setSwapInterval(1); + m_window->setResizeCallback([this](int w, int h) { + if (project) { + project->getCurrentScene()->getRegistry()->getSystem()->setViewport(0, 0, w, h); + project->getCurrentScene()->getRegistry()->getSystem()->getCamera()->resize(w, h); + } + }); + ctx = graphics_factory->createContext(m_window); + ctx->initialize(); + api = graphics_factory->createRendererAPI(); + api->initialize(); + internalFB = graphics_factory->createFramebuffer({720, 720, 1}); +} + +void ICEEngine::step() { + auto now = std::chrono::steady_clock::now(); + auto dt = std::chrono::duration_cast(now - lastFrameTime).count(); + lastFrameTime = now; + auto render_system = project->getCurrentScene()->getRegistry()->getSystem(); + render_system->setTarget(m_target_fb); + project->getCurrentScene()->getRegistry()->updateSystems(dt); +} + +void ICEEngine::setupScene(const std::shared_ptr &camera_) { + auto renderer = std::make_shared(api, m_graphics_factory, project->getCurrentScene()->getRegistry(), project->getAssetBank()); + auto rs = std::make_shared(); + rs->setCamera(camera_); + rs->setRenderer(renderer); + project->getCurrentScene()->getRegistry()->addSystem(rs); + + auto [w, h] = m_window->getSize(); + renderer->resize(w, h); +} + +std::shared_ptr ICEEngine::getCamera() { + return camera; +} + +std::shared_ptr ICEEngine::getAssetBank() { + return project->getAssetBank(); +} + +std::shared_ptr ICEEngine::getApi() const { + return api; +} + +std::shared_ptr ICEEngine::getProject() const { + return project; +} + +std::shared_ptr ICEEngine::getInternalFramebuffer() const { + return internalFB; +} + +void ICEEngine::setRenderFramebufferInternal(bool use_internal) { + if (use_internal) { + m_target_fb = internalFB; + } else { + m_target_fb = nullptr; + } +} + +void ICEEngine::setProject(const std::shared_ptr &project) { + this->project = project; + this->camera->getPosition() = project->getCameraPosition(); + this->camera->getRotation() = project->getCameraRotation(); + setupScene(camera); +} + +EngineConfig &ICEEngine::getConfig() { + return config; +} + +std::shared_ptr ICEEngine::getGraphicsFactory() const { + return m_graphics_factory; +} + +std::shared_ptr ICEEngine::getContext() const { + return ctx; +} +} // namespace ICE diff --git a/ICE/GraphicsAPI/None/NoneGraphics.h b/ICE/GraphicsAPI/None/NoneGraphics.h index 1fc154b8..15b74f94 100644 --- a/ICE/GraphicsAPI/None/NoneGraphics.h +++ b/ICE/GraphicsAPI/None/NoneGraphics.h @@ -27,12 +27,12 @@ class NoneIndexBuffer : public IndexBuffer { void putData(const void *data, uint32_t size) override {} }; -class NoneUniformBuffer : public IndexBuffer { +class NoneUniformBuffer : public UniformBuffer { public: void bind() const override {} void unbind() const override {} uint32_t getSize() const override { return 0; } - void putData(const void *data, uint32_t size) override {} + void putData(const void *data, uint32_t size, uint32_t offset) override {} }; class NoneContext : public Context { diff --git a/ICE/System/include/AnimationSystem.h b/ICE/System/include/AnimationSystem.h index ed4cb0cb..ecd7d381 100644 --- a/ICE/System/include/AnimationSystem.h +++ b/ICE/System/include/AnimationSystem.h @@ -9,8 +9,16 @@ namespace ICE { class AnimationSystem : public System { public: + AnimationSystem(const std::shared_ptr& reg, const std::shared_ptr& bank); void update(double delta) override; + std::vector getSignatures(const ComponentManager& comp_manager) const override { + Signature signature; + signature.set(comp_manager.getComponentType()); + signature.set(comp_manager.getComponentType()); + return {signature}; + } + private: template size_t findKeyIndex(double animationTime, const std::vector& keys) { diff --git a/ICE/System/include/Registry.h b/ICE/System/include/Registry.h index 882cb3d1..45e28287 100644 --- a/ICE/System/include/Registry.h +++ b/ICE/System/include/Registry.h @@ -1,122 +1,111 @@ -// -// Created by Thomas Ibanez on 26.01.23. -// - -#ifndef ICE_REGISTRY_H -#define ICE_REGISTRY_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace ICE { -class Registry { - public: - Registry(/* args */) { - componentManager.registerComponent(); - componentManager.registerComponent(); - componentManager.registerComponent(); - componentManager.registerComponent(); - componentManager.registerComponent(); - - Signature signature; - signature.set(componentManager.getComponentType()); - signature.set(componentManager.getComponentType()); - systemManager.registerSystem(); - systemManager.addSignature(signature); - signature.reset(); - signature.set(componentManager.getComponentType()); - signature.set(componentManager.getComponentType()); - systemManager.addSignature(signature); - signature.reset(); - signature.set(componentManager.getComponentType()); - systemManager.addSignature(signature); - } - ~Registry(){}; - - template - void registerCustomComponent() { - componentManager.registerComponent(); - } - - Entity createEntity() { - Entity e = entityManager.createEntity(); - entities.push_back(e); - return e; - } - - void addEntity(Entity e) { - entityManager.createEntity(e); - entities.push_back(e); - } - - void removeEntity(Entity e) { - auto it = std::find(entities.begin(), entities.end(), e); - entities.erase(it); - componentManager.entityDestroyed(e); - entityManager.releaseEntity(e); - systemManager.entityDestroyed(e); - } - - std::vector getEntities() const { return entities; } - - template - bool entityHasComponent(Entity e) { - return entityManager.getSignature(e).test(componentManager.getComponentType()); - } - - template - T *getComponent(Entity e) { - return componentManager.getComponent(e); - } - - template - void addComponent(Entity e, T component) { - componentManager.addComponent(e, component); - auto signature = entityManager.getSignature(e); - signature.set(componentManager.getComponentType(), true); - entityManager.setSignature(e, signature); - systemManager.entitySignatureChanged(e, signature); - } - - template - void removeComponent(Entity e) { - componentManager.removeComponent(e); - auto signature = entityManager.getSignature(e); - signature.set(componentManager.getComponentType(), false); - entityManager.setSignature(e, signature); - systemManager.entitySignatureChanged(e, signature); - } - - template - void addSystem(const std::shared_ptr &system) { - systemManager.addSystem(system); - for (const auto e : entities) { - systemManager.entitySignatureChanged(e, entityManager.getSignature(e)); - } - } - - template - std::shared_ptr getSystem() { - return systemManager.getSystem(); - } - - void updateSystems(double delta) { systemManager.updateSystems(delta); } - - private: - EntityManager entityManager; - ComponentManager componentManager; - SystemManager systemManager; - std::vector entities; -}; -} // namespace ICE - -#endif //ICE_REGISTRY_H +// +// Created by Thomas Ibanez on 26.01.23. +// + +#ifndef ICE_REGISTRY_H +#define ICE_REGISTRY_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace ICE { +class Registry { + public: + Registry() { + componentManager.registerComponent(); + componentManager.registerComponent(); + componentManager.registerComponent(); + componentManager.registerComponent(); + componentManager.registerComponent(); + componentManager.registerComponent(); + } + ~Registry() = default; + + template + void registerCustomComponent() { + componentManager.registerComponent(); + } + + Entity createEntity() { + Entity e = entityManager.createEntity(); + entities.push_back(e); + return e; + } + + void addEntity(Entity e) { + entityManager.createEntity(e); + entities.push_back(e); + } + + void removeEntity(Entity e) { + auto it = std::find(entities.begin(), entities.end(), e); + entities.erase(it); + componentManager.entityDestroyed(e); + entityManager.releaseEntity(e); + systemManager.entityDestroyed(e); + } + + std::vector getEntities() const { return entities; } + + template + bool entityHasComponent(Entity e) { + return entityManager.getSignature(e).test(componentManager.getComponentType()); + } + + template + T *getComponent(Entity e) { + return componentManager.getComponent(e); + } + + template + void addComponent(Entity e, T component) { + componentManager.addComponent(e, component); + auto signature = entityManager.getSignature(e); + signature.set(componentManager.getComponentType(), true); + entityManager.setSignature(e, signature); + systemManager.entitySignatureChanged(e, signature, componentManager); + } + + template + void removeComponent(Entity e) { + componentManager.removeComponent(e); + auto signature = entityManager.getSignature(e); + signature.set(componentManager.getComponentType(), false); + entityManager.setSignature(e, signature); + systemManager.entitySignatureChanged(e, signature, componentManager); + } + + template + void addSystem(const std::shared_ptr &system) { + systemManager.addSystem(system); + for (const auto e : entities) { + systemManager.entitySignatureChanged(e, entityManager.getSignature(e), componentManager); + } + } + + template + std::shared_ptr getSystem() { + return systemManager.getSystem(); + } + + void updateSystems(double delta) { systemManager.updateSystems(delta); } + + private: + EntityManager entityManager; + ComponentManager componentManager; + SystemManager systemManager; + std::vector entities; +}; +} // namespace ICE + +#endif //ICE_REGISTRY_H diff --git a/ICE/System/include/RenderSystem.h b/ICE/System/include/RenderSystem.h index f6d18aa4..5efba999 100644 --- a/ICE/System/include/RenderSystem.h +++ b/ICE/System/include/RenderSystem.h @@ -1,34 +1,50 @@ -// -// Created by Thomas Ibanez on 19.11.20. -// -#pragma once - -#include -#include -#include -#include - -namespace ICE { -class Scene; - -class RenderSystem : public System { - public: - RenderSystem(){}; - - void onEntityAdded(Entity e) override; - void onEntityRemoved(Entity e) override; - void update(double delta) override; - - std::shared_ptr getRenderer() const; - void setRenderer(const std::shared_ptr &renderer); - std::shared_ptr getCamera() const; - void setCamera(const std::shared_ptr &camera); - - void setTarget(const std::shared_ptr &fb); - void setViewport(int x, int y, int w, int h); - - private: - std::shared_ptr m_renderer; - std::shared_ptr m_camera; -}; -} // namespace ICE +// +// Created by Thomas Ibanez on 19.11.20. +// +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ICE { +class Scene; + +class RenderSystem : public System { + public: + RenderSystem() {}; + + void onEntityAdded(Entity e) override; + void onEntityRemoved(Entity e) override; + void update(double delta) override; + + std::shared_ptr getRenderer() const; + void setRenderer(const std::shared_ptr &renderer); + std::shared_ptr getCamera() const; + void setCamera(const std::shared_ptr &camera); + + void setTarget(const std::shared_ptr &fb); + void setViewport(int x, int y, int w, int h); + + std::vector getSignatures(const ComponentManager &comp_manager) const override { + Signature signature0; + signature0.set(comp_manager.getComponentType()); + signature0.set(comp_manager.getComponentType()); + Signature signature1; + signature1.set(comp_manager.getComponentType()); + signature1.set(comp_manager.getComponentType()); + Signature signature2; + signature2.set(comp_manager.getComponentType()); + return {signature0, signature1, signature2}; + } + + private: + std::shared_ptr m_renderer; + std::shared_ptr m_camera; +}; +} // namespace ICE diff --git a/ICE/System/include/System.h b/ICE/System/include/System.h index 7b68ff93..7001b006 100644 --- a/ICE/System/include/System.h +++ b/ICE/System/include/System.h @@ -1,104 +1,91 @@ -// -// Created by Thomas Ibanez on 19.11.20. -// - -#pragma once - -#include - -#include -#include -#include -#include -#include - -namespace ICE { -class Scene; - -class System { - public: - virtual void update(double delta) = 0; - virtual void onEntityAdded(Entity e) = 0; - virtual void onEntityRemoved(Entity e) = 0; - - protected: - std::unordered_set entities; - - friend class SystemManager; -}; - -class SystemManager { - public: - template - void registerSystem() { - assert(systems.find(typeid(T)) == systems.end() && "Registering system more than once."); - signatures.insert({typeid(T), std::vector()}); - } - - template - void addSignature(Signature signature) { - assert(signatures.find(typeid(T)) != signatures.end() && "System used before registered."); - - // Set the signature for this system - signatures[typeid(T)].push_back(signature); - } - - void entityDestroyed(Entity entity) { - // Erase a destroyed entity from all system lists - // mEntities is a set so no check needed - for (auto const& pair : systems) { - auto const& system = pair.second; - - system->entities.erase(entity); - system->onEntityRemoved(entity); - } - } - - void entitySignatureChanged(Entity entity, Signature entitySignature) { - // Notify each system that an entity's signature changed - for (auto const& pair : systems) { - auto const& system = pair.second; - auto const& systemSignature = signatures[pair.first]; - - // Entity signature matches system signature - insert into set - bool match = false; - for (const auto& s : systemSignature) { - if ((entitySignature & s) == s) { - system->entities.insert(entity); - system->onEntityAdded(entity); - match = true; - break; - } - } - // Entity signature does not match system signature - erase from set - if (!match) { - system->entities.erase(entity); - system->onEntityRemoved(entity); - } - } - } - - void updateSystems(double delta) { - for (auto const& [signature, system] : systems) { - system->update(delta); - } - } - - template - void addSystem(const std::shared_ptr& system) { - systems.try_emplace(typeid(T), system); - } - - template - std::shared_ptr getSystem() { - return std::static_pointer_cast(systems.at(typeid(T))); - } - - private: - // Map from system type string pointer to a signature - std::unordered_map> signatures; - - // Map from system type string pointer to a system pointer - std::unordered_map> systems; -}; -} // namespace ICE +// +// Created by Thomas Ibanez on 19.11.20. +// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +namespace ICE { +class Scene; +class ComponentManager; + +class System { + public: + virtual void update(double delta) = 0; + virtual void onEntityAdded(Entity e) {}; + virtual void onEntityRemoved(Entity e) {}; + + virtual std::vector getSignatures(const ComponentManager& comp_manager) const = 0; + virtual ~System() = default; + + protected: + std::unordered_set entities; + + friend class SystemManager; +}; + +class SystemManager { + public: + void entityDestroyed(Entity entity) { + // Erase a destroyed entity from all system lists + // mEntities is a set so no check needed + for (auto const& pair : systems) { + auto const& system = pair.second; + + system->entities.erase(entity); + system->onEntityRemoved(entity); + } + } + + void entitySignatureChanged(Entity entity, Signature entitySignature, const ComponentManager& comp_manager) { + // Notify each system that an entity's signature changed + for (auto const& pair : systems) { + auto const& system = pair.second; + auto const& systemSignature = system->getSignatures(comp_manager); + + // Entity signature matches system signature - insert into set + bool match = false; + for (const auto& s : systemSignature) { + if ((entitySignature & s) == s) { + system->entities.insert(entity); + system->onEntityAdded(entity); + match = true; + break; + } + } + // Entity signature does not match system signature - erase from set + if (!match) { + system->entities.erase(entity); + system->onEntityRemoved(entity); + } + } + } + + void updateSystems(double delta) { + for (auto const& [signature, system] : systems) { + system->update(delta); + } + } + + template + void addSystem(const std::shared_ptr& system) { + systems.try_emplace(typeid(T), system); + } + + template + std::shared_ptr getSystem() { + return std::static_pointer_cast(systems.at(typeid(T))); + } + + private: + // Map from system type string pointer to a system pointer + std::unordered_map> systems; +}; +} // namespace ICE diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index 02d3cab7..9f2db705 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -1,6 +1,9 @@ #include "AnimationSystem.h" namespace ICE { +AnimationSystem::AnimationSystem(const std::shared_ptr& reg, const std::shared_ptr& bank) : m_registry(reg), m_asset_bank(bank) { +} + void AnimationSystem::update(double delta) { for (auto e : entities) { auto anim = m_registry->getComponent(e); @@ -134,6 +137,7 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; node->globalTransform = globalTransform; + node->localTransform = nodeLocalTransform; if (skeleton.boneMapping.contains(nodeName)) { int boneID = skeleton.boneMapping.at(nodeName); diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 2ead95e6..98bb32ec 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -23,16 +24,26 @@ int main(void) { project->setCurrentScene(scene); engine.setProject(project); + project->getCurrentScene()->getRegistry()->addSystem(std::make_shared(scene->getRegistry(), engine.getAssetBank())); engine.getProject()->copyAssetFile("Models", "glock", "ImportAssets/glock.glb"); engine.getAssetBank()->addAsset("glock", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "glock.glb"}); auto mesh_id = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("cube")); + /* auto entity = scene->createEntity(); scene->getRegistry()->addComponent( - entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(1, 1, 1))); + entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(0.1, 0.1, 0.1))); scene->getRegistry()->addComponent(entity, RenderComponent(mesh_id)); + */ + auto mesh_id_2 = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("glock")); + + auto entity2 = scene->createEntity(); + scene->getRegistry()->addComponent( + entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f::Constant(0.1))); + scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); + scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "glock_19|Shoot", .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); camera->backward(2); @@ -46,7 +57,7 @@ int main(void) { engine.step(); - scene->getRegistry()->getComponent(entity)->rotation().y() = i; + scene->getRegistry()->getComponent(entity2)->rotation().y() = i; //Render system duty int display_w, display_h; From 9ae573aa235229e5060cfbe8b0873cb5d30dc9e3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 13 Dec 2025 15:07:24 +0100 Subject: [PATCH 10/21] add decompose utility, add animated bind to keep original intact --- ICE/Graphics/include/Model.h | 10 +++--- ICE/Graphics/src/ForwardRenderer.cpp | 4 ++- ICE/IO/src/ModelLoader.cpp | 1 + ICE/Math/include/ICEMath.h | 1 + ICE/Math/src/ICEMath.cpp | 48 ++++++++++++++++++++++++++++ ICEFIELD/icefield.cpp | 6 ++-- 6 files changed, 62 insertions(+), 8 deletions(-) diff --git a/ICE/Graphics/include/Model.h b/ICE/Graphics/include/Model.h index a3ff7380..ffe18289 100644 --- a/ICE/Graphics/include/Model.h +++ b/ICE/Graphics/include/Model.h @@ -9,10 +9,10 @@ class Model : public Asset { public: struct Node { std::string name; - Eigen::Matrix4f localTransform; - Eigen::Matrix4f globalTransform; // For mesh-only animation (no bones) - std::vector meshIndices; // Meshes used by this node - std::vector children; // Node indices + Eigen::Matrix4f localTransform; // default transform + Eigen::Matrix4f animatedTransform; // For mesh-only animation (no bones) + std::vector meshIndices; // Meshes used by this node + std::vector children; // Node indices }; struct BoneInfo { @@ -29,7 +29,7 @@ class Model : public Asset { Model(const std::vector &nodes, const std::vector> &meshes, const std::vector &materials); std::vector getNodes() const { return m_nodes; } - std::vector& getNodes() { return m_nodes; } + std::vector &getNodes() { return m_nodes; } std::vector> getMeshes() const { return m_meshes; } std::vector getMaterialsIDs() const { return m_materials; } AABB getBoundingBox() const { return m_boundingbox; } diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index 6ff16c21..a8f155cf 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -133,6 +133,7 @@ void ForwardRenderer::prepareFrame(Camera& camera) { auto meshes = model->getMeshes(); auto materials = model->getMaterialsIDs(); auto nodes = model->getNodes(); + Logger::Log(Logger::DEBUG, "ForwardRenderer", "==================================================="); submitModel(0, nodes, meshes, materials, tc->getModelMatrix()); } @@ -152,7 +153,7 @@ void ForwardRenderer::prepareFrame(Camera& camera) { void ForwardRenderer::submitModel(int node_idx, const std::vector& nodes, const std::vector>& meshes, const std::vector& materials, const Eigen::Matrix4f& transform) { auto node = nodes.at(node_idx); - auto node_transform = transform * node.localTransform; + Eigen::Matrix4f node_transform = transform * node.animatedTransform; for (const auto& i : node.meshIndices) { if (i >= meshes.size()) { continue; @@ -181,6 +182,7 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& } } } + //Logger::Log(Logger::DEBUG, "ForwardRenderer", "%s %f", node.name.c_str(), node_transform.determinant()); m_render_commands.push_back(RenderCommand{.mesh = mesh, .material = material, diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index 415820ed..a51f72cf 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -52,6 +52,7 @@ int ModelLoader::processNode(const aiNode *ainode, std::vector &nod // compute local transform (relative to parent) aiMatrix4x4 local = ainode->mTransformation; node.localTransform = aiMat4ToEigen(local); + node.animatedTransform = node.localTransform; for (unsigned int i = 0; i < ainode->mNumMeshes; ++i) { unsigned int mesh_idx = ainode->mMeshes[i]; diff --git a/ICE/Math/include/ICEMath.h b/ICE/Math/include/ICEMath.h index aef5a91e..c326e258 100644 --- a/ICE/Math/include/ICEMath.h +++ b/ICE/Math/include/ICEMath.h @@ -28,6 +28,7 @@ Eigen::Matrix4f rotationMatrix(Eigen::Vector3f angles, bool yaw_first = true); Eigen::Matrix4f translationMatrix(Eigen::Vector3f translation); Eigen::Matrix4f scaleMatrix(Eigen::Vector3f scale); Eigen::Matrix4f transformationMatrix(const Eigen::Vector3f &translation, const Eigen::Vector3f &angles, const Eigen::Vector3f &scale); +void decomposeMatrix(const Eigen::Matrix4f &M, Eigen::Vector3f &position, Eigen::Vector3f &rotation_eulers, Eigen::Vector3f &scale); Eigen::Vector3f orientation(int face, float x, float y); int clamp(int x, int a, int b); diff --git a/ICE/Math/src/ICEMath.cpp b/ICE/Math/src/ICEMath.cpp index 13fd4a1c..f5e5fc2c 100644 --- a/ICE/Math/src/ICEMath.cpp +++ b/ICE/Math/src/ICEMath.cpp @@ -58,6 +58,54 @@ Eigen::Matrix4f transformationMatrix(const Eigen::Vector3f &translation, const E return translationMatrix(translation) * rotationMatrix(angles) * scaleMatrix(scale); } +void decomposeMatrix(const Eigen::Matrix4f &M, Eigen::Vector3f &position, Eigen::Vector3f &rotation_eulers, Eigen::Vector3f &scale) { + // --- 1. Extract Translation (Position) --- + position = M.block<3, 1>(0, 3); + + // --- 2. Extract Scale and Rotation --- + + // The 3x3 rotational/scaling block (top-left) + Eigen::Matrix3f R_S = M.block<3, 3>(0, 0); + + // --- Extract Scale (S) --- + // Scale factors are the magnitudes (norms) of the basis vectors (columns) + scale.x() = R_S.col(0).norm(); + scale.y() = R_S.col(1).norm(); + scale.z() = R_S.col(2).norm(); + + // Check for negative scale (reflection) + if (R_S.determinant() < 0.0f) { + scale.x() *= -1.0f; // Negate one component to account for reflection + } + + // --- Extract Rotation (R) --- + + // Create the pure rotation matrix R by dividing the R_S block by the extracted scale. + Eigen::Matrix3f R = R_S; + + // Divide each column by its corresponding scale factor to normalize it to a unit vector. + if (scale.x() != 0.0f) + R.col(0) /= scale.x(); + if (scale.y() != 0.0f) + R.col(1) /= scale.y(); + if (scale.z() != 0.0f) + R.col(2) /= scale.z(); + + // Convert the resulting 3x3 rotation matrix (R) to Z-Y-X Euler angles. + // Eigen's toEulerAngles(Z, Y, X) returns (alpha, beta, gamma) where: + // alpha = Rotation around Z (Yaw) + // beta = Rotation around Y (Pitch) + // gamma = Rotation around X (Roll) + rotation_eulers = R.eulerAngles(2, 1, 0); // 2=Z, 1=Y, 0=X + + // Note: The returned angles are in radians. + + // The Euler angles returned are in the following order based on the specified Eigen constants: + // rotation_eulers.x() is the Z-axis rotation (Yaw) + // rotation_eulers.y() is the Y-axis rotation (Pitch) + // rotation_eulers.z() is the X-axis rotation (Roll) +} + Eigen::Vector3f orientation(int face, float x, float y) { Eigen::Vector3f out; if (face == ICE_CUBEMAP_PZ) { diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 98bb32ec..3021a3f6 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -23,6 +23,8 @@ int main(void) { auto scene = project->getScenes().front(); project->setCurrentScene(scene); + engine.getApi()->setClearColor(0.5f, 0.5f, 0.5f, 1.0f); + engine.setProject(project); project->getCurrentScene()->getRegistry()->addSystem(std::make_shared(scene->getRegistry(), engine.getAssetBank())); @@ -43,7 +45,7 @@ int main(void) { scene->getRegistry()->addComponent( entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f::Constant(0.1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); - scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "glock_19|Shoot", .loop = true}); + scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "glock_19|Shoot", .speed=0.1f, .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); camera->backward(2); @@ -57,7 +59,7 @@ int main(void) { engine.step(); - scene->getRegistry()->getComponent(entity2)->rotation().y() = i; + scene->getRegistry()->getComponent(entity2)->rotation().y() = 90; //Render system duty int display_w, display_h; From 0d2db34138eb308234349ce44f1050f31363c79e Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 13 Dec 2025 15:08:15 +0100 Subject: [PATCH 11/21] fix name mismatch --- ICE/System/src/AnimationSystem.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index 9f2db705..ea5ab689 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -136,8 +136,7 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& } Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; - node->globalTransform = globalTransform; - node->localTransform = nodeLocalTransform; + node->animatedTransform = nodeLocalTransform; if (skeleton.boneMapping.contains(nodeName)) { int boneID = skeleton.boneMapping.at(nodeName); From e59e29ffabb47b118a9a31396bbd626a71ee1639 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 13 Dec 2025 18:19:34 +0100 Subject: [PATCH 12/21] Trying with skeletal anim --- Assets/Shaders/phong.vs | 26 +++++++++++++++++--------- ICE/Graphics/src/ForwardRenderer.cpp | 15 +++++++++++++++ ICE/System/src/AnimationSystem.cpp | 20 +++++++++++++++----- ICEFIELD/ImportAssets/pistol.glb | Bin 0 -> 153956 bytes ICEFIELD/icefield.cpp | 14 +++++++------- 5 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 ICEFIELD/ImportAssets/pistol.glb diff --git a/Assets/Shaders/phong.vs b/Assets/Shaders/phong.vs index 215096ba..8d86d564 100644 --- a/Assets/Shaders/phong.vs +++ b/Assets/Shaders/phong.vs @@ -20,23 +20,31 @@ out vec2 ftex_coords; void main() { vec4 totalPosition = vec4(0.0f); + vec3 totalNormal = vec3(0.0f); + for(int i = 0 ; i < MAX_BONE_INFLUENCE ; i++) { - if(bone_ids[i] == -1) - continue; - if(bone_ids[i] >= MAX_BONES) - { + if(bone_ids[i] == -1) continue; + + if(bone_ids[i] >= MAX_BONES) { totalPosition = vec4(vertex, 1.0f); - break; + totalNormal = normal; + break; } - vec4 localPosition = finalBonesMatrices[bone_ids[i]] * vec4(vertex,1.0f); + + vec4 localPosition = finalBonesMatrices[bone_ids[i]] * vec4(vertex, 1.0f); totalPosition += localPosition * bone_weights[i]; + vec3 localNormal = mat3(finalBonesMatrices[bone_ids[i]]) * normal; + totalNormal += localNormal * bone_weights[i]; } + + fposition = (model * totalPosition).xyz; + fnormal = normalize(mat3(transpose(inverse(model))) * totalNormal); + + gl_Position = uProjection * uView * model * totalPosition; + fview = (inverse(uView) * vec4(0, 0, 0, 1)).xyz; - fnormal = normalize(mat3(transpose(inverse(model))) * normal); - fposition = (model * vec4(vertex, 1.0)).xyz; ftex_coords = tex_coords; - gl_Position = uProjection * uView * model * vec4(vertex, 1.0); } \ No newline at end of file diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index a8f155cf..4f99678a 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -134,6 +134,20 @@ void ForwardRenderer::prepareFrame(Camera& camera) { auto materials = model->getMaterialsIDs(); auto nodes = model->getNodes(); Logger::Log(Logger::DEBUG, "ForwardRenderer", "==================================================="); + + for (const auto& mtl : materials) { + auto material = m_asset_bank->getAsset(mtl); + auto shader = m_asset_bank->getAsset(material->getShader()); + + if (!shader) { + continue; + } + shader->bind(); + for (int i = 0; i < model->getSkeleton().bones.size(); i++) { + shader->loadMat4("finalBonesMatrices[" + std::to_string(i) + "]", model->getSkeleton().bones[i].finalTransformation); + } + } + submitModel(0, nodes, meshes, materials, tc->getModelMatrix()); } @@ -182,6 +196,7 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& } } } + //Logger::Log(Logger::DEBUG, "ForwardRenderer", "%s %f", node.name.c_str(), node_transform.determinant()); m_render_commands.push_back(RenderCommand{.mesh = mesh, diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index ea5ab689..ac1a19d7 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -1,17 +1,19 @@ -#include "AnimationSystem.h" +#include "AnimationSystem.h" + +#include namespace ICE { AnimationSystem::AnimationSystem(const std::shared_ptr& reg, const std::shared_ptr& bank) : m_registry(reg), m_asset_bank(bank) { } -void AnimationSystem::update(double delta) { +void AnimationSystem::update(double dt) { for (auto e : entities) { auto anim = m_registry->getComponent(e); auto rc = m_registry->getComponent(e); if (!anim->playing) continue; - anim->currentTime += delta * anim->speed; + anim->currentTime += dt * anim->speed; auto model = m_asset_bank->getAsset(rc->model); auto animation = model->getAnimations().at(anim->currentAnimation); @@ -132,10 +134,18 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& Eigen::Matrix4f rotMatrix = interpolateRotation(time, track); Eigen::Matrix4f scaleMatrix = interpolateScale(time, track); - nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; + float Sx = nodeLocalTransform.block<3, 1>(0, 0).norm(); + float Sy = nodeLocalTransform.block<3, 1>(0, 1).norm(); + float Sz = nodeLocalTransform.block<3, 1>(0, 2).norm(); + Eigen::Matrix4f originalScaleMatrix = Eigen::Matrix4f::Identity(); + originalScaleMatrix(0, 0) = Sx; + originalScaleMatrix(1, 1) = Sy; + originalScaleMatrix(2, 2) = Sz; + + nodeLocalTransform = originalScaleMatrix * posMatrix * rotMatrix * scaleMatrix; } - Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; + Eigen::Matrix4f globalTransform = parentTransform * node->localTransform; node->animatedTransform = nodeLocalTransform; if (skeleton.boneMapping.contains(nodeName)) { diff --git a/ICEFIELD/ImportAssets/pistol.glb b/ICEFIELD/ImportAssets/pistol.glb new file mode 100644 index 0000000000000000000000000000000000000000..3c3869f498191e0b7b7de5205f9709c2c97e6412 GIT binary patch literal 153956 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

6|$;fCyViscx+56e z@|15?Rf+nITi|bl2(flejkvXI*2DqE1IM>--#%W5iKt(~_cg#ffjhh+@Awz}#|1VrIy}-?T-tTZTMo6ni4U^&>#ke; zUM8nNHu}6gackafRzUZnn4R z{m4!J+&ib=#Ov67InGWW_{Tq*5AECE?-8Or=0=T7bK`J$yPNambdLcyv2$tPoA^xY z7B}&KdM8F%wu)eD!si6h@Ac@v*$6?qd6@mxrKCVjqd)`n_vgzNsa+&4K-jDZ)g zKHzJTzn_6WULyQ|>|AKzJhdP67dUm$zyqIX;r}Uzh^K20hmZ6p#+Ed2n~F32qnFza zTyDhz|AvzF47}ywV*ly7jSYNkz$^Zhg&P|9Y_+HT`});1@Pic_`X@zPGUQ)8^Sf{K z!np=+b!w$=!0cE9bDd3mx3SF{8-5&jBmP%VpL)VWG%WIZ{AkdouY`x_{x`11mjwN= zQhI&_tr+=N{2I{g80DD*IzRlc_@61hx8bnA`yFF`pT6dod) zzxmnRdF{nlZqCOc6F$C)kCiQQb3RUd`_??o@zX7Q?$94M`S)*s-oQdgq43erQC-+X z4v;Q#id-VM$RqNCa*KQ-zbJsRAnHQmK2aD{NE8u8#r>ifsHi9|9uOr&NzenLlqfCA zh_a#_sEjBtDu{|GE1|9|9u!qTl|@xiO;i^(K-EM|QA^Yobwpj1wS-+bgcD>JE)gce zMFc2JM2f^e$NPU?80CHY+vk0wKU`qoS)CL7gpVwYauX&V!X}T|J|cI(fA0Io+yzgz z@%NhOHFyZ$U+E?P_h_GqYd2qc$zSl?W8Twa`}m7~5%3oPt{>IKXeS=Co#aqE$s`_< z!}THgq$jl(gM5-n^0^Lluk2)UeYkwC8<)xT#>46Jz6xKu$KJd)c;158PLaY-$C+{NRmE#9M#f{7n`y{BaEn+G1Bw&zaFvGy9$0|tiw5FhP<`=;Xeb(qM?nomW6?x3 z70pC*lubkn(NeS$tx>iRZA4qq4rM#hUOXl`h>j>bicX@l=pr5mbrxMkH}Qn%4(cWn zL=VwZ^aAw|iK4gYBl?1Ri+-ZN7$63UL8u3c!6Hcv5kpZ97Rh3m7%oPj9xg_TQQ}E_ zMgxrzW5qZz9`!geL8OR@ViM|!VzQVbo)S}0KP9G#>Edb7H1UjhR?HAHQO*?4iCJQ{ zn1j!3@w|9J%oQ(+mr%YS=85@Y0cf6BC>DvA#Vepi;#IL&ED^7X*Fj6fQn5@d7b`%^ z#7gmoSS41YTq)Lwwc<_C8nI5S7aPPz(0Z{+Y!+L@TcFKitJo&Ci&U`#b*e}cUf~0! z3BO1e0kIS1F4Vil9Dt;3eLBEPi;I4cTjr5@Wj>i7lvfsz1!W<5AL>G~uq+~rf(py~WieS?K7jH8 zSwfbSrDSQ8rDYjeR+f|HL1kqHSy5J!l|dEdgR+XODyxC2$m%Go%Nnw#tR-v9Iw)(( zy3#HkD4nQXGE9b}j6fYJqhvJ77}RbVE8|ecqxQ&$WId2a)|UDO<_bDBGZJE8EHTptkZc*+F)coj@IAXW2zQF1v!d$Zqlp*z)J8uSdxXHid+GvrM99B77|C1=Yy z@_G3JXpWpKUz9JQd`Zre^W_4$P%e@$%U3{)|}U68-XU*&J|BIs9nNnVz}%Rl55l$Yh7@-KN6^ryTguge=)0HnGBq?D#~ zWkab{4wX~o0_9M-RUVaBKKBC^Q^nN-pkk_oDyd4T z(x8&6j4G?jsq&z*s)DMhDyho&JP1@pRaMpSsSZ>_)l{|csSQ*|)m3&-9pz9?Y;u})mIJF!=U==5!FyNQje;}C>yFKs;O#* zPjjFas-^hq68D$5aQ^5%ieqq&llE>TytK)m3#Xq{RQT8r-+)JC-lpUps9)LUw++6H<{ZC9ykhe|`eLwS`?`Bgf|rvhrH+NE}b zcB(yUuXJ#;;`V8f1)Ss&_)R&;o)mQ3kbw+&y`dWRfzEfw__o^3S(pi*e@%@}SuYLfX zQ$MN;>L>Lx=z{u1{i=Rb7eT+OOX{-vUHt*Ntgfg()nDo==udS`T~{}dFuZ|UYD&{I z9i%jymP5;_imj zN@@#bDQ!Nev{nXG3g63W<+SpkvRVbLqE<<(tUZXbqEf3umzw7P%Ih-r} zr;#5!`O9h_wSNI@w#Pj?XalwDBPRJjMf;O$cKhV^`Tp7cYuEK6zeo5pv=b(tMvbe~ zB_5K4c6U}e+1%G{$~Uhinb5&)$~W&t^1nno$>;aV(Ep|!lZV=~(?4swd0%daW;(|mmTo= zTMYE?2L5t~-*<3sC;xCY!QFD>F5j+NeU0|i6)SzNqhtJgz$1^G@_o@~l)r8AA@`Rf zQ|~C}*xQo~o}d1B*H`_pV*w8{bL(evWM@;tS8r> z%M9D!$)EadMf-1cGV4tGr{15}PWtnHJvg?$|4V;E`+2n|Q#+Tlqfvc-gFl~i*X^^% zSKC|PpXb+x_9GYH@o^nqo>t$V+<27x5p~$dbuPU;!r!}HC;NgW2YsBUVp4?voo&P2 zb6+`_NhZHn*-s<r*rFZz&e(KVP7u{k5$-ef(P9&h_DT=J)N?xrSd`Kh&K( zYlV;N#$^r&ui|%JOLDjS;SC?>=R91`XXn-Mw;9>b{?4Z>e5Y-7{0mPc+KcZ=&(tq| zFFr=!je5|(zGRa9k+`RPQyW$B?~WN_|E=XJAJ;)2_MrcVd;{Ijyg$XqG3ViWx@*_; z@AMCHPxxR;CYf9}t`C<}`$~EL`6k2d&E~c9aozZRKR;96-{Ss$?)P`M^>NI3xDLJ6 zNBPU|>+kmOYn#cQ`v=tYPyI8|ezD$DKF-hW$$4sQj`q8Hwy>{R($2?a@@uP?-0k-v zR$SlH%)cW49Dh1+@19*V#XufciKqIxS#^mgYrAVyPKddECnylg+h~>o7;9 z`tzI^;jW**g@4fGMgDxiBcATy=Q_W-d%Y36##GGX&);*Effp<~s0Z=nemA;2f!^e6yCN`dc9${$4N2&#(RKm2Li0;Muz^!q2be{9GTd1HZOzp>f8& zYR`)IU9Z;P-wyZc^!8P6yW+hKJonAIK3OBh;CbWi3cl~dR~S0ynOfPmed25WPoabU z>h8g|ZU1>!o`TV{C zHPztn6}igC*P6;H(~b6-uOIXEX%*y&9hR19&HAnRHvca8(`En}6fu zW5>sxuaA7~<9hP7@{23|4Vf=Zc-F`5u;S0I#+v)t;kG{Bm&@V}-*5Z&yM5&<`8uvz z;G2}Mk9)$>ecrId`3Bx`rI~Mf!BxJC;Hi4?NAJ{fs}1=Fk7V;CD!^Qm&|n! zI$GWLQJ2mB{j{pDSIvWH>YA?-f$KJaQae>23`KAk@F@_Es<*yrf+Q7L#spOwte7eDt z``Wck`f#0jU-)=&ALD)D{9J!7llv9-LoT1|#``j7>a)h&UzYExukxr_#=QH~TO?Co zGV!pv$>%Kh6K+EuukPfByq(M8e#m1*CSPLvSRO05@9{X#{gcN=zK#s4KG#?a>eOzS zY3=*soq7IG5QiVO*Yk6qc`hwz!(Wf)^zj(T$BV~y?zeorc&y;#%jY}!bEArhcJgOx z?{s9Eo#FuZ^J8=K`%7GT+Wy0ztuyT__zb}``_a{8w^1Vu@9NqjyHx{!et!wAwbD8@d_bVO``JClr&F2N* zZ*be@e5r?jp(~#~GUkL~b8{?s%;E8k>)Gdz{(jdlx_$8z&-!@3xc(G#mLHHCDCY3^ zLp(#S<=>DsUh(^Kf8*D39^TIH#ru^twoh%kb3Lt7JkImyJ|0_mOyF^n_|0cVYA>tp ztxNGUE06hnN^4)9=>;~>+DB{C`nri5Xl>%_6ki{CtmEUw{gB61ZqH1+UlyiYy+*WTs~iO`MtRR@HK+Z5x$1< z^@TrEb6@5D$=7ARr{()Dz6a*}End?dZyzsul z8)$#XefuKzkRn&t4YY^kedO(24)HwRXVnIJCgQmu-p=LlXB_SiG>^vg-(wkkr$h0BXlX5kK8;|l*?uh3icstKKQ7&lzw&7mN9dXR>%de$; z%fdb*y_84d?YuACCR`4`mU0y56Oz4@JEGi+ukdiMnJ+T+;ru)&!}CJ?T7ECi!)?oD zavdnga&6sEFXfK7Ov<0sxR&HK^F<~P*N5}-{07g-aNF{6;X3e~48JeW9Z??U+k6AP zX1>V8Tz`HoF!KDAlR;j{OF1GghxYl%9eK@sk*Q~1(5x*}z0}{WPFCv+= z2GMgLwNs9Waz}(Icf{AMjCJ2jdjMMB@mqs_B9U&L$rQFd)m%fgesdl0n)#w%huuh{eJ|}pcC$mzg6n`@;Lh=ODk9?;E+#aJz9I z<37*%xldA#$n-aUEuW`6Ztz&a{fhe@_emb}c|4?N4T|}cBjRfcUu(WZz6ie^cqw1R z$6_Y(MPyIP7x5U*Vc6>~EPKJEg%u(=|z7yBYVm|8Sq=W6kF*pCf$Sxy^ZA zh1;BRGG@%-x^ew^4CK$|Jm&B`2JaWo?eKeXALBmBWpaKlhx71$WsU7wp0$lNm&XVG zY{+8*J@1=wl0W-%e$K<6EBSLYUz>O?g0GK!EO^}Ge#m1i_Y-b&o)_Zw=W8hE;W->G zlgBr%Cy#-=Uwm!lGO3;Ck<4|R&k;V~`Fg>9kFP2GnVS0~UyHea^8FRx>+(G?-*@pb z;{D=%;eF@%4ek$oZt~d6=P6&m_`K$O5}yCzeIXvxw|T!fKed}VB7QAz=f81tIXqvK zF{j)t?`rJ#xNq=vkoy~76S+Nkj3R74e{s7lJUo>CUW3S6ZB@DzJpb^}0Pz>DwkqBV zUXUR_ALLuXrpzKt{@>ve8Gp}iBL1G86J-m1&-B=P#g}Vp zo??}1dsdIm8Ms$`UlFI_w|mb;2CU%TYu@yC>9`^0m0~FYEBM^@+Md%*kH) z$NcXvZX4Tc1V-hm8294Yn1B`R z%KNhsi=Mc){w*tb^on2NX`NcRDIs79XTxMW^&C5JBHap}a4gK5dLzY?^1)MS zR&cdHCcBftzo6d4G%NV*)dylLUQ6-REqs5B6&$x!dw#CleoE*7wYe`r@HFy(%i=kc9g zTjz+kg7%+|EqzY8ZXVUIRh$+4 z#H6$7`QPd3nf^>Rg1U`~9wf6&wr67E7` zcI-*)&#d5$uQl?F@fUNaG$%UjJe9~q_cfj$!@oS4ZUuLq zUD~k8$r()oR&ehlMf@L?+!FuZiX@K}{N3v(jrRpD9?;ig1xI{3!QkKd%P5Z(9QRkb zKzQYcJT-pnl5Pd>J(gnhcip&BaaQoPqpjWA&Z?g8y4MTbEACoqtY^cF5;2hvHHx=_ zTkfbEnD}rF&(AaF#aqGqpZSR1$tm8LGa+CFFMef+;Tx`#>(lRqf6Qg`y@dVkJ5NNp zt>ChU`WyD#Rp4;E6}+MKfWXfahekZM=wQ4Rd}y4@kbnG{h=3KmdQwoItDTRe-w7|O zF+aW93&TC=_-+Bl6A}hEA@w|oe72GA5FA9{4o8q;CDMxf9zPiuM7u^jD9@qkzW9uM(cSQ5{tmuCp`64SgVrWmw7X`k2Bke6K zxL-!TXf5(ZR`8;XJp5SXi>%tKe?GN`de)K-N+XOW_l*3S;4b@a1@G|m6R`7A;isMw6yz|xF-(cSQhl`p1_X>vHdBJxF6a2w={T6b&^sET}%75sKE zUlbUCe32ELks}H;sq~eZFZx@&ESN6}teZU`#tOETGV(=%p?h*fS;1#28~LI@&Yd0I zR&aVSUlj0HtL?Ue9mp5WE!QpZZQoXLR&W>OiweBcGcXPLA}e@#O(S0vX#aCWj1|0c zw~;Rjyinifvw|a$FM8v6pFkAyMON^ZhDN?9Q1p5m-@W4T$QONdE+RnrA}hEB@>{(~hLiM83!h{^)_c?qTbm^HILY3cgd0h_~-Sz9{*KJ#Y&7 zA}iR;5k<0m(cj@78Tq1jkuS1>yCYxpMaeDc?;>Ah1)t5x7rlynkriBr<%_J~2FMrH zsr*nN4*4Q0*vt{FXZfPP!;Rl<|G7u^k4L%wLs!!-hX zkT0@=9nS{yMJtdmvV!lFBjW8( zg#3Y9BNQM0Z}$f&l#m#5P3XcVa)_KLb&*Tt7I{FqL|&0kprD!EugIbCf#N(nXsEg<(o)Fzd0_X|RL-Z8AL?X)GsQZY%qMzsw>MI6_fnpG7fEX;2 z#1JtQlq8bHFfm+=01Xo(#VGNl7!4XF#)z?EoEQ%pD<+5(F;PqcrHIL5ig-#)1x*pt z#B}krcm_0GJS%31nc_Ln3^7a07IVb&_`Co#SG*`*0?ifk#C)+pECkILi^R*~74fQA zES3N*2E7LK3hE{J_PSUqmWkykSD;=g-Vm!mE5&NDMywTYg4T$2V!hZPHiFiRO=7dy zBHjXR7F)$Ov0bEswuv1gO?ZV5lqUQlT?E8VP`cP9c8fh?FKD-TTkI42#R1ShaZnr* z?})>oL*j@yD&7^xKu5)U;<$KUoIv>j>K6vQ?EmciLHCC_!+fQeFYtHR_q+SUT?Kv4 zR$)EZ9G2h;)(+&CK z9)8b9|BgJh#|}&L?HxbMXm6LlsQ(N6oA3Cy-QDzWzE3_r&)*Ju`X<%$R~|LX;Q!QH z#Lwl-nHs$BvV2#4_L)K5=5Dx}>AoEsy9SGg~o>X1o)`giT~ zofzRB@pOkwefjH^ZS?QjyZ3I3@H=y-8rSaV*1|tWrTX)LzkdD}{+E|+^S6bbak(P> znfk@;!0g8Dz{io>nU4z}ckU;Ae7T=+naO3w8FtHi!sBZYnPT8+c`Ie|2R=sJhTQ(V zU!A7EW{k^kwPt4WTYg`zKgV1qmvbi_xWDl+<@)e;?uUF_xE$^SoQGe_$C~>a*O~Wa z`^47_pVXh7;o~;vbCZuz-9qCGKd(J2-pA)7A0s}#vPO!*|Hj)DeEeSAAGmHj&Tt>* zw&H!~^N8!f_2m8H`tZ5K=LNSjx99VSftbHuih-pN12MU9 zr*?{aWJAOmFU7;|h=Igo#z4d(FU3Hz8}U%w<1+cZW+Da>KgB?bdnBLY9{DQCqqKolV1@J#Y6HR!~rkGK>ly9(|o6UQQYG)9f*OXrx^oH9XcQe62BP( zu|{|)29h5l4tpu?{egH$*HS#Bv7>7#2J&_;hsK@sqaK=Y8b1;x?hUXWEvJDIW{&1AKhRC+WUs zd?QTpjr$Mx8SVr8UVL1*4Y~d_-_5b$*LFlaq;`sjTxYHWZ|8FOeYqTNE3OY8N3I+9 zJe9lSUbSwB^#~~g^i8{Wn zVH?w};A;y;dY-KLj<@u%XVR_UR<8~X96M4z_SZ_Q_rb(VaaM55!XcjYku`lEzP~=*3LZK*#q&$I_3ntP z)BRR(`oq(We-nJ)(-pS-TX@)@i%!ak{Hl(-tl)Q-jxlt|wPDF7EBNz-ss?|7{^?t+ z;1fxyn@OMJd-iX!f$Od5Krj~wS6_KZcMj=d!3yX|6BWBagX*J;jx0d9vK)|GO|@{w}HFkt>CiV1_gRM zo5rqO8Hl%n%U$p9nezGXu}!8QinoHhM^sGjmAALw+htt93T}ZIxNQ4sUoXT!D>xo8 zFiEwEorV}_1;2zCICxlhKgB>RxF}-ar!5-9Hbo4yg7+c@maS4Jb_imi75o=sV5RtX z+|>{Rt>BJ`fiE2{?|U0D&LyG$rAO>2&6!(7mrFLwMj2L(~JOD9pc>7-dMu>q{FvY!*_;&&mGGgG}a2dqF zobIN+6^MaWa8<;>d|&_WtBe?E1@}b^tdzHR9K}E@IP>ojp>H7zge(xUK*$0i3;efQ z;Q#jDj6?m)?0F%3gzUjB5b_6Z4Loaw-tn5rAR&8XGDpZiLh~b&Lxko>CUb=5M`(Uz za)|%e=Lelxr4y@C1kbGM#;MiY&#cmk)q)vkR_VlQk!;Sa(uvg)_i$#FPOR3qxx@T_XA@Zhv+@T_V*)WNf=4UO}v!LzDOa9Y(o zt4ilo>BK6XRc&LOS2fS7cEE|%cE(xN&c=Dw;91pf#(CA?S=AoKdDY-q)!sO-n%!B| z!Nz&j;91pVKL3<9gQ=pqm9$5qj6%DPOH)x))cf*Yw+wUom-uZ zGpuxWmCmhBLrrH_>D=nGsOjt~om-uSn$E7ifb*(!a`kzfU8QrY^H9^-RXVr22(@{3 zburGczLs%bbt&rQII&9SRq4d)>WovXYtXX7IJ5dD&{~{aU1^+SwSIn;POo}1&acwx z)j-DiRXV-8=N`_lzHgjhy|k`_e`l|s(i+a0?R)lx0sdXU(>pEkHO&!hCmi-su>E21 z5WmVL+{Dj$2va-pXO+p@`L$*{$tV0s79Fy-bAHm()W_6+M$dtU{@Q>MnRNDj)z)ZN zXx{-$atL!hdA~S6$s~S~$$7YLTqd^_zn1fJJ^8(UNDJ!!^Lx#GoF{T=OGE$h*P8nX zlRkv`wOj|ze*rRypJZ|#t{az`RR^>0Tpuoz`wU^?Cm%T7EQk+P++biDFB20FVeT^p z4!1F`J&1NLCo2z)HSuu%tbRy5rVi$PiQl}I>&*Mh?ZErU?RoyA=7yYKkM8j;{iVO5 zGhu3{ewpobU&8#pWD`>#y4K|3GI_svJD1O8avic>YwB~SvEbKoeK>#DU#q#>mV7&A ze$N##PkEm6=ik0LdVbGq1}=qmJKDQ}=O?sZLwk4N_Go{u=ZZAqk69_)1!gwbOt=i% ze?>d-KZf?Rd5hYqeaeAf(q54Ev>s@0w{l|I`S(v7*UkWLbK-Pb0@|B`=WSs(+D#ou zPAl+SeE+ne&(pxOfVn;-pUXK9JumgVX2{76+@;sG+wN=1p}sW1ea{HHA%8M(abSMm ztbH+U!uy`phUR^<+RC&K^_S~u>Q6FF-MHNdo4WD)66X4tcB6Jv2g2rkd4H*2U4C7a z_EXEkZqg_J?y}w@75m)QcXQl1KerF{{r%17qFW_Yac9M*Us3zE0n)wPaVpc;aochp z!sfNaL;8L5M{YaS@8Vuf6RLQrFWVt=q2p8&zc1I5 z-Sj;nd*RdHL97z1Gx$j}e!{ z+qvDi9BwP#N3w(Id)y{j^)dTP@=d=b`KE4J+f6%g`9Yn7cFWps+K}r>{H7c}j?`}Q z6E??%UrX{$U*$Z6O`CI>+^;wfVRP)V$~4=#&9lle$NK6%JP>4@y|IF4mP;|7bJuoW z9cKjx9|`%h;NRn7r&0o+PW@zSm5TZOR`8%ef8$(D^{0Dpv4R`CFvPRZQ+ivCf*aDU z;E_T3MxU+VZ&#)SW^5iC{>oGB{Z?>>eFAg$G}&SWpDj4RQ*F}gTYDTnlx_vjU$}?t z<4J*hE4V1^|6a}wTMs{&-)|L@-u}u#{=4CfK6+04IS+nE|4sZ`JZ)`)Vf)8@zr+nTk*4aD>&o+ z#x+(jjVbY^vGMvlTtsUYcJ;=M^pCc54Oqd0&-~@wGJ8nip)wodt>BqM;@%ox>S0gX zbCo?-@a(4L!%iM^#6MnoT)+w*H`VjjM?rp%6+E_kMb~KPv-7#i0V{aw^b%p4(BDR7 zHl$m@=V~3>axG|2j}=Vwqw*7PZ#BpEKaEpQcMHFka{#Rg9xIsiy4LjhFygm@^{Q3F z2RDy3_^seKPoI9P^sDs@ek*v*>26_#^Bgtww}Q{8Jz)=&DTvrR(PIU#gMG?m=wk(w zO+Fqz@uq$L4tIZNuc5~%x9u$}7&-?QZW(R*#(xwaoxWuA^&2&WL{ z#fMqJxxXFloB;Vd5I3ygqTLrdKMd+0u!5hS^t1zUnCu_0g6B7IZ9-h~G)7#qf`yT- zCU2#zHT@T=Lw5K-$q#~~6)Hm(2wC9&2@BAElRftsIQ0G2(1+|3@{iDb2+ar60{?P6 z;CWoSMd-U}=wKbPN5~%B0wI6k)(FLmkUxa{fm`6e%^&FeYVdulI_eyF<7!US^ybyz z8P>db_bR=0mEORb4{u=2W4wRWeD|vP-qm7w^J?(DtMty*5;(_7?_H&Lt`@-?SBv01 zt@Q5IBKTerZ(l8v@%~kM`)bvU_pkD^tn~KPS{d(Ob!41mb>Y3MF5^Tiy?vG5%zEow ztNH%bxQw%{<~vyVxz^j?zZ!h|Y73leZH4!+HbvbMCtI6>=v}Pz-c~x}+7{qGovghx-pfkwWF3I_vkuC5CuD z#yeR@p&otnovdSUs`c;R$vO=uTIrpv&)}SE@QiEld@H@5HTZ5;I^Q}6r(EgXtbcdD z^%cC0HF&=Db=34uRyyCh0(J0&>l)*fE4`DI-p9HQHNBIS-p9HLHNBHH_&(OHK&i(2 zSa+bNce2v^SpBH!ovide)?KLSovgw4vF<~CAme?khfp8RcpvLg)W?S@FF%hw?n? zAH(Ku6W2jk#SI~(luBwK zDRpU+Ib=?dP3DrhWgeLqbsm{d=9dLf7DQc0-X{x#3dtg}sJvem0~M9UKd|^tS#$+YRS6NE*;Vd zvP+i?li@M~6ec5Ol#G@!peX5 zJwV-MPuWW*%HFaM>fW-i>?ixn0jT@SfpU->3>qkt~E}xOl${BJdXgXSF z;M;WhoSY?R%Q^CS`2xyWsAr*VF3LG*e^I_9=Yd|7^W_56^W{R+^W`G>vU~-!NWLl; z%O&zPe3r=9PDfo!lrl$<1;L z%C}H&mD}WYnJRb4G*GJaN}u%0bdXO5%lbXdMCkIDDsanLdOzC0m6kS9SWSf04h+-{eJk33S;gf0us%{~@oS z{8Rpg@(Sv!@|wI3x{8(?Aff&OzG!^AhKX}UDv(rv%HO4?boD#_>^G^aKk(hAeuHG2 zx+HU`%V^K3a-q(ta;rQlugZs#P(GC(Wqwsa6;y@PeW1dsh$@P@Aj-n1?^nfCag@c? z1F8h-k|>LzE~QGVGODa9r^=%&jql}9mr@l}MO8^v#-CMC52`AvD(FG{c{NpC)c{pf zHB~KqFRN;+IzV+$*F{+xxFW7814MkKK~+%J!8dBFh_bS>D~EC_7s#Q)RJe*zk)UuD zrJ_}ga)Y8(tcp|d%7gMDRSzf*Wqs8^J**xUvjwORvOrPiu9 z)jG8v^rqUNHmXf(GiamQqTW(l)i%&uYP(8RJ5(AdRe6<9`Bl0KsGVvTKD&W-qu!(T zs<+iXl>6|fdqIAD-w&?+sQ04W1$;mqREN|%po8kLI--uEJgVMR$JBf3xO!imP#=Ka zS0~kn>LYau^r8A#eWE^9pMgG6r`6}`3-u-FbM=+_TAfkffWB7Ws_)cU^*ui4)OnzD zKxfhRgZfcjP(OiwR6na<)UWC{&@bwux}+|v-$9quAL@$wQ~d?HqOPiI>bkmt?c;SU ziPurzK&>=Qqi;&nHJg@0%cTMjkP9PQ>_`OiPl_ep|#Xnfm&#- zwKiH?tsTnts2@Y!0cCsC9kotcXHZA2i}twIRqKY&6F}Xy1g!_k9$HVWmzJpY2KCbV zXnnPQT7OVqZGbjV8>9`!XONbp4bg^b$taVxVcKwQgf>ze1sb6}sg2ggpd6!()y8S# zwFxLEXeru6ZIU)wo1#6XO$C}_loL@;(x#z(y7sj8jP@+b8K7r@XJ|9E=ZtSNwOQJ1 zZ4PLb_Pq9jHdlKQKU zeVMjgTLD_8t<>JoR%xq2YqYf}-_YK~XARIgZN0VuVYg@FpK%2F#+BR*w zma6U0(ljqhpXN8dZ9}>mm(k0DO6%qH@_GfmBB;DxNw2Iws8<11 z)~o8(^y+#Iy(Xx-UQ4g7*FjlFudCa2hwjA31r(-->k)b+$}l}jkJe*!Hz-)g>T!C! z?g7Q=59#&v`g#MD4fKamKB6}SJ*+oE`KaC)Wj%a*RBxg;1wD%IR5#O`12r~yo9iu5 zQ`uZ^skhQw>upfB(c9|n^!EB=pmur(y`$bq?+ogwchMi$yXxKaCqUhe`f-$9^#r|# z-c#=d>Y*pW0f$zihkthcP4@3J% zd>>|%18~J~{K*J?l>VeX8Z=5DqmR|c>ErbYD97q4`b2$_J{e_-K1F{@pNevtK3#tr z^;DG8P(PzTtIyD9>d)!3Kr{8(`W*dv{RMpH0==leq|ejmqn@WP&==~9KnwJj^;h&) z^~Io9^d0aFjO4I#%x*pJXg3|R}`fh!Xz8ADxe_P+D@7E8Y zJfI)c59#mdhxH?<59>$uclBfXdnk|U$AR9*=LFCP!1N~{;QLAaL;WMrN&S@mvHpqv zDd=PUGySywx&8&pFHwJm`fHS5qCTU4qkjuJqkpHL)xX!zfzImZ^&j*f^$Yq>pda<0 z^-sL0chE0o#4H!nPu|qM*XI`)$Q+#cdCuEP=YDt(2`a zsHClot*ot_tvsl#t%9wht&*)WJ`Vy_u~oHIvsDKL>l(J2wpzB@wmPV5+v?ivHU~aV zAeSx77LGF97GaCDMcJZ3k+v9{+ZJn!v&DlvM(su!YkSC6&sN{o094QRuKty)Pwk|q*-rK${;YO3ZCm`xYX9*Uw#Ia6GjRu($?ZTon0BUn znKHTE$W~tW-ZZimT{|6mk`0MxZ{9!}*_PXr%cpiBcGNPjCH+nNPyM6qR%*}MciuXNKYdh^1hP}ras&bS;v}>soAeP z$@x8OoA=4hJ7UVus_)C&BF1;=Kx!>l?*;~@cEZF%bDVh2kHz0N2T$VxkNBE5oabA= zKeg7e4}*9V_z4paVd9}{fzwR+gtN-z_sze??JNCRxciw>6@9<|km@Z3JhDNB+w?JY z<~$Yu`f)p5TX;x$-@?nj9mI33cbuVv$)B~|>=(DgTwFW#aB3~OmimHg)3WwAs~w1k z`d)AF0>dVCt5x)0ke|lA1>T zkkx0*v8MK#f!bd3lk*sN__mkEoyOYqH*UiOj62zf#yzWFnfKzp#O1Ub6!hB)n~G-g zPp;djB@2903wLxA5BF8>Z`=>LpL6?gU*fjnzW04c!{%PHIrk0DQv&07v`Q~8jbmQs z8{8(`m$(h@bS=ME)u7LK$!A>sgZrOR%Zm64I7a)(e}0ZA;^Tei{>FK@?{OaP!;SxZ z$nejm`}TXgKDWp4&nm_CdHJ>6CpnMW*m?)~XZNJNUe3e)mgD~L=h+8SYmsfaPx3M1 zzQ=uo`@_hfKX^@lFnx^sA(zAbjr$U}A@><>^G7EJ{WGq*^!@%^&<_c7-MCENNA5Gc zkKD(0Z!m1=B^z?z;5=P0F63`CF5EY`UvWRo2R|Wx@{>DV%kP!p177k0zTd81ZJgn6 z7q|Z9kGQ zK1TW1KI=bq@uYiNEr+|xZ%_NTANtt++pd~!YEK2Ou(+ntKKsKD+{=G--qxO#KlzJ- zH{~3@nDZvT|J@~CQ$Dp<&A8XQJC}IPd(pMLop6ULhuys&*=g`x%XP&4*W>9o`AH@p zBR&_n|MM~J6!ZZv`2hEAe(i(sEAoHxD?VSU!k?*~{F#qC_kVsZZ|C=_9rR%@`7nQO zE%3;AW4?T`?))9+5%+V>&*uf7M<@O~=$*0tCAU3g&i~immB80@ZEso?L4#C74S5<= ziPn=F!ad17k}7HnF|@Dd8q=a$MGftZSzk>xln_LNSK6v3DUy@qC?2IX6Wa3HXL_o` z)4w6q^xxk(cg4zm5<8*4*Z1qr@7MaQth3KPYp?aKZ|`#>2KTx0=jIvHg*~RhoIG`O z?acNx*kg~(%wy-{@H*m{$C=kitcZCn!P|&Ak0H-<9#6h^=03a@c>Z&LzBlK5%WH(^ z|3Aa$TY0`9Vz_hrg?Fv|KN}RRksX-qZ8jt}J?`np^9S8n37Ou{0w_>68^Z4;b%h=VKIP2J7<6GkyfoE;rSRWWZyM$(g zPrF+0SabIMuDa$pI>&mJAH4F#4>M>=%6!joaBVPN-*`e+DGxjt_ra`;VS` zwWIYn81R`AxlfC2{;7q*74T0lGsBus-;>KMyfA9F7L;ZfiCbo7HmkiyOWB)dVem$W z^ULyJy4E+libfdY;9B@^ZWWwsj~^VYk$uHyK^Fcl;VaGeM*Z9R(6tNQN3^=;les=L z&r^T@LfbsMnPsOrV-B!4efTp2*!x;OPs|5A#yRS=xHk4sGs}+nfUh{$0TcI<9efLn zYc+A-(Q~F)&mR2YGGp%7lPuh_&RHkn@FmM~eP-Ucl4~DWslGS5A_Jn^Muh;I1g~X<-Ec9dB4p? z2DoUy;ISEN=NsTL&avE|^KDtdrQm9CDd!x{y?jh==i^_tdC~w+^0P(9G@2P86bES@!>qoxh0w^^S1}qZhy*Jc%AbcJMP{&ZV5+#&>)^GfnikFGOEMtjPaz*ewh@aSpB} zj91>%ZP{qnPk2iMR>7f%QVo3XNevS0J|HUIzFaYX=`- z_{T@>HmHwB*4|^Fk7HfPXM$MA3^5MY@rqbGvcre!4sk~9AXi6<{2?FY(!d1=4dfx_ zA2fEqK^lpCV5hkuK0A9HFrb~HMZS>_@OM4;8l+F)k7vXhO^)1WK&#*xi4!m;YLGM= z=0-6GCcOtA*vX%?ANgQDz@+zROmBahGwl2s>Dota?PoyOjS}_lXnV{+y+h$nDF zi{086@!^(!DA^HD#1KB`O5W13(5R$Kp=rqn zYr$hqKG3ebM{vEt^Ooxq?=fi(yr=No;C+W{Dy~1d&gA-v`^?_#3oT~^opx%AZCz(T z*A?q}5qoOmWyd>t>|B5HamEVmmnO!6_T!jqQGV^ZPr7E{zO!7<8rhs(>!o46xDFrv;IEb@U%Ir3_Lucroj4Dv*rbKQbA#*fp2DZ1ct-{w zZs+6IvvWX04)A-Odw+{_bM?R{eh3US_&AYYY;leYJ>4|BVNK(BQ^WbD!2253)IM6D z;oN-uy3^nHkn`bgY0mx;eVc9{^rH4%H^aHBM&J{t0s}SJW5l~o*!lctPcWUG*4Ng2 zW3tx`Z@=03cQKBS@1gYa!XM8F|4L$>v5(|5#XO&R?VI$W0`C~OT&pPTEyei*?EOdn zkX}rTKlFzr?PlGFjMs$EwLxhX#ycQj?!(97dByi5JP&zZ@%;#|alRMu*bVQ!3BMM+ zvHWs>gZ3~@cjtiD?ty#2jhG1gZO>DG2IK#g*k9Nj5*Mr!rM;%@Bzj%A}7W8x%&m4+pyza z@S%MKH z@PkfZ(ynCxzE%A^+MACLjB6K6TV`+_!uti+ki5Te-NpMm@5TLW4PcpO^&It`kX9)bhy#Mk(2#mU*eIoTc@}YeqYJ~QN zycbhVp|24}4g+Jq#`_@eecnCJ)nd1SJuKN#kLV**%ig^V$2mOe81ns$Q*E`^Y zYq7UNF91gEc=rX^Y0rgcr#%#7bDQ3u2j*u}d`$j%(P<}_WcGb^o^xrdH5zc>+|$m| z=MLp!vcm`V{Q8vlXL0Fs%RDFf=WJoeyHuji#5xJpl9&Gm=VDun<7Q}rB|D)el ztAD|tdKq2I`xN&tw%NYd2cwte>4UtN;e1J~uU4Y}GUMkKOD+DdJUk)KJ1O4d=saqt zxykCqm;?GF?j>?Vd-b4g2S$(PbKrfM&Qic9{QLxV%!j|1gf7K?aQGuRY1jkup2+uu z@S%Mo@2%TfY;ks2zcT%c3FVAFH#a%|y`idcKJ|rk-i!HuneTZki9PHK5q;CJhkY>1 zaJCWS?43|9&tAByz0Wn^Gva|P=g(sN>!~j|`S}dj1AK1$THYUd-{f=P8i4ox_F;;q&G~)7p1a%=uXmA3w;}3NBxGZ3uZRbi*K zyWRN-_W_*~ha0u6Ce0_Ni zfI~1QaSQqpaSkx}jgQ0U!!;q-ex&he-+}p%HUoy8e4qpQbLFR($OmWmx5J1D?3gn+ z9C-VReFo0b$&Ow?7|%%k3%%+4x(luT75m`k-2Mf7PS8TD$8kIQ8uurh=+y_k^^%D5 zf9$n+k3)Y4KSK}jeK&s(2#rBL^nMds2zGie!{3`=Oxzdxgzw+!+3_si&q)26?CiPH zslWGobzVC4chUEAG3?|6Jpi8)-4m^Ty~GnA(hRUK?KMh+o%dG4=;Ofj9*6fq-uvJq z@+$Y84&sAap#Hmc^jat9E8ffU<78gHoXK&NgtCAhHLu2Av!Wf@?z#Cl4@%-mG4?Af&t`9j^@NqbAaQ{BG z<}sjo^3#62cXMv>)VKkz;5@@?AJ0W`@P6+Mo)SokHLk(9Hsd_Q`2qeL zvo_Yp{CRx%I9$JBKF}&yBR+q!V?O+O$&PioogL#4Z-9R|Kad@q11xgJz^ZZde#|-2c&tcvN`L#S(d4BRdjuVo%LzAii_JcfKt`Ivkyu%=iG#FLND*ZPO}xmNGP`5Uh( zUPn9*`CZHJ#mC|E=kr9&Y3;ZVUkj`kX%A=^@CoflNUQKQ#a@Qagy{^{`z)8Q5kH&d z`yiY}^Y^644ZLIJdnjN!C&yj@KG<{d^J>`XoD=t=cZl$zccwi4JZJbkdHi{-__cZb z*}8u`+^tvidotqD6>TE&!(*e}ddty28H2{mkGLB=MvT*9^iNu{80T&<=DDZLlbKCc z*>k=ft{GO&#J^zsNW;!%emFhlbQXLb_-j8?3a=Swjd?PqmMdKXpIF}{^UD{-T>G`l z%n#=`xBTpBY|b*6=6Qn6xgh*tNGmHQ&zBpk%ix|v$7_?b-MV8>`OMz}uRORae4zNf zrRVv~~vanJL16VEGyzuWSfb+1m&(5L%9Y|7x;Ek{Kh+x}e0sA+Cf2EWaoR|XHhY5y+Ms9kSqGWc1aN;Y4mwl`&P zyTF-Ri|o#Nm1cgX48}8Jz36%GgeTkaG!ai39J8^EHU3fYJ6!Jue`Bw^`KDNR8T?e} z;_&;Ach*N#@iS#`)iX(2cDGJ?^2_B-8T@wF723E?o%Azf%bPMdHGZtVF|thP^F9$- zGMI9s)}C8=QV{Ma*1dUlXS2FkcNsj&lUKz>UdiD1uDZ>(A5Anuo^F^SgTGDOk@eYu zr}Tg^_n9&{Ma1XX6BR;xi1^6hF?Re-#9s!-h2ek^h>vbnAasc^h z<+BWK^wvj~zY)M@C|KbS;y=D|>CkB%J4VRh6;b;ze=Ghn_yv*AexaSrmqb3x z;LF3xn59q5O8;VAS6v35`NSoD=ePa)Vq|cOWZVB2*P{*@-2cbE&Y>coi;H}g!B@X^ zo9{HuZq%V;3^f68e9y<~ft;=BC^K4I77~S(8VRKCCq4l0I?-9mm{P!6Z4L?!O#|RSf z=`VO*2IHRJtB>YXz3!&Nd)xki@!#Z~_GC{qU4D}F?qJ~GGUtlHa@ z!P)J`=m%T)g}%4Dt4juNTJ&`;-^$=MYlA`&Ke7I%44zr4ih2Fy)4!jINA5a zEay%SKi>(@f9pq0>yy*CjX1ZF!J}*RbG|Yp*1RbAM+U!Z^S{~a##Dz4zUuKugkPW{+VT1Hn zCLYfEBV*LSfvLkbm^-UM^WGKS`tIb$p7k;B0_$rQO%9v2#pdLq;-I=aLk5HmGAD`k z{UhT@TMJoQR0an!e;J%3w9sI|MWuyylEFQ{2{v7&BFxvXOo%8fCaw4h(~Sk;k>XyD zmx|E)hO%Q^udvy^ytbj=cDvT@1s<+P7`yiS>pMT~sQ;01<$b=ndmI^z z^{v+kW#zJ6U1kh2Ww7Ud`g0lS$%VzxR3$@vLsxn9 z)t&IvI<58B%2qemE_x_j22T-sZ}!NXtfoTm$>3#=e51KDuVg(lx|b<~D+&GiddXk1 zDhT~4gU41*invo$>FjEHmgkhEaPY& z8QhcYm1Hn_&B;;c==|hfVYB15H^Q!Nuyw_~z}3WA%9Y>%bE4SO$>5@{>G3l&1XtlJ z&MX+m=>tlg5PKBM_nzT1trDqs>qW=*oGLCK6GHQo!M3k`Z9&*i>}Pw59Bw5vc7E7% z-#gTowZEg>!(OkbSZ}`dP_8z<3v8Cmx}}|piZ^}gHha9(E&Ny+E%R=$Cx&{5Itk*8 z4PS8u;wLR}80U};;W_CvF6d7DRZ6N%0%v}b<5B?<*@SgV0I5_Emt83D9M^M#RT?QwJ zUhEmyl);0JUvh|;XCeMFxTdWqv!EwsFk;!XZCN_EzgJiTPU$A8cY}M_XQ$?UYvPToE6<^^(CEsctiUbdQWqEyFYK6-Heb6mRcmsyy;(GkVDU@G?h(^m~OH)bugF z3=Ytfgszjpo;g`uT^OA9SZS&$y&(MVRKw{P7^`2Ke<16B1uqbLz>A0bM_@lFgR$pL zjV$+RgOc|C_rHNDwCDIP;BX7A4EzHsZYH{bqH{0ph$x25VKrT=C`Fn`wv3n=-hW@LyK0 zz5cQAm%()o+C5;w!_yox_}oi7jZV*3()W&Nugl=py|)=vT$S~jVl8BFJ)xHdRqXGm zDfE&IZf&ofo<6&HT4C{kf6R{<8eH4ax`SJn!Qs;kXNAC6^9R8X|0{UK`2)#Igg(Ss zt_-Hy6#I_c+AIin@#wC`#}=o^VAM(tN21Vu_$oSnZP9bCY9sx%)1hN@8SJ^AbnjSq zBFFLXQT}?O&>O!u?0J?#^zXv;dh`2tg)YQboGydmCq7HMzQl4{OBWSq&V5C^Kd|>= z`Qf&rW-+riqGo0ACCZ(-XP5CxgG;)gX1}oEf4{;&d5o z$5%ei4OWB`N9r=T;gF}z8;9m+WS$Pve+xV|-p;FU2ZZP{_~*UWeq6s)VoZn(Mh+gG zb?dWyMa7i!`&s@Mgr64mwdww;R(;9fsKGmpuFqF8_XzzXgDcG)h#WDG51#Fi!EgBZ z7&pY8$Svwf2Iu_WPNRQffSz!@y)J{FbXCYeE{dPy(+i6!hXvP(XTn#UDT8fa+y6gt zoL*=CA#rwNeZR;!cvt|2qf=@ypU6O$HC^9Z?pRrrLQU=#!IVpqZJ+(7s?$i!u zOOcZ@7_o{z7iq1j4324Gt&6!ttcwh;{Jy`H@4ZFN$l%e@F8%Q_A8H{@f^`}EYNdh3 zlht}{Sa{Q|%i#Rx5G_7;^!a{&bC>ws(H|MVZpYtni1^FkS48{+%Jm9E{AKVh?*6@? z;+~19KkY!MIH))v0xAzw9;iG}b)a}a@qpq1#RG~56b~pKP&}Y`K=FX$0mTD~2NVw| z9#A}>ctG)h;sM12iU$-AC>~Hepm;#>fZ_qg1BwR}4=5f`JfL_$@qpq1#RJ|v!2eBb zQ<4nB3B^-IO~uOAL;diJLk5e>A%VYq%o)B@}NvBgU@!uN6i*P<4r zzWq>~b^p^h+#e4V-=q5nz42I+Izxv=oGZ7$y1(mikYjC3k}E3lRja0ipMLaOo8*W7 jR>gXr30K`8yTtc|PZq}So%42+DHjqVB7NV8!2SOpLH9q{ literal 0 HcmV?d00001 diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 3021a3f6..a7a8edaf 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -30,8 +30,8 @@ int main(void) { engine.getProject()->copyAssetFile("Models", "glock", "ImportAssets/glock.glb"); engine.getAssetBank()->addAsset("glock", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "glock.glb"}); - - auto mesh_id = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("cube")); + engine.getProject()->copyAssetFile("Models", "pistol", "ImportAssets/pistol.glb"); + engine.getAssetBank()->addAsset("pistol", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "pistol.glb"}); /* auto entity = scene->createEntity(); @@ -39,18 +39,18 @@ int main(void) { entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(0.1, 0.1, 0.1))); scene->getRegistry()->addComponent(entity, RenderComponent(mesh_id)); */ - auto mesh_id_2 = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("glock")); + auto mesh_id_2 = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("pistol")); auto entity2 = scene->createEntity(); scene->getRegistry()->addComponent( entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f::Constant(0.1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); - scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "glock_19|Shoot", .speed=0.1f, .loop = true}); + scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "PistolArmature|Reload", .speed=0.1f, .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); camera->backward(2); - camera->up(1); - camera->pitch(-30); + //camera->up(1); + //camera->pitch(-30); scene->getRegistry()->getSystem()->setCamera(camera); int i = 0; @@ -59,7 +59,7 @@ int main(void) { engine.step(); - scene->getRegistry()->getComponent(entity2)->rotation().y() = 90; + scene->getRegistry()->getComponent(entity2)->rotation().y() = 0; //Render system duty int display_w, display_h; From 34869f42f9be100c7df727f6d9073c27659fa32d Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 13 Dec 2025 18:33:17 +0100 Subject: [PATCH 13/21] WIP on skeletal anim --- ICE/System/src/AnimationSystem.cpp | 7 ++++--- ICEFIELD/icefield.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index ac1a19d7..27b244d0 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -133,7 +133,7 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& Eigen::Matrix4f posMatrix = interpolatePosition(time, track); Eigen::Matrix4f rotMatrix = interpolateRotation(time, track); Eigen::Matrix4f scaleMatrix = interpolateScale(time, track); - + /* float Sx = nodeLocalTransform.block<3, 1>(0, 0).norm(); float Sy = nodeLocalTransform.block<3, 1>(0, 1).norm(); float Sz = nodeLocalTransform.block<3, 1>(0, 2).norm(); @@ -141,11 +141,12 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& originalScaleMatrix(0, 0) = Sx; originalScaleMatrix(1, 1) = Sy; originalScaleMatrix(2, 2) = Sz; + */ - nodeLocalTransform = originalScaleMatrix * posMatrix * rotMatrix * scaleMatrix; + nodeLocalTransform = node->localTransform * posMatrix * rotMatrix * scaleMatrix; } - Eigen::Matrix4f globalTransform = parentTransform * node->localTransform; + Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; node->animatedTransform = nodeLocalTransform; if (skeleton.boneMapping.contains(nodeName)) { diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index a7a8edaf..807135cd 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -43,12 +43,12 @@ int main(void) { auto entity2 = scene->createEntity(); scene->getRegistry()->addComponent( - entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f::Constant(0.1))); + entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f::Constant(0.001))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); - scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "PistolArmature|Reload", .speed=0.1f, .loop = true}); + scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "PistolArmature|Fire", .speed=0.1f, .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); - camera->backward(2); + camera->backward(10); //camera->up(1); //camera->pitch(-30); scene->getRegistry()->getSystem()->setCamera(camera); @@ -59,7 +59,7 @@ int main(void) { engine.step(); - scene->getRegistry()->getComponent(entity2)->rotation().y() = 0; + scene->getRegistry()->getComponent(entity2)->rotation().y() = 90; //Render system duty int display_w, display_h; From 08d4976310e256a48290f5efcfdc4ccfab41739f Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 14 Dec 2025 00:00:14 +0100 Subject: [PATCH 14/21] Skeletal animation first test passewd --- ICE/Graphics/src/ForwardRenderer.cpp | 1 + ICE/IO/src/ModelLoader.cpp | 3 ++- ICE/System/src/AnimationSystem.cpp | 2 +- ICEFIELD/icefield.cpp | 6 +++--- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index 4f99678a..82f6ebc3 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -145,6 +145,7 @@ void ForwardRenderer::prepareFrame(Camera& camera) { shader->bind(); for (int i = 0; i < model->getSkeleton().bones.size(); i++) { shader->loadMat4("finalBonesMatrices[" + std::to_string(i) + "]", model->getSkeleton().bones[i].finalTransformation); + Logger::Log(Logger::DEBUG, "ForwardRenderer", "Bone %d matrix : %f", i, model->getSkeleton().bones[i].finalTransformation.determinant()); } } diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index a51f72cf..4815ee3d 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -18,7 +18,7 @@ std::shared_ptr ModelLoader::load(const std::vector> meshes; @@ -246,6 +246,7 @@ void ModelLoader::extractBoneData(const aiMesh *mesh, const aiScene *scene, Mesh if (data.boneIDs[vertexId][i] < 0) { data.boneWeights[vertexId][i] = weight; data.boneIDs[vertexId][i] = boneID; + break; } } } diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index 27b244d0..cf07fe9f 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -143,7 +143,7 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& originalScaleMatrix(2, 2) = Sz; */ - nodeLocalTransform = node->localTransform * posMatrix * rotMatrix * scaleMatrix; + nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; } Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 807135cd..f1fe7cee 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -43,12 +43,12 @@ int main(void) { auto entity2 = scene->createEntity(); scene->getRegistry()->addComponent( - entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f::Constant(0.001))); + entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(90, 0, 0), Eigen::Vector3f::Constant(1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "PistolArmature|Fire", .speed=0.1f, .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); - camera->backward(10); + camera->backward(1000); //camera->up(1); //camera->pitch(-30); scene->getRegistry()->getSystem()->setCamera(camera); @@ -59,7 +59,7 @@ int main(void) { engine.step(); - scene->getRegistry()->getComponent(entity2)->rotation().y() = 90; + scene->getRegistry()->getComponent(entity2)->rotation().y() = 0; //Render system duty int display_w, display_h; From 875e73161395ca8e17eb4ce8c0ba7f38ae412315 Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Sun, 14 Dec 2025 21:20:46 +0100 Subject: [PATCH 15/21] fix segfault in test --- ICE/Assets/test/AssetBankTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ICE/Assets/test/AssetBankTest.cpp b/ICE/Assets/test/AssetBankTest.cpp index 34ff34fd..7c7ccd11 100644 --- a/ICE/Assets/test/AssetBankTest.cpp +++ b/ICE/Assets/test/AssetBankTest.cpp @@ -18,7 +18,7 @@ TEST(AssetBankTest, AddedAssetsCanBeRetrieved) { ASSERT_EQ(ab.getAsset("a_ice_test_mtl"), mtl); ASSERT_EQ(ab.getAsset("lol"), nullptr); - auto mesh = std::make_shared(MeshData{}); + auto mesh = std::make_shared(MeshData{{Eigen::Vector3f()}}); ab.addAsset("a_ice_test_mesh", mesh); ASSERT_EQ(ab.getAsset("a_ice_test_mesh"), mesh); ASSERT_EQ(ab.getAsset("lel"), nullptr); From 4ec6d300ba2f28cf199486e1c8c16c09beafd96c Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Mon, 15 Dec 2025 15:39:28 +0100 Subject: [PATCH 16/21] working fix for double-scaling in skeletal animation --- Assets/Shaders/phong.vs | 8 ++++++-- ICE/Graphics/src/ForwardRenderer.cpp | 7 ++++--- ICE/System/src/AnimationSystem.cpp | 15 +++------------ ICEFIELD/icefield.cpp | 6 +++--- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/Assets/Shaders/phong.vs b/Assets/Shaders/phong.vs index 8d86d564..3fc52487 100644 --- a/Assets/Shaders/phong.vs +++ b/Assets/Shaders/phong.vs @@ -22,8 +22,12 @@ void main() { vec4 totalPosition = vec4(0.0f); vec3 totalNormal = vec3(0.0f); - for(int i = 0 ; i < MAX_BONE_INFLUENCE ; i++) - { + for(int i = 0 ; i < MAX_BONE_INFLUENCE ; i++) { + if(i == 0 && bone_ids[i] == -1) { + totalPosition = vec4(vertex, 1.0f); + totalNormal = normal; + break; + } if(bone_ids[i] == -1) continue; if(bone_ids[i] >= MAX_BONES) { diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index 82f6ebc3..a596cc65 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -134,7 +134,7 @@ void ForwardRenderer::prepareFrame(Camera& camera) { auto materials = model->getMaterialsIDs(); auto nodes = model->getNodes(); Logger::Log(Logger::DEBUG, "ForwardRenderer", "==================================================="); - + for (const auto& mtl : materials) { auto material = m_asset_bank->getAsset(mtl); auto shader = m_asset_bank->getAsset(material->getShader()); @@ -145,10 +145,11 @@ void ForwardRenderer::prepareFrame(Camera& camera) { shader->bind(); for (int i = 0; i < model->getSkeleton().bones.size(); i++) { shader->loadMat4("finalBonesMatrices[" + std::to_string(i) + "]", model->getSkeleton().bones[i].finalTransformation); - Logger::Log(Logger::DEBUG, "ForwardRenderer", "Bone %d matrix : %f", i, model->getSkeleton().bones[i].finalTransformation.determinant()); + Logger::Log(Logger::DEBUG, "ForwardRenderer", "Bone %d matrix : %f", i, + model->getSkeleton().bones[i].finalTransformation.determinant()); } } - + submitModel(0, nodes, meshes, materials, tc->getModelMatrix()); } diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index cf07fe9f..db687c81 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -133,21 +133,12 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& Eigen::Matrix4f posMatrix = interpolatePosition(time, track); Eigen::Matrix4f rotMatrix = interpolateRotation(time, track); Eigen::Matrix4f scaleMatrix = interpolateScale(time, track); - /* - float Sx = nodeLocalTransform.block<3, 1>(0, 0).norm(); - float Sy = nodeLocalTransform.block<3, 1>(0, 1).norm(); - float Sz = nodeLocalTransform.block<3, 1>(0, 2).norm(); - Eigen::Matrix4f originalScaleMatrix = Eigen::Matrix4f::Identity(); - originalScaleMatrix(0, 0) = Sx; - originalScaleMatrix(1, 1) = Sy; - originalScaleMatrix(2, 2) = Sz; - */ - - nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; + + nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; } Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; - node->animatedTransform = nodeLocalTransform; + node->animatedTransform = parentTransform.inverse(); if (skeleton.boneMapping.contains(nodeName)) { int boneID = skeleton.boneMapping.at(nodeName); diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index f1fe7cee..450c586e 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -43,12 +43,12 @@ int main(void) { auto entity2 = scene->createEntity(); scene->getRegistry()->addComponent( - entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(90, 0, 0), Eigen::Vector3f::Constant(1))); + entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(0, 90, 0), Eigen::Vector3f::Constant(1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "PistolArmature|Fire", .speed=0.1f, .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); - camera->backward(1000); + camera->backward(20); //camera->up(1); //camera->pitch(-30); scene->getRegistry()->getSystem()->setCamera(camera); @@ -59,7 +59,7 @@ int main(void) { engine.step(); - scene->getRegistry()->getComponent(entity2)->rotation().y() = 0; + scene->getRegistry()->getComponent(entity2)->rotation().y() += 0.1f; //Render system duty int display_w, display_h; From 2f778b47f81c1263e4d3e937475299490a81be4b Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Mon, 15 Dec 2025 17:46:15 +0100 Subject: [PATCH 17/21] another model another bug --- ICE/Graphics/src/ForwardRenderer.cpp | 5 ----- ICEFIELD/icefield.cpp | 9 +++++---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index a596cc65..ff515823 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -133,7 +133,6 @@ void ForwardRenderer::prepareFrame(Camera& camera) { auto meshes = model->getMeshes(); auto materials = model->getMaterialsIDs(); auto nodes = model->getNodes(); - Logger::Log(Logger::DEBUG, "ForwardRenderer", "==================================================="); for (const auto& mtl : materials) { auto material = m_asset_bank->getAsset(mtl); @@ -145,8 +144,6 @@ void ForwardRenderer::prepareFrame(Camera& camera) { shader->bind(); for (int i = 0; i < model->getSkeleton().bones.size(); i++) { shader->loadMat4("finalBonesMatrices[" + std::to_string(i) + "]", model->getSkeleton().bones[i].finalTransformation); - Logger::Log(Logger::DEBUG, "ForwardRenderer", "Bone %d matrix : %f", i, - model->getSkeleton().bones[i].finalTransformation.determinant()); } } @@ -199,8 +196,6 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& } } - //Logger::Log(Logger::DEBUG, "ForwardRenderer", "%s %f", node.name.c_str(), node_transform.determinant()); - m_render_commands.push_back(RenderCommand{.mesh = mesh, .material = material, .shader = shader, diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 450c586e..4e536f02 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -32,23 +32,24 @@ int main(void) { engine.getAssetBank()->addAsset("glock", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "glock.glb"}); engine.getProject()->copyAssetFile("Models", "pistol", "ImportAssets/pistol.glb"); engine.getAssetBank()->addAsset("pistol", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "pistol.glb"}); - + engine.getProject()->copyAssetFile("Models", "Adventurer", "ImportAssets/Adventurer.glb"); + engine.getAssetBank()->addAsset("Adventurer", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "Adventurer.glb"}); /* auto entity = scene->createEntity(); scene->getRegistry()->addComponent( entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(0.1, 0.1, 0.1))); scene->getRegistry()->addComponent(entity, RenderComponent(mesh_id)); */ - auto mesh_id_2 = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("pistol")); + auto mesh_id_2 = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("Adventurer")); auto entity2 = scene->createEntity(); scene->getRegistry()->addComponent( entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(0, 90, 0), Eigen::Vector3f::Constant(1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); - scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "PistolArmature|Fire", .speed=0.1f, .loop = true}); + scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "CharacterArmature|Run", .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); - camera->backward(20); + camera->backward(10); //camera->up(1); //camera->pitch(-30); scene->getRegistry()->getSystem()->setCamera(camera); From 1a58333dac433342513344d9564bc17cd4b47844 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 16 Dec 2025 17:14:49 +0100 Subject: [PATCH 18/21] add default bind pose for skinned meshes, correct distinction in renderer --- ICE/Graphics/include/Mesh.h | 2 + ICE/Graphics/src/ForwardRenderer.cpp | 9 +++- ICE/Graphics/src/Mesh.cpp | 20 +++++++++ ICE/IO/include/ModelLoader.h | 3 +- ICE/IO/src/ModelLoader.cpp | 35 ++++++++++++---- ICE/System/src/AnimationSystem.cpp | 61 ++++++++++++++-------------- ICEFIELD/icefield.cpp | 4 +- 7 files changed, 89 insertions(+), 45 deletions(-) diff --git a/ICE/Graphics/include/Mesh.h b/ICE/Graphics/include/Mesh.h index c117d65f..6d2f7cca 100644 --- a/ICE/Graphics/include/Mesh.h +++ b/ICE/Graphics/include/Mesh.h @@ -49,9 +49,11 @@ class Mesh : public Asset { std::string getTypeName() const override; AssetType getType() const override; + bool usesBones() const { return m_has_bones; } private: MeshData m_data; + bool m_has_bones = false; std::shared_ptr vertexArray; AABB boundingBox; }; diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index ff515823..45fbd626 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -166,7 +166,6 @@ void ForwardRenderer::prepareFrame(Camera& camera) { void ForwardRenderer::submitModel(int node_idx, const std::vector& nodes, const std::vector>& meshes, const std::vector& materials, const Eigen::Matrix4f& transform) { auto node = nodes.at(node_idx); - Eigen::Matrix4f node_transform = transform * node.animatedTransform; for (const auto& i : node.meshIndices) { if (i >= meshes.size()) { continue; @@ -186,6 +185,12 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& continue; } + Eigen::Matrix4f node_transform; + if (mesh->usesBones()) + node_transform = transform; + else + node_transform = transform * node.animatedTransform; + std::unordered_map> texs; for (const auto& [name, value] : material->getAllUniforms()) { if (std::holds_alternative(value)) { @@ -206,7 +211,7 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& } for (const auto& child_idx : node.children) { - submitModel(child_idx, nodes, meshes, materials, node_transform); + submitModel(child_idx, nodes, meshes, materials, transform); } } diff --git a/ICE/Graphics/src/Mesh.cpp b/ICE/Graphics/src/Mesh.cpp index 44f689b2..0c510051 100644 --- a/ICE/Graphics/src/Mesh.cpp +++ b/ICE/Graphics/src/Mesh.cpp @@ -11,8 +11,28 @@ namespace ICE { Mesh::Mesh(const MeshData &data) : m_data(data), boundingBox(data.vertices) { + for (const auto &boneIDs : m_data.boneIDs) { + for (int i = 0; i < MAX_BONES_PER_VERTEX; i++) { + if (boneIDs[i] != INVALID_BONE_ID) { + m_has_bones = true; + break; + } + } + if (m_has_bones) + break; + } } Mesh::Mesh(MeshData &&data) : m_data(std::move(data)), boundingBox(getVertices()) { + for (const auto & boneIDs : m_data.boneIDs) { + for (int i = 0; i < MAX_BONES_PER_VERTEX; i++) { + if (boneIDs[i] != INVALID_BONE_ID) { + m_has_bones = true; + break; + } + } + if (m_has_bones) + break; + } } const std::vector &Mesh::getVertices() const { return m_data.vertices; diff --git a/ICE/IO/include/ModelLoader.h b/ICE/IO/include/ModelLoader.h index cedcff1a..35f51ebe 100644 --- a/ICE/IO/include/ModelLoader.h +++ b/ICE/IO/include/ModelLoader.h @@ -25,7 +25,8 @@ class ModelLoader : public IAssetLoader { std::shared_ptr load(const std::vector &file) override; - int processNode(const aiNode *node, std::vector &nodes); + int processNode(const aiNode *node, std::vector &nodes, Model::Skeleton &skeleton, std::unordered_set &used_names, + const Eigen::Matrix4f &parent_transform); std::shared_ptr extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene, Model::Skeleton &skeleton); AssetUID extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene); AssetUID extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type); diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index 4815ee3d..0f204597 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -17,9 +17,10 @@ namespace ICE { std::shared_ptr ModelLoader::load(const std::vector &file) { Assimp::Importer importer; - const aiScene *scene = importer.ReadFile(file[0].string(), - aiProcess_LimitBoneWeights | aiProcess_FlipUVs | aiProcess_ValidateDataStructure | aiProcess_SortByPType | aiProcess_GenSmoothNormals - | aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_LimitBoneWeights); + const aiScene *scene = + importer.ReadFile(file[0].string(), + aiProcess_OptimizeGraph | aiProcess_FlipUVs | aiProcess_ValidateDataStructure | aiProcess_SortByPType + | aiProcess_GenSmoothNormals | aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_LimitBoneWeights); std::vector> meshes; std::vector materials; @@ -34,7 +35,8 @@ std::shared_ptr ModelLoader::load(const std::vectorsetSources(file); } - processNode(scene->mRootNode, nodes); + std::unordered_set used_node_names; + processNode(scene->mRootNode, nodes, skeleton, used_node_names, Eigen::Matrix4f::Identity()); auto model = std::make_shared(nodes, meshes, materials); if (scene->HasAnimations()) { @@ -46,24 +48,39 @@ std::shared_ptr ModelLoader::load(const std::vector &nodes) { +int ModelLoader::processNode(const aiNode *ainode, std::vector &nodes, Model::Skeleton &skeleton, + std::unordered_set &used_names, const Eigen::Matrix4f &parent_transform) { + std::string name = ainode->mName.C_Str(); + if (used_names.contains(name)) { + name = name + "_" + std::to_string(used_names.size()); + } + used_names.insert(name); + Model::Node node; - node.name = ainode->mName.C_Str(); - // compute local transform (relative to parent) + node.name = name; + aiMatrix4x4 local = ainode->mTransformation; node.localTransform = aiMat4ToEigen(local); - node.animatedTransform = node.localTransform; + node.animatedTransform = parent_transform * node.localTransform; for (unsigned int i = 0; i < ainode->mNumMeshes; ++i) { unsigned int mesh_idx = ainode->mMeshes[i]; node.meshIndices.push_back(mesh_idx); } auto insert_pos = nodes.size(); + + if (skeleton.boneMapping.contains(name)) { + int boneID = skeleton.boneMapping.at(name); + + Eigen::Matrix4f finalMatrix = skeleton.globalInverseTransform * node.animatedTransform * skeleton.bones[boneID].offsetMatrix; + skeleton.bones[boneID].finalTransformation = finalMatrix; + } + nodes.push_back(node); for (unsigned int c = 0; c < ainode->mNumChildren; ++c) { const aiNode *child = ainode->mChildren[c]; - int child_pos = processNode(child, nodes); + int child_pos = processNode(child, nodes, skeleton, used_names, node.animatedTransform); nodes.at(insert_pos).children.push_back(child_pos); } return insert_pos; diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index db687c81..c06f9dfb 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -35,6 +35,36 @@ void AnimationSystem::updateSkeleton(const std::shared_ptr& model, double applyTransforms(&all_nodes[0], Eigen::Matrix4f::Identity(), model->getSkeleton(), time, anim, all_nodes); } +void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& parentTransform, Model::Skeleton& skeleton, double time, + const Animation& anim, std::vector& allModelNodes) { + Eigen::Matrix4f nodeLocalTransform = node->localTransform; + std::string nodeName = node->name; + Eigen::Matrix4f globalTransform; + if (anim.tracks.contains(nodeName)) { + const BoneAnimation& track = anim.tracks.at(nodeName); + + Eigen::Matrix4f posMatrix = interpolatePosition(time, track); + Eigen::Matrix4f rotMatrix = interpolateRotation(time, track); + Eigen::Matrix4f scaleMatrix = interpolateScale(time, track); + + nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; + } + + globalTransform = parentTransform * nodeLocalTransform; + node->animatedTransform = globalTransform; + + if (skeleton.boneMapping.contains(nodeName)) { + int boneID = skeleton.boneMapping.at(nodeName); + + Eigen::Matrix4f finalMatrix = skeleton.globalInverseTransform * globalTransform * skeleton.bones[boneID].offsetMatrix; + skeleton.bones[boneID].finalTransformation = finalMatrix; + } + + for (int childIndex : node->children) { + applyTransforms(&allModelNodes[childIndex], globalTransform, skeleton, time, anim, allModelNodes); + } +} + Eigen::Matrix4f AnimationSystem::interpolatePosition(double timeInTicks, const BoneAnimation& track) { if (track.positions.empty()) { return Eigen::Matrix4f::Identity(); @@ -122,35 +152,4 @@ Eigen::Matrix4f AnimationSystem::interpolateRotation(double time, const BoneAnim return rotation_matrix; } -void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& parentTransform, Model::Skeleton& skeleton, double time, - const Animation& anim, std::vector& allModelNodes) { - Eigen::Matrix4f nodeLocalTransform = node->localTransform; - std::string nodeName = node->name; - - if (anim.tracks.contains(nodeName)) { - const BoneAnimation& track = anim.tracks.at(nodeName); - - Eigen::Matrix4f posMatrix = interpolatePosition(time, track); - Eigen::Matrix4f rotMatrix = interpolateRotation(time, track); - Eigen::Matrix4f scaleMatrix = interpolateScale(time, track); - - nodeLocalTransform = posMatrix * rotMatrix * scaleMatrix; - } - - Eigen::Matrix4f globalTransform = parentTransform * nodeLocalTransform; - node->animatedTransform = parentTransform.inverse(); - - if (skeleton.boneMapping.contains(nodeName)) { - int boneID = skeleton.boneMapping.at(nodeName); - - Eigen::Matrix4f finalMatrix = skeleton.globalInverseTransform * globalTransform * skeleton.bones[boneID].offsetMatrix; - - skeleton.bones[boneID].finalTransformation = finalMatrix; - } - - for (int childIndex : node->children) { - applyTransforms(&allModelNodes[childIndex], globalTransform, skeleton, time, anim, allModelNodes); - } -} - } // namespace ICE \ No newline at end of file diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 4e536f02..85051106 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -44,9 +44,9 @@ int main(void) { auto entity2 = scene->createEntity(); scene->getRegistry()->addComponent( - entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(0, 90, 0), Eigen::Vector3f::Constant(1))); + entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(0, 0, 0), Eigen::Vector3f::Constant(1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); - scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "CharacterArmature|Run", .loop = true}); + //scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "CharacterArmature|Death", .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); camera->backward(10); From 1ff4e31bb3411fafea7d7e935dd0745abb5fd97b Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Wed, 17 Dec 2025 12:09:31 +0100 Subject: [PATCH 19/21] big fix, each mesh has it's own IBM --- ICE/Graphics/include/Mesh.h | 10 ++++++++++ ICE/Graphics/include/Model.h | 1 - ICE/Graphics/src/ForwardRenderer.cpp | 7 ++++--- ICE/Graphics/src/GeometryPass.cpp | 7 +++++++ ICE/Graphics/src/Mesh.cpp | 20 -------------------- ICE/IO/include/ModelLoader.h | 2 +- ICE/IO/src/ModelLoader.cpp | 18 +++++++++++------- ICE/System/src/AnimationSystem.cpp | 4 +--- ICEFIELD/icefield.cpp | 2 +- 9 files changed, 35 insertions(+), 36 deletions(-) diff --git a/ICE/Graphics/include/Mesh.h b/ICE/Graphics/include/Mesh.h index 6d2f7cca..da0ae0de 100644 --- a/ICE/Graphics/include/Mesh.h +++ b/ICE/Graphics/include/Mesh.h @@ -29,6 +29,10 @@ struct MeshData { std::vector indices; }; +struct SkinningData { + std::unordered_map boneOffsetMatrices; +}; + class Mesh : public Asset { public: Mesh(const MeshData &data); @@ -50,9 +54,15 @@ class Mesh : public Asset { std::string getTypeName() const override; AssetType getType() const override; bool usesBones() const { return m_has_bones; } + void setSkinningData(const SkinningData &skinningData) { + m_skinningData = skinningData; + m_has_bones = true; + } + SkinningData getSkinningData() const { return m_skinningData; } private: MeshData m_data; + SkinningData m_skinningData; bool m_has_bones = false; std::shared_ptr vertexArray; AABB boundingBox; diff --git a/ICE/Graphics/include/Model.h b/ICE/Graphics/include/Model.h index ffe18289..28558c4a 100644 --- a/ICE/Graphics/include/Model.h +++ b/ICE/Graphics/include/Model.h @@ -16,7 +16,6 @@ class Model : public Asset { }; struct BoneInfo { - Eigen::Matrix4f offsetMatrix; Eigen::Matrix4f finalTransformation; }; diff --git a/ICE/Graphics/src/ForwardRenderer.cpp b/ICE/Graphics/src/ForwardRenderer.cpp index 45fbd626..da8fd7f3 100644 --- a/ICE/Graphics/src/ForwardRenderer.cpp +++ b/ICE/Graphics/src/ForwardRenderer.cpp @@ -143,7 +143,7 @@ void ForwardRenderer::prepareFrame(Camera& camera) { } shader->bind(); for (int i = 0; i < model->getSkeleton().bones.size(); i++) { - shader->loadMat4("finalBonesMatrices[" + std::to_string(i) + "]", model->getSkeleton().bones[i].finalTransformation); + shader->loadMat4("bonesTransformMatrices[" + std::to_string(i) + "]", model->getSkeleton().bones[i].finalTransformation); } } @@ -186,10 +186,11 @@ void ForwardRenderer::submitModel(int node_idx, const std::vector& } Eigen::Matrix4f node_transform; - if (mesh->usesBones()) + if (mesh->usesBones()) { node_transform = transform; - else + } else { node_transform = transform * node.animatedTransform; + } std::unordered_map> texs; for (const auto& [name, value] : material->getAllUniforms()) { diff --git a/ICE/Graphics/src/GeometryPass.cpp b/ICE/Graphics/src/GeometryPass.cpp index 36ad1f6e..ce00e7f2 100644 --- a/ICE/Graphics/src/GeometryPass.cpp +++ b/ICE/Graphics/src/GeometryPass.cpp @@ -26,6 +26,13 @@ void GeometryPass::execute() { shader->bind(); current_shader = shader; } + + if (mesh->usesBones()) { + for (const auto& [boneID, offsetMatrix] : mesh->getSkinningData().boneOffsetMatrices) { + current_shader->loadMat4("bonesOffsetMatrices[" + std::to_string(boneID) + "]", offsetMatrix); + } + } + if (material != current_material) { auto& textures = command.textures; current_material = material; diff --git a/ICE/Graphics/src/Mesh.cpp b/ICE/Graphics/src/Mesh.cpp index 0c510051..44f689b2 100644 --- a/ICE/Graphics/src/Mesh.cpp +++ b/ICE/Graphics/src/Mesh.cpp @@ -11,28 +11,8 @@ namespace ICE { Mesh::Mesh(const MeshData &data) : m_data(data), boundingBox(data.vertices) { - for (const auto &boneIDs : m_data.boneIDs) { - for (int i = 0; i < MAX_BONES_PER_VERTEX; i++) { - if (boneIDs[i] != INVALID_BONE_ID) { - m_has_bones = true; - break; - } - } - if (m_has_bones) - break; - } } Mesh::Mesh(MeshData &&data) : m_data(std::move(data)), boundingBox(getVertices()) { - for (const auto & boneIDs : m_data.boneIDs) { - for (int i = 0; i < MAX_BONES_PER_VERTEX; i++) { - if (boneIDs[i] != INVALID_BONE_ID) { - m_has_bones = true; - break; - } - } - if (m_has_bones) - break; - } } const std::vector &Mesh::getVertices() const { return m_data.vertices; diff --git a/ICE/IO/include/ModelLoader.h b/ICE/IO/include/ModelLoader.h index 35f51ebe..453bdb77 100644 --- a/ICE/IO/include/ModelLoader.h +++ b/ICE/IO/include/ModelLoader.h @@ -30,7 +30,7 @@ class ModelLoader : public IAssetLoader { std::shared_ptr extractMesh(const aiMesh *mesh, const std::string &model_name, const aiScene *scene, Model::Skeleton &skeleton); AssetUID extractMaterial(const aiMaterial *material, const std::string &model_name, const aiScene *scene); AssetUID extractTexture(const aiMaterial *material, const std::string &tex_path, const aiScene *scene, aiTextureType type); - void extractBoneData(const aiMesh *mesh, const aiScene *scene, MeshData &data, Model::Skeleton &skeleton); + void extractBoneData(const aiMesh *mesh, const aiScene *scene, MeshData &data, SkinningData &skinning_data, Model::Skeleton &skeleton); std::unordered_map extractAnimations(const aiScene *scene, Model::Skeleton &skeleton); private: diff --git a/ICE/IO/src/ModelLoader.cpp b/ICE/IO/src/ModelLoader.cpp index 0f204597..6557ca80 100644 --- a/ICE/IO/src/ModelLoader.cpp +++ b/ICE/IO/src/ModelLoader.cpp @@ -12,6 +12,7 @@ #include #include +#include namespace ICE { std::shared_ptr ModelLoader::load(const std::vector &file) { @@ -71,9 +72,7 @@ int ModelLoader::processNode(const aiNode *ainode, std::vector &nod if (skeleton.boneMapping.contains(name)) { int boneID = skeleton.boneMapping.at(name); - - Eigen::Matrix4f finalMatrix = skeleton.globalInverseTransform * node.animatedTransform * skeleton.bones[boneID].offsetMatrix; - skeleton.bones[boneID].finalTransformation = finalMatrix; + skeleton.bones[boneID].finalTransformation = skeleton.globalInverseTransform * node.animatedTransform; } nodes.push_back(node); @@ -114,11 +113,15 @@ std::shared_ptr ModelLoader::extractMesh(const aiMesh *mesh, const std::st data.indices.emplace_back(f.mIndices[0], f.mIndices[1], f.mIndices[2]); } + SkinningData skinning_data; if (mesh->HasBones()) { - extractBoneData(mesh, scene, data, skeleton); + extractBoneData(mesh, scene, data, skinning_data, skeleton); } auto mesh_ = std::make_shared(data); + if (skinning_data.boneOffsetMatrices.size() > 0) { + mesh_->setSkinningData(skinning_data); + } auto vertexArray = graphics_factory->createVertexArray(); @@ -236,7 +239,7 @@ AssetUID ModelLoader::extractTexture(const aiMaterial *material, const std::stri return tex_id; } -void ModelLoader::extractBoneData(const aiMesh *mesh, const aiScene *scene, MeshData &data, Model::Skeleton &skeleton) { +void ModelLoader::extractBoneData(const aiMesh *mesh, const aiScene *scene, MeshData &data, SkinningData &skinning_data, Model::Skeleton &skeleton) { for (unsigned int boneIndex = 0; boneIndex < mesh->mNumBones; ++boneIndex) { std::string boneName = mesh->mBones[boneIndex]->mName.C_Str(); int boneID = -1; @@ -244,14 +247,15 @@ void ModelLoader::extractBoneData(const aiMesh *mesh, const aiScene *scene, Mesh if (!skeleton.boneMapping.contains(boneName)) { boneID = skeleton.boneMapping.size(); skeleton.boneMapping[boneName] = boneID; - Model::BoneInfo newBoneInfo = {.offsetMatrix = aiMat4ToEigen(mesh->mBones[boneIndex]->mOffsetMatrix), - .finalTransformation = Eigen::Matrix4f::Identity()}; + Model::BoneInfo newBoneInfo = {.finalTransformation = Eigen::Matrix4f::Identity()}; skeleton.bones.push_back(newBoneInfo); } else { //Bone Already Exists boneID = skeleton.boneMapping.at(boneName); } + skinning_data.boneOffsetMatrices.try_emplace(boneID, aiMat4ToEigen(mesh->mBones[boneIndex]->mOffsetMatrix)); + aiVertexWeight *weights = mesh->mBones[boneIndex]->mWeights; unsigned int numWeights = mesh->mBones[boneIndex]->mNumWeights; diff --git a/ICE/System/src/AnimationSystem.cpp b/ICE/System/src/AnimationSystem.cpp index c06f9dfb..374078ff 100644 --- a/ICE/System/src/AnimationSystem.cpp +++ b/ICE/System/src/AnimationSystem.cpp @@ -55,9 +55,7 @@ void AnimationSystem::applyTransforms(Model::Node* node, const Eigen::Matrix4f& if (skeleton.boneMapping.contains(nodeName)) { int boneID = skeleton.boneMapping.at(nodeName); - - Eigen::Matrix4f finalMatrix = skeleton.globalInverseTransform * globalTransform * skeleton.bones[boneID].offsetMatrix; - skeleton.bones[boneID].finalTransformation = finalMatrix; + skeleton.bones[boneID].finalTransformation = skeleton.globalInverseTransform * globalTransform; } for (int childIndex : node->children) { diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 85051106..3f8a1d6e 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -46,7 +46,7 @@ int main(void) { scene->getRegistry()->addComponent( entity2, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f(0, 0, 0), Eigen::Vector3f::Constant(1))); scene->getRegistry()->addComponent(entity2, RenderComponent(mesh_id_2)); - //scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "CharacterArmature|Death", .loop = true}); + scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "CharacterArmature|Walk", .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); camera->backward(10); From 2c526b7ca2483b33ba6fd9d1891282be763d690a Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Wed, 17 Dec 2025 12:15:26 +0100 Subject: [PATCH 20/21] updated vertex shader --- Assets/Shaders/phong.vs | 47 ++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/Assets/Shaders/phong.vs b/Assets/Shaders/phong.vs index 3fc52487..1327062f 100644 --- a/Assets/Shaders/phong.vs +++ b/Assets/Shaders/phong.vs @@ -11,7 +11,8 @@ layout (location = 5) in ivec4 bone_ids; layout (location = 6) in vec4 bone_weights; uniform mat4 model; -uniform mat4 finalBonesMatrices[MAX_BONES]; +uniform mat4 bonesTransformMatrices[MAX_BONES]; +uniform mat4 bonesOffsetMatrices[MAX_BONES]; out vec3 fnormal; out vec3 fposition; @@ -21,27 +22,29 @@ out vec2 ftex_coords; void main() { vec4 totalPosition = vec4(0.0f); vec3 totalNormal = vec3(0.0f); - - for(int i = 0 ; i < MAX_BONE_INFLUENCE ; i++) { - if(i == 0 && bone_ids[i] == -1) { - totalPosition = vec4(vertex, 1.0f); - totalNormal = normal; - break; - } - if(bone_ids[i] == -1) continue; - - if(bone_ids[i] >= MAX_BONES) { - totalPosition = vec4(vertex, 1.0f); - totalNormal = normal; - break; - } - - vec4 localPosition = finalBonesMatrices[bone_ids[i]] * vec4(vertex, 1.0f); - totalPosition += localPosition * bone_weights[i]; - - vec3 localNormal = mat3(finalBonesMatrices[bone_ids[i]]) * normal; - totalNormal += localNormal * bone_weights[i]; - } + + if(bone_weights == ivec4(-1)) { + totalPosition = vec4(vertex, 1.0f); + totalNormal = normal; + } else { + for(int i = 0 ; i < MAX_BONE_INFLUENCE ; i++) { + if(bone_ids[i] == -1) continue; + + if(bone_ids[i] >= MAX_BONES) { + totalPosition = vec4(vertex, 1.0f); + totalNormal = normal; + break; + } + + mat4 finalBonesMatrix = bonesTransformMatrices[bone_ids[i]] * bonesOffsetMatrices[bone_ids[i]]; + + vec4 localPosition = finalBonesMatrix * vec4(vertex, 1.0f); + totalPosition += localPosition * bone_weights[i]; + + vec3 localNormal = mat3(finalBonesMatrix) * normal; + totalNormal += localNormal * bone_weights[i]; + } + } fposition = (model * totalPosition).xyz; From cf4c115677653b99af6bba6e5dba6154f188840b Mon Sep 17 00:00:00 2001 From: ProtectedVariable Date: Wed, 17 Dec 2025 13:36:05 +0100 Subject: [PATCH 21/21] add normal and tangent calculation --- Assets/Shaders/phong.vs | 22 ++++++++++++++++------ ICEFIELD/icefield.cpp | 15 +++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/Assets/Shaders/phong.vs b/Assets/Shaders/phong.vs index 1327062f..a49b8419 100644 --- a/Assets/Shaders/phong.vs +++ b/Assets/Shaders/phong.vs @@ -7,6 +7,8 @@ layout (location = 0) in vec3 vertex; layout (location = 1) in vec3 normal; layout (location = 2) in vec2 tex_coords; +layout (location = 3) in vec3 tangent; +layout (location = 4) in vec3 bitangent; layout (location = 5) in ivec4 bone_ids; layout (location = 6) in vec4 bone_weights; @@ -15,6 +17,8 @@ uniform mat4 bonesTransformMatrices[MAX_BONES]; uniform mat4 bonesOffsetMatrices[MAX_BONES]; out vec3 fnormal; +out vec3 ftangent; +out vec3 fbitangent; out vec3 fposition; out vec3 fview; out vec2 ftex_coords; @@ -22,8 +26,10 @@ out vec2 ftex_coords; void main() { vec4 totalPosition = vec4(0.0f); vec3 totalNormal = vec3(0.0f); + vec3 totalTangent = vec3(0.0f); + vec3 totalBitangent = vec3(0.0f); - if(bone_weights == ivec4(-1)) { + if(bone_ids == ivec4(-1)) { totalPosition = vec4(vertex, 1.0f); totalNormal = normal; } else { @@ -38,17 +44,21 @@ void main() { mat4 finalBonesMatrix = bonesTransformMatrices[bone_ids[i]] * bonesOffsetMatrices[bone_ids[i]]; - vec4 localPosition = finalBonesMatrix * vec4(vertex, 1.0f); - totalPosition += localPosition * bone_weights[i]; + totalPosition += finalBonesMatrix * vec4(vertex, 1.0f) * bone_weights[i]; - vec3 localNormal = mat3(finalBonesMatrix) * normal; - totalNormal += localNormal * bone_weights[i]; + mat3 normalMatrix = mat3(transpose(inverse(finalBonesMatrix))); + totalNormal += normalMatrix * normal * bone_weights[i]; + totalTangent += normalMatrix * tangent * bone_weights[i]; + totalBitangent += normalMatrix * bitangent * bone_weights[i]; } } fposition = (model * totalPosition).xyz; - fnormal = normalize(mat3(transpose(inverse(model))) * totalNormal); + mat3 normalModelMatrix = mat3(transpose(inverse(model))); + fnormal = normalize(normalModelMatrix * totalNormal); + ftangent = normalize(normalModelMatrix * totalTangent); + fbitangent = normalize(normalModelMatrix * totalBitangent); gl_Position = uProjection * uView * model * totalPosition; diff --git a/ICEFIELD/icefield.cpp b/ICEFIELD/icefield.cpp index 3f8a1d6e..25d9877c 100644 --- a/ICEFIELD/icefield.cpp +++ b/ICEFIELD/icefield.cpp @@ -34,12 +34,11 @@ int main(void) { engine.getAssetBank()->addAsset("pistol", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "pistol.glb"}); engine.getProject()->copyAssetFile("Models", "Adventurer", "ImportAssets/Adventurer.glb"); engine.getAssetBank()->addAsset("Adventurer", {engine.getProject()->getBaseDirectory() / "Assets" / "Models" / "Adventurer.glb"}); - /* + auto entity = scene->createEntity(); - scene->getRegistry()->addComponent( - entity, TransformComponent(Eigen::Vector3f::Zero(), Eigen::Vector3f::Zero(), Eigen::Vector3f(0.1, 0.1, 0.1))); - scene->getRegistry()->addComponent(entity, RenderComponent(mesh_id)); - */ + scene->getRegistry()->addComponent(entity, TransformComponent({0, 1000, 0}, Eigen::Vector3f::Zero(), Eigen::Vector3f(0.1, 0.1, 0.1))); + scene->getRegistry()->addComponent(entity, LightComponent(LightType::PointLight, {1, 1, 1})); + auto mesh_id_2 = engine.getAssetBank()->getUID(AssetPath::WithTypePrefix("Adventurer")); auto entity2 = scene->createEntity(); @@ -49,9 +48,9 @@ int main(void) { scene->getRegistry()->addComponent(entity2, AnimationComponent{.currentAnimation = "CharacterArmature|Walk", .loop = true}); auto camera = std::make_shared(60.0, 16.0 / 9.0, 0.01, 10000.0); - camera->backward(10); - //camera->up(1); - //camera->pitch(-30); + camera->backward(5); + camera->up(5); + camera->pitch(-30); scene->getRegistry()->getSystem()->setCamera(camera); int i = 0;