diff --git a/engine b/engine index 0bc85f8..0870823 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 0bc85f8c8e70056c1efbb378df8dfd64e1391215 +Subproject commit 087082334693f8290a73b76bd0627abec926314b diff --git a/main.cpp b/main.cpp index 2dc44a9..dce6ba2 100644 --- a/main.cpp +++ b/main.cpp @@ -1,53 +1,145 @@ +#include +#include + #include "engine.hpp" static int SCR_HEIGHT = 600; static int SCR_WIDTH = 800; -const char *cubeSource = "/cube2.obj"; -const char *catSource = "/cat.obj"; -const char *benchSource = "/bench.obj"; - const char *vertexShaderSource = "/vertex/standart.vshader"; const char *fragmentShaderSource = "/fragment/standart.fshader"; +const char *cubeSource = "/cube.obj"; + +class MovingBall : public Object { + private: + float MIN_VELOCITY = 0.001; + + public: + Vec3 velocity; + float bounciness = 1; + float friction = 0; + + void Update(float dt) override { + transform->Translate(velocity * dt); + Vec3 rotationAxis = cross(normalize(velocity), Vec3(0, -1, 0)); + float angle = length(velocity) * dt / transform->GetScale().x; + Mat4 rotation = transform->GetRotation(); + transform->Rotate(inverse(rotation)); + transform->Rotate(angle, rotationAxis); + transform->Rotate(rotation); + velocity *= pow(1 - friction, dt); + if (length(velocity) < MIN_VELOCITY) { + velocity = Vec3(0, 0, 0); + } + } + + MovingBall(Vec3 position, ShaderProgram * shaderProgram, + std::string diffuseSource, std::string specularSource = "") { + this->renderData = new RenderData(); + this->renderData->model = Model::loadFromFile("/shar_152.obj"); // Model::GetSphere(); + this->renderData->model->shader = shaderProgram; + + auto images = std::vector(); + images.push_back(diffuseSource); + if (specularSource != "") { + images.push_back(specularSource); + } + this->renderData->material = { + 4.f, + Texture(images), + }; + + bindRenderData(this->renderData); -Object* initModel(); + this->collider = new Collider{Sphere{ + Vec3(0.0), + 1.0f, + }}; + + transform = new Transform(position, Vec3(1., 1., 1.), Mat4(1.0)); + } +}; + +class GameManager : public Object { + public: + std::vector balls; + float minX = -7, maxX = 7, minZ = -7, maxZ = 7; + + void Update(float dt) override { + for (int i = 0; i < balls.size(); ++i) { + auto ball = balls[i]; + Vec3 pos = ball->transform->GetTranslation(); + if (pos.x < minX) { + ball->transform->Translate((1 + ball->bounciness) * Vec3(minX - pos.x, 0, 0)); + ball->velocity = Vec3(- ball->velocity.x, 0, ball->velocity.z) * ball->bounciness; + } + if (pos.x > maxX) { + ball->transform->Translate((1 + ball->bounciness) * Vec3(maxX - pos.x, 0, 0)); + ball->velocity = Vec3(- ball->velocity.x, 0, ball->velocity.z) * ball->bounciness; + } + if (pos.z < minZ) { + ball->transform->Translate((1 + ball->bounciness) * Vec3(0, 0, minZ - pos.z)); + ball->velocity = Vec3(ball->velocity.x, 0, - ball->velocity.z) * ball->bounciness; + } + if (pos.z > maxZ) { + ball->transform->Translate((1 + ball->bounciness) * Vec3(0, 0, maxZ - pos.z)); + ball->velocity = Vec3(ball->velocity.x, 0, - ball->velocity.z) * ball->bounciness; + } + for (int j = i + 1; j < balls.size(); ++j) { + auto ball2 = balls[j]; + if (ball->collider->Collide(*ball->transform, ball2->collider, *ball2->transform)) { + // collision + Vec3 pos2 = ball2->transform->GetTranslation(); + Vec3 center = (pos + pos2) * 0.5f; // collision point + Vec3 speed = ball->velocity - ball2->velocity; // approach speed of 2 balls + Vec3 v = pos - center; // vector towards center of collision + float dotProduct = speed.x * v.x + speed.z * v.z; + float proj = dotProduct / length(v); // projection of speed vector on collision line + Vec3 impulseChange = normalize(v) * proj * (1 + ball->bounciness * ball2->bounciness); + ball->velocity -= impulseChange * 0.5f; + ball2->velocity += impulseChange * 0.5f; + ball->transform->Translate(v * (ball->transform->GetScale().x / length(v) - 1)); + ball2->transform->Translate(v * (1 - ball2->transform->GetScale().x / length(v))); + } + } + } + } + explicit GameManager(std::vector balls) { + this->balls = balls; + } +}; + +MovingBall *newBall(Vec3 position, Vec3 velocity, + ShaderProgram *sp, std::string diffuseSource, std::string specularSource); int main() { auto engine = Engine(SCR_WIDTH, SCR_HEIGHT); - Object* testObj = initModel(); - engine.AddObject<>(testObj); - engine.Run(SCR_WIDTH, SCR_HEIGHT); -} -Object* initModel() { - // build and compile our shader program ------------------------------------ Shader vShader = Shader(VertexShader, vertexShaderSource); Shader fShader = Shader(FragmentShader, fragmentShaderSource); + ShaderProgram *shaderProgram = new ShaderProgram(vShader, fShader); - // init a model - Model * model = Model::loadFromFile(catSource); + std::vector balls; + int ballsCount = 5; - auto obj = new Object(); - obj->renderData = new RenderData(); - obj->renderData->model = model; - obj->renderData->model->shader = new ShaderProgram(vShader, fShader); + for (int i = 0; i < ballsCount; ++i) { + MovingBall *sphere = newBall(Vec3(i * 2 - 5, -12, -i), Vec3(3, 0, 1 + i), + shaderProgram, "/152.png", "/cat_specular.png"); + balls.push_back(sphere); + engine.AddObject<>(sphere); + } - obj->transform = new Transform(glm::vec3(0.f, -3.f, -8.f), glm::vec3(.1f, .1f, .1f), glm::mat4(1.0)); - obj->transform->Rotate(1.67f, glm::vec3(-1.f, 0.f, 0.f)); - auto render_data = obj->renderData; + GameManager *gameManager = new GameManager(balls); - bindRenderData(render_data); + engine.AddObject(gameManager); - // Maybe this can be less clunky? - // Perhaps variadic functions? - auto images = std::vector(); - images.push_back("/Cat_diffuse.png"); - images.push_back("/Cat_specular.png"); - obj->renderData->material = { - 4.f, - Texture(images), - }; + engine.Run(SCR_WIDTH, SCR_HEIGHT); +} - return obj; +MovingBall *newBall(Vec3 position, Vec3 velocity, + ShaderProgram *sp, std::string diffuseSource, std::string specularSource) { + MovingBall* ball = new MovingBall(position, sp, diffuseSource, specularSource); + ball->velocity = velocity; + return ball; } diff --git a/resources/models/shar_152.obj b/resources/models/shar_152.obj new file mode 100644 index 0000000..26f0fc2 --- /dev/null +++ b/resources/models/shar_152.obj @@ -0,0 +1,632 @@ +# Blender 4.0.1 +# www.blender.org +mtllib shar_152.mtl +o Roundcube +v 0.597282 -0.597282 -0.597282 +v 0.366342 -0.683257 -0.683257 +v 0.135402 -0.722309 -0.722309 +v -0.135402 -0.722309 -0.722309 +v -0.366342 -0.683257 -0.683257 +v 0.683257 -0.366342 -0.683257 +v 0.417927 -0.417927 -0.846491 +v 0.152597 -0.441358 -0.917038 +v -0.152597 -0.441358 -0.917038 +v -0.417927 -0.417927 -0.846491 +v 0.722309 -0.135402 -0.722309 +v 0.441358 -0.152597 -0.917038 +v 0.160407 -0.160407 -1.000000 +v -0.160407 -0.160407 -1.000000 +v -0.441358 -0.152597 -0.917038 +v 0.722309 0.135402 -0.722309 +v 0.441358 0.152597 -0.917038 +v 0.160407 0.160407 -1.000000 +v -0.160407 0.160407 -1.000000 +v -0.441358 0.152597 -0.917038 +v 0.683257 0.366342 -0.683257 +v 0.417927 0.417927 -0.846491 +v 0.152597 0.441358 -0.917038 +v -0.152597 0.441358 -0.917038 +v -0.417927 0.417927 -0.846491 +v -0.597282 -0.597282 -0.597282 +v -0.683257 -0.683257 -0.366342 +v -0.722309 -0.722309 -0.135402 +v -0.722309 -0.722309 0.135402 +v -0.683257 -0.683257 0.366342 +v -0.683257 -0.366342 -0.683257 +v -0.846491 -0.417927 -0.417927 +v -0.917038 -0.441358 -0.152597 +v -0.917038 -0.441358 0.152597 +v -0.846491 -0.417927 0.417927 +v -0.722309 -0.135402 -0.722309 +v -0.917038 -0.152597 -0.441358 +v -1.000000 -0.160407 -0.160407 +v -1.000000 -0.160407 0.160407 +v -0.917038 -0.152597 0.441358 +v -0.722309 0.135402 -0.722309 +v -0.917038 0.152597 -0.441358 +v -1.000000 0.160407 -0.160407 +v -1.000000 0.160407 0.160407 +v -0.917038 0.152597 0.441358 +v -0.683257 0.366342 -0.683257 +v -0.846491 0.417927 -0.417927 +v -0.917038 0.441358 -0.152597 +v -0.917038 0.441358 0.152597 +v -0.846491 0.417927 0.417927 +v -0.597282 -0.597282 0.597282 +v -0.366342 -0.683257 0.683257 +v -0.135402 -0.722309 0.722309 +v 0.135402 -0.722309 0.722309 +v 0.366342 -0.683257 0.683257 +v -0.683257 -0.366342 0.683257 +v -0.417927 -0.417927 0.846491 +v -0.152597 -0.441358 0.917038 +v 0.152597 -0.441358 0.917038 +v 0.417927 -0.417927 0.846491 +v -0.722309 -0.135402 0.722309 +v -0.441358 -0.152597 0.917038 +v -0.160407 -0.160407 1.000000 +v 0.160407 -0.160407 1.000000 +v 0.441358 -0.152597 0.917038 +v -0.722309 0.135402 0.722309 +v -0.441358 0.152597 0.917038 +v -0.160407 0.160407 1.000000 +v 0.160407 0.160407 1.000000 +v 0.441358 0.152597 0.917038 +v -0.683257 0.366342 0.683257 +v -0.417927 0.417927 0.846491 +v -0.152597 0.441358 0.917038 +v 0.152597 0.441358 0.917038 +v 0.417927 0.417927 0.846491 +v 0.597282 -0.597282 0.597282 +v 0.683257 -0.683257 0.366342 +v 0.722309 -0.722309 0.135402 +v 0.722309 -0.722309 -0.135402 +v 0.683257 -0.683257 -0.366342 +v 0.683257 -0.366342 0.683257 +v 0.846491 -0.417927 0.417927 +v 0.917038 -0.441358 0.152597 +v 0.917038 -0.441358 -0.152597 +v 0.846491 -0.417927 -0.417927 +v 0.722309 -0.135402 0.722309 +v 0.917038 -0.152597 0.441358 +v 1.000000 -0.160407 0.160407 +v 1.000000 -0.160407 -0.160407 +v 0.917038 -0.152597 -0.441358 +v 0.722309 0.135402 0.722309 +v 0.917038 0.152597 0.441358 +v 1.000000 0.160407 0.160407 +v 1.000000 0.160407 -0.160407 +v 0.917038 0.152597 -0.441358 +v 0.683257 0.366342 0.683257 +v 0.846491 0.417927 0.417927 +v 0.917038 0.441358 0.152597 +v 0.917038 0.441358 -0.152597 +v 0.846491 0.417927 -0.417927 +v 0.417927 -0.846491 0.417927 +v 0.152597 -0.917038 0.441358 +v -0.152597 -0.917038 0.441358 +v -0.417927 -0.846491 0.417927 +v 0.441358 -0.917038 0.152597 +v 0.160407 -1.000000 0.160407 +v -0.160407 -1.000000 0.160407 +v -0.441358 -0.917038 0.152597 +v 0.441358 -0.917038 -0.152597 +v 0.160407 -1.000000 -0.160407 +v -0.160407 -1.000000 -0.160407 +v -0.441358 -0.917038 -0.152597 +v 0.417927 -0.846491 -0.417927 +v 0.152597 -0.917038 -0.441358 +v -0.152597 -0.917038 -0.441358 +v -0.417927 -0.846491 -0.417927 +v 0.597282 0.597282 -0.597282 +v 0.366342 0.683257 -0.683257 +v 0.135402 0.722309 -0.722309 +v -0.135402 0.722309 -0.722309 +v -0.366342 0.683257 -0.683257 +v -0.597282 0.597282 -0.597282 +v 0.683257 0.683257 -0.366342 +v 0.417927 0.846491 -0.417927 +v 0.152597 0.917038 -0.441358 +v -0.152597 0.917038 -0.441358 +v -0.417927 0.846491 -0.417927 +v -0.683257 0.683257 -0.366342 +v 0.722309 0.722309 -0.135402 +v 0.441358 0.917038 -0.152597 +v 0.160407 1.000000 -0.160407 +v -0.160407 1.000000 -0.160407 +v -0.441358 0.917038 -0.152597 +v -0.722309 0.722309 -0.135402 +v 0.722309 0.722309 0.135402 +v 0.441358 0.917038 0.152597 +v 0.160407 1.000000 0.160407 +v -0.160407 1.000000 0.160407 +v -0.441358 0.917038 0.152597 +v -0.722309 0.722309 0.135402 +v 0.683257 0.683257 0.366342 +v 0.417927 0.846491 0.417927 +v 0.152597 0.917038 0.441358 +v -0.152597 0.917038 0.441358 +v -0.417927 0.846491 0.417927 +v -0.683257 0.683257 0.366342 +v 0.597282 0.597282 0.597282 +v 0.366342 0.683257 0.683257 +v 0.135402 0.722309 0.722309 +v -0.135402 0.722309 0.722309 +v -0.366342 0.683257 0.683257 +v -0.597282 0.597282 0.597282 +vn 0.5774 -0.5774 -0.5774 +vn 0.3598 -0.6597 -0.6597 +vn 0.3984 -0.3984 -0.8261 +vn 0.6597 -0.3598 -0.6597 +vn 0.1200 -0.7020 -0.7020 +vn 0.1320 -0.4275 -0.8943 +vn -0.1200 -0.7020 -0.7020 +vn -0.1320 -0.4275 -0.8943 +vn -0.3598 -0.6597 -0.6597 +vn -0.3984 -0.3984 -0.8261 +vn -0.5774 -0.5774 -0.5774 +vn -0.6597 -0.3598 -0.6597 +vn 0.4275 -0.1320 -0.8943 +vn 0.7020 -0.1200 -0.7020 +vn 0.1417 -0.1417 -0.9797 +vn -0.1417 -0.1417 -0.9797 +vn -0.4275 -0.1320 -0.8943 +vn -0.7020 -0.1200 -0.7020 +vn 0.4275 0.1320 -0.8943 +vn 0.7020 0.1200 -0.7020 +vn 0.1417 0.1417 -0.9797 +vn -0.1417 0.1417 -0.9797 +vn -0.4275 0.1320 -0.8943 +vn -0.7020 0.1200 -0.7020 +vn 0.3984 0.3984 -0.8261 +vn 0.6597 0.3598 -0.6597 +vn 0.1320 0.4275 -0.8943 +vn -0.1320 0.4275 -0.8943 +vn -0.3984 0.3984 -0.8261 +vn -0.6597 0.3598 -0.6597 +vn 0.3598 0.6597 -0.6597 +vn 0.5774 0.5774 -0.5774 +vn 0.1200 0.7020 -0.7020 +vn -0.1200 0.7020 -0.7020 +vn -0.3598 0.6597 -0.6597 +vn -0.5774 0.5774 -0.5774 +vn -0.6597 -0.6597 -0.3598 +vn -0.8261 -0.3984 -0.3984 +vn -0.7020 -0.7020 -0.1200 +vn -0.8943 -0.4275 -0.1320 +vn -0.7020 -0.7020 0.1200 +vn -0.8943 -0.4275 0.1320 +vn -0.6597 -0.6597 0.3598 +vn -0.8261 -0.3984 0.3984 +vn -0.5774 -0.5774 0.5774 +vn -0.6597 -0.3598 0.6597 +vn -0.8943 -0.1320 -0.4275 +vn -0.9797 -0.1417 -0.1417 +vn -0.9797 -0.1417 0.1417 +vn -0.8943 -0.1320 0.4275 +vn -0.7020 -0.1200 0.7020 +vn -0.8943 0.1320 -0.4275 +vn -0.9797 0.1417 -0.1417 +vn -0.9797 0.1417 0.1417 +vn -0.8943 0.1320 0.4275 +vn -0.7020 0.1200 0.7020 +vn -0.8261 0.3984 -0.3984 +vn -0.8943 0.4275 -0.1320 +vn -0.8943 0.4275 0.1320 +vn -0.8261 0.3984 0.3984 +vn -0.6597 0.3598 0.6597 +vn -0.6597 0.6597 -0.3598 +vn -0.7020 0.7020 -0.1200 +vn -0.7020 0.7020 0.1200 +vn -0.6597 0.6597 0.3598 +vn -0.5774 0.5774 0.5774 +vn -0.3598 -0.6597 0.6597 +vn -0.3984 -0.3984 0.8261 +vn -0.1200 -0.7020 0.7020 +vn -0.1320 -0.4275 0.8943 +vn 0.1200 -0.7020 0.7020 +vn 0.1320 -0.4275 0.8943 +vn 0.3598 -0.6597 0.6597 +vn 0.3984 -0.3984 0.8261 +vn 0.5774 -0.5774 0.5774 +vn 0.6597 -0.3598 0.6597 +vn -0.4275 -0.1320 0.8943 +vn -0.1417 -0.1417 0.9797 +vn 0.1417 -0.1417 0.9797 +vn 0.4275 -0.1320 0.8943 +vn 0.7020 -0.1200 0.7020 +vn -0.4275 0.1320 0.8943 +vn -0.1417 0.1417 0.9797 +vn 0.1417 0.1417 0.9797 +vn 0.4275 0.1320 0.8943 +vn 0.7020 0.1200 0.7020 +vn -0.3984 0.3984 0.8261 +vn -0.1320 0.4275 0.8943 +vn 0.1320 0.4275 0.8943 +vn 0.3984 0.3984 0.8261 +vn 0.6597 0.3598 0.6597 +vn -0.3598 0.6597 0.6597 +vn -0.1200 0.7020 0.7020 +vn 0.1200 0.7020 0.7020 +vn 0.3598 0.6597 0.6597 +vn 0.5774 0.5774 0.5774 +vn 0.6597 -0.6597 0.3598 +vn 0.8261 -0.3984 0.3984 +vn 0.7020 -0.7020 0.1200 +vn 0.8943 -0.4275 0.1320 +vn 0.7020 -0.7020 -0.1200 +vn 0.8943 -0.4275 -0.1320 +vn 0.6597 -0.6597 -0.3598 +vn 0.8261 -0.3984 -0.3984 +vn 0.8943 -0.1320 0.4275 +vn 0.9797 -0.1417 0.1417 +vn 0.9797 -0.1417 -0.1417 +vn 0.8943 -0.1320 -0.4275 +vn 0.8943 0.1320 0.4275 +vn 0.9797 0.1417 0.1417 +vn 0.9797 0.1417 -0.1417 +vn 0.8943 0.1320 -0.4275 +vn 0.8261 0.3984 0.3984 +vn 0.8943 0.4275 0.1320 +vn 0.8943 0.4275 -0.1320 +vn 0.8261 0.3984 -0.3984 +vn 0.6597 0.6597 0.3598 +vn 0.7020 0.7020 0.1200 +vn 0.7020 0.7020 -0.1200 +vn 0.6597 0.6597 -0.3598 +vn 0.3984 -0.8261 0.3984 +vn 0.1320 -0.8943 0.4275 +vn -0.1320 -0.8943 0.4275 +vn -0.3984 -0.8261 0.3984 +vn 0.4275 -0.8943 0.1320 +vn 0.1417 -0.9797 0.1417 +vn -0.1417 -0.9797 0.1417 +vn -0.4275 -0.8943 0.1320 +vn 0.4275 -0.8943 -0.1320 +vn 0.1417 -0.9797 -0.1417 +vn -0.1417 -0.9797 -0.1417 +vn -0.4275 -0.8943 -0.1320 +vn 0.3984 -0.8261 -0.3984 +vn 0.1320 -0.8943 -0.4275 +vn -0.1320 -0.8943 -0.4275 +vn -0.3984 -0.8261 -0.3984 +vn 0.3984 0.8261 -0.3984 +vn 0.1320 0.8943 -0.4275 +vn -0.1320 0.8943 -0.4275 +vn -0.3984 0.8261 -0.3984 +vn 0.4275 0.8943 -0.1320 +vn 0.1417 0.9797 -0.1417 +vn -0.1417 0.9797 -0.1417 +vn -0.4275 0.8943 -0.1320 +vn 0.4275 0.8943 0.1320 +vn 0.1417 0.9797 0.1417 +vn -0.1417 0.9797 0.1417 +vn -0.4275 0.8943 0.1320 +vn 0.3984 0.8261 0.3984 +vn 0.1320 0.8943 0.4275 +vn -0.1320 0.8943 0.4275 +vn -0.3984 0.8261 0.3984 +vt 0.281597 0.146823 +vt 0.286127 0.106151 +vt 0.332853 0.129500 +vt 0.309745 0.170366 +vt 0.290988 0.062311 +vt 0.355550 0.085143 +vt 0.297023 -0.000000 +vt 0.388830 0.016287 +vt 0.940088 0.396772 +vt 0.904021 0.362766 +vt 0.928519 0.307837 +vt 0.981464 0.330825 +vt 0.869905 0.330316 +vt 0.877544 0.288339 +vt 0.366935 0.157911 +vt 0.331957 0.193528 +vt 0.404040 0.118891 +vt 0.457458 0.062571 +vt 0.938409 0.257184 +vt 1.000000 0.265520 +vt 0.880228 0.250931 +vt 0.397454 0.195532 +vt 0.354696 0.221381 +vt 0.443272 0.169272 +vt 0.510086 0.133031 +vt 0.936669 0.200228 +vt 1.000000 0.189534 +vt 0.878690 0.208899 +vt 0.417201 0.235048 +vt 0.372257 0.248283 +vt 0.465390 0.222885 +vt 0.534859 0.207447 +vt 0.924549 0.149589 +vt 0.977134 0.123342 +vt 0.874254 0.171655 +vt 0.429297 0.285513 +vt 0.388832 0.280932 +vt 0.472911 0.290392 +vt 0.534859 0.296339 +vt 0.896950 0.095750 +vt 0.930932 0.059501 +vt 0.864513 0.130013 +vt 0.828356 0.339947 +vt 0.829674 0.291970 +vt 0.791189 0.344289 +vt 0.790441 0.294163 +vt 0.749199 0.345739 +vt 0.747574 0.295458 +vt 0.711798 0.343004 +vt 0.708176 0.295122 +vt 0.669842 0.335361 +vt 0.660188 0.293834 +vt 0.829947 0.252679 +vt 0.789631 0.254034 +vt 0.746196 0.255003 +vt 0.705917 0.255766 +vt 0.655779 0.256672 +vt 0.828463 0.209828 +vt 0.788155 0.210613 +vt 0.744721 0.211539 +vt 0.704427 0.212925 +vt 0.654228 0.214722 +vt 0.826168 0.170460 +vt 0.786740 0.170288 +vt 0.743904 0.171266 +vt 0.704654 0.173636 +vt 0.656861 0.177387 +vt 0.822440 0.122407 +vt 0.784961 0.119677 +vt 0.742918 0.121459 +vt 0.705831 0.125818 +vt 0.664389 0.135507 +vt 0.637434 0.369451 +vt 0.610026 0.315772 +vt 0.603493 0.405474 +vt 0.557636 0.341843 +vt -0.000000 0.241756 +vt 0.064312 0.246134 +vt 0.072077 0.313189 +vt 0.006777 0.330234 +vt 0.107491 0.250246 +vt 0.119966 0.300237 +vt 0.147769 0.254309 +vt 0.164510 0.286671 +vt 0.597975 0.265311 +vt 0.534922 0.275959 +vt 0.095085 0.365282 +vt 0.031745 0.400949 +vt 0.139873 0.339079 +vt 0.182071 0.313276 +vt 0.596209 0.208550 +vt 0.534859 0.200328 +vt 0.133641 0.414229 +vt 0.082781 0.467922 +vt 0.170039 0.376045 +vt 0.204642 0.340822 +vt 0.605984 0.158051 +vt 0.553184 0.135276 +vt 0.180423 0.448038 +vt 0.147770 0.511573 +vt 0.203515 0.404190 +vt 0.226623 0.363798 +vt 0.630259 0.103232 +vt 0.594178 0.069459 +vt 0.244375 0.470412 +vt 0.236030 0.534105 +vt 0.249638 0.427471 +vt 0.254460 0.387274 +vt 0.170980 0.226037 +vt 0.195051 0.259349 +vt 0.193933 0.203527 +vt 0.220612 0.237510 +vt 0.222274 0.181336 +vt 0.249203 0.214524 +vt 0.248964 0.163575 +vt 0.276263 0.194337 +vt 0.215196 0.286158 +vt 0.241916 0.264431 +vt 0.271046 0.241372 +vt 0.298156 0.220046 +vt 0.238238 0.314475 +vt 0.265277 0.293240 +vt 0.294475 0.270270 +vt 0.321304 0.248552 +vt 0.259951 0.340066 +vt 0.286911 0.319989 +vt 0.315771 0.297399 +vt 0.341440 0.275568 +vt 0.287049 0.370863 +vt 0.313831 0.353381 +vt 0.342148 0.331294 +vt 0.365304 0.309025 +vt 0.130149 0.203497 +vt 0.085580 0.181349 +vt 0.015317 0.148539 +vt 0.692294 0.393921 +vt 0.669333 0.446769 +vt 0.158208 0.169377 +vt 0.118776 0.132359 +vt 0.061516 0.078881 +vt 0.742870 0.403833 +vt 0.734499 0.465290 +vt 0.195639 0.138375 +vt 0.169113 0.092500 +vt 0.132244 0.025311 +vt 0.799721 0.402173 +vt 0.810290 0.465359 +vt 0.235417 0.118410 +vt 0.223039 0.069990 +vt 0.207302 0.000004 +vt 0.850259 0.390174 +vt 0.876326 0.442672 +vt 0.405972 0.331982 +vt 0.450217 0.354622 +vt 0.518973 0.387688 +vt 0.841847 0.071346 +vt 0.864681 0.018260 +vt 0.377605 0.365751 +vt 0.416596 0.403020 +vt 0.473199 0.456481 +vt 0.791124 0.061588 +vt 0.799232 0.000000 +vt 0.340016 0.396357 +vt 0.366079 0.442351 +vt 0.402632 0.509895 +vt 0.734221 0.063522 +vt 0.723369 0.000385 +vt 0.300161 0.415887 +vt 0.311968 0.464249 +vt 0.327084 0.535157 +vt 0.683795 0.075704 +vt 0.657543 0.023408 +s 1 +usemtl Material.001 +f 1/1/1 2/2/2 7/3/3 6/4/4 +f 2/2/2 3/5/5 8/6/6 7/3/3 +f 3/5/5 4/7/7 9/8/8 8/6/6 +f 4/9/7 5/10/9 10/11/10 9/12/8 +f 5/10/9 26/13/11 31/14/12 10/11/10 +f 6/4/4 7/3/3 12/15/13 11/16/14 +f 7/3/3 8/6/6 13/17/15 12/15/13 +f 8/6/6 9/8/8 14/18/16 13/17/15 +f 9/12/8 10/11/10 15/19/17 14/20/16 +f 10/11/10 31/14/12 36/21/18 15/19/17 +f 11/16/14 12/15/13 17/22/19 16/23/20 +f 12/15/13 13/17/15 18/24/21 17/22/19 +f 13/17/15 14/18/16 19/25/22 18/24/21 +f 14/20/16 15/19/17 20/26/23 19/27/22 +f 15/19/17 36/21/18 41/28/24 20/26/23 +f 16/23/20 17/22/19 22/29/25 21/30/26 +f 17/22/19 18/24/21 23/31/27 22/29/25 +f 18/24/21 19/25/22 24/32/28 23/31/27 +f 19/27/22 20/26/23 25/33/29 24/34/28 +f 20/26/23 41/28/24 46/35/30 25/33/29 +f 21/30/26 22/29/25 118/36/31 117/37/32 +f 22/29/25 23/31/27 119/38/33 118/36/31 +f 23/31/27 24/32/28 120/39/34 119/38/33 +f 24/34/28 25/33/29 121/40/35 120/41/34 +f 25/33/29 46/35/30 122/42/36 121/40/35 +f 26/13/11 27/43/37 32/44/38 31/14/12 +f 27/43/37 28/45/39 33/46/40 32/44/38 +f 28/45/39 29/47/41 34/48/42 33/46/40 +f 29/47/41 30/49/43 35/50/44 34/48/42 +f 30/49/43 51/51/45 56/52/46 35/50/44 +f 31/14/12 32/44/38 37/53/47 36/21/18 +f 32/44/38 33/46/40 38/54/48 37/53/47 +f 33/46/40 34/48/42 39/55/49 38/54/48 +f 34/48/42 35/50/44 40/56/50 39/55/49 +f 35/50/44 56/52/46 61/57/51 40/56/50 +f 36/21/18 37/53/47 42/58/52 41/28/24 +f 37/53/47 38/54/48 43/59/53 42/58/52 +f 38/54/48 39/55/49 44/60/54 43/59/53 +f 39/55/49 40/56/50 45/61/55 44/60/54 +f 40/56/50 61/57/51 66/62/56 45/61/55 +f 41/28/24 42/58/52 47/63/57 46/35/30 +f 42/58/52 43/59/53 48/64/58 47/63/57 +f 43/59/53 44/60/54 49/65/59 48/64/58 +f 44/60/54 45/61/55 50/66/60 49/65/59 +f 45/61/55 66/62/56 71/67/61 50/66/60 +f 46/35/30 47/63/57 128/68/62 122/42/36 +f 47/63/57 48/64/58 134/69/63 128/68/62 +f 48/64/58 49/65/59 140/70/64 134/69/63 +f 49/65/59 50/66/60 146/71/65 140/70/64 +f 50/66/60 71/67/61 152/72/66 146/71/65 +f 51/51/45 52/73/67 57/74/68 56/52/46 +f 52/73/67 53/75/69 58/76/70 57/74/68 +f 53/77/69 54/78/71 59/79/72 58/80/70 +f 54/78/71 55/81/73 60/82/74 59/79/72 +f 55/81/73 76/83/75 81/84/76 60/82/74 +f 56/52/46 57/74/68 62/85/77 61/57/51 +f 57/74/68 58/76/70 63/86/78 62/85/77 +f 58/80/70 59/79/72 64/87/79 63/88/78 +f 59/79/72 60/82/74 65/89/80 64/87/79 +f 60/82/74 81/84/76 86/90/81 65/89/80 +f 61/57/51 62/85/77 67/91/82 66/62/56 +f 62/85/77 63/86/78 68/92/83 67/91/82 +f 63/88/78 64/87/79 69/93/84 68/94/83 +f 64/87/79 65/89/80 70/95/85 69/93/84 +f 65/89/80 86/90/81 91/96/86 70/95/85 +f 66/62/56 67/91/82 72/97/87 71/67/61 +f 67/91/82 68/92/83 73/98/88 72/97/87 +f 68/94/83 69/93/84 74/99/89 73/100/88 +f 69/93/84 70/95/85 75/101/90 74/99/89 +f 70/95/85 91/96/86 96/102/91 75/101/90 +f 71/67/61 72/97/87 151/103/92 152/72/66 +f 72/97/87 73/98/88 150/104/93 151/103/92 +f 73/100/88 74/99/89 149/105/94 150/106/93 +f 74/99/89 75/101/90 148/107/95 149/105/94 +f 75/101/90 96/102/91 147/108/96 148/107/95 +f 76/83/75 77/109/97 82/110/98 81/84/76 +f 77/109/97 78/111/99 83/112/100 82/110/98 +f 78/111/99 79/113/101 84/114/102 83/112/100 +f 79/113/101 80/115/103 85/116/104 84/114/102 +f 80/115/103 1/1/1 6/4/4 85/116/104 +f 81/84/76 82/110/98 87/117/105 86/90/81 +f 82/110/98 83/112/100 88/118/106 87/117/105 +f 83/112/100 84/114/102 89/119/107 88/118/106 +f 84/114/102 85/116/104 90/120/108 89/119/107 +f 85/116/104 6/4/4 11/16/14 90/120/108 +f 86/90/81 87/117/105 92/121/109 91/96/86 +f 87/117/105 88/118/106 93/122/110 92/121/109 +f 88/118/106 89/119/107 94/123/111 93/122/110 +f 89/119/107 90/120/108 95/124/112 94/123/111 +f 90/120/108 11/16/14 16/23/20 95/124/112 +f 91/96/86 92/121/109 97/125/113 96/102/91 +f 92/121/109 93/122/110 98/126/114 97/125/113 +f 93/122/110 94/123/111 99/127/115 98/126/114 +f 94/123/111 95/124/112 100/128/116 99/127/115 +f 95/124/112 16/23/20 21/30/26 100/128/116 +f 96/102/91 97/125/113 141/129/117 147/108/96 +f 97/125/113 98/126/114 135/130/118 141/129/117 +f 98/126/114 99/127/115 129/131/119 135/130/118 +f 99/127/115 100/128/116 123/132/120 129/131/119 +f 100/128/116 21/30/26 117/37/32 123/132/120 +f 76/83/75 55/81/73 101/133/121 77/109/97 +f 55/81/73 54/78/71 102/134/122 101/133/121 +f 54/78/71 53/77/69 103/135/123 102/134/122 +f 53/75/69 52/73/67 104/136/124 103/137/123 +f 52/73/67 51/51/45 30/49/43 104/136/124 +f 77/109/97 101/133/121 105/138/125 78/111/99 +f 101/133/121 102/134/122 106/139/126 105/138/125 +f 102/134/122 103/135/123 107/140/127 106/139/126 +f 103/137/123 104/136/124 108/141/128 107/142/127 +f 104/136/124 30/49/43 29/47/41 108/141/128 +f 78/111/99 105/138/125 109/143/129 79/113/101 +f 105/138/125 106/139/126 110/144/130 109/143/129 +f 106/139/126 107/140/127 111/145/131 110/144/130 +f 107/142/127 108/141/128 112/146/132 111/147/131 +f 108/141/128 29/47/41 28/45/39 112/146/132 +f 79/113/101 109/143/129 113/148/133 80/115/103 +f 109/143/129 110/144/130 114/149/134 113/148/133 +f 110/144/130 111/145/131 115/150/135 114/149/134 +f 111/147/131 112/146/132 116/151/136 115/152/135 +f 112/146/132 28/45/39 27/43/37 116/151/136 +f 80/115/103 113/148/133 2/2/2 1/1/1 +f 113/148/133 114/149/134 3/5/5 2/2/2 +f 114/149/134 115/150/135 4/7/7 3/5/5 +f 115/152/135 116/151/136 5/10/9 4/9/7 +f 116/151/136 27/43/37 26/13/11 5/10/9 +f 117/37/32 118/36/31 124/153/137 123/132/120 +f 118/36/31 119/38/33 125/154/138 124/153/137 +f 119/38/33 120/39/34 126/155/139 125/154/138 +f 120/41/34 121/40/35 127/156/140 126/157/139 +f 121/40/35 122/42/36 128/68/62 127/156/140 +f 123/132/120 124/153/137 130/158/141 129/131/119 +f 124/153/137 125/154/138 131/159/142 130/158/141 +f 125/154/138 126/155/139 132/160/143 131/159/142 +f 126/157/139 127/156/140 133/161/144 132/162/143 +f 127/156/140 128/68/62 134/69/63 133/161/144 +f 129/131/119 130/158/141 136/163/145 135/130/118 +f 130/158/141 131/159/142 137/164/146 136/163/145 +f 131/159/142 132/160/143 138/165/147 137/164/146 +f 132/162/143 133/161/144 139/166/148 138/167/147 +f 133/161/144 134/69/63 140/70/64 139/166/148 +f 135/130/118 136/163/145 142/168/149 141/129/117 +f 136/163/145 137/164/146 143/169/150 142/168/149 +f 137/164/146 138/165/147 144/170/151 143/169/150 +f 138/167/147 139/166/148 145/171/152 144/172/151 +f 139/166/148 140/70/64 146/71/65 145/171/152 +f 141/129/117 142/168/149 148/107/95 147/108/96 +f 142/168/149 143/169/150 149/105/94 148/107/95 +f 143/169/150 144/170/151 150/106/93 149/105/94 +f 144/172/151 145/171/152 151/103/92 150/104/93 +f 145/171/152 146/71/65 152/72/66 151/103/92 diff --git a/resources/textures/152.png b/resources/textures/152.png new file mode 100644 index 0000000..0440031 Binary files /dev/null and b/resources/textures/152.png differ