From 396e5611c40d48d4c021a66f6d30b7f22d4078e2 Mon Sep 17 00:00:00 2001 From: MrLetsplay2003 Date: Sat, 8 Oct 2022 00:14:45 +0200 Subject: [PATCH] Basic rendering --- src/kekengine/cpp/camera.cpp | 128 ++ src/kekengine/cpp/kekengine.cpp | 106 +- src/kekengine/cpp/mesh.cpp | 78 + src/kekengine/cpp/object.cpp | 56 + src/kekengine/cpp/objparser.cpp | 7 +- src/kekengine/cpp/resource.cpp | 2 +- src/kekengine/cpp/shader.cpp | 40 +- src/kekengine/cpp/utils.cpp | 174 ++ src/kekengine/include/camera.h | 44 + src/kekengine/include/constants.h | 7 + src/kekengine/include/kekengine.h | 9 + src/kekengine/include/mesh.h | 20 +- src/kekengine/include/object.h | 83 + src/kekengine/include/utils.h | 46 + src/kekgame/cpp/kekgame.cpp | 4 +- src/res/object/cube/Cube.mtl | 12 + src/res/object/cube/Cube.obj | 46 + src/res/object/sphere/Sphere.mtl | 2 + src/res/object/sphere/Sphere.obj | 2536 +++++++++++++++++++++++++++++ src/res/shader/mesh/fragment.glsl | 10 +- src/res/shader/mesh/vertex.glsl | 2 +- 21 files changed, 3371 insertions(+), 41 deletions(-) create mode 100644 src/kekengine/cpp/camera.cpp create mode 100644 src/kekengine/cpp/mesh.cpp create mode 100644 src/kekengine/cpp/utils.cpp create mode 100644 src/kekengine/include/camera.h create mode 100644 src/kekengine/include/utils.h create mode 100644 src/res/object/cube/Cube.mtl create mode 100644 src/res/object/cube/Cube.obj create mode 100644 src/res/object/sphere/Sphere.mtl create mode 100644 src/res/object/sphere/Sphere.obj diff --git a/src/kekengine/cpp/camera.cpp b/src/kekengine/cpp/camera.cpp new file mode 100644 index 0000000..4b739c9 --- /dev/null +++ b/src/kekengine/cpp/camera.cpp @@ -0,0 +1,128 @@ +#include "camera.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "object.h" +#include "utils.h" + +namespace kek { + +Camera::Camera() { + this->position = glm::vec3(0.0f, 0.0f, 0.0f); + this->direction = glm::vec3(0.0f, 0.0f, -1.0f); + this->roll = 0; +} + +void Camera::lookAt(glm::vec3 direction) { + this->direction = glm::normalize(direction); +} + +void Camera::lookAtPos(glm::vec3 pos) { + this->direction = glm::normalize(pos - position); +} + +void Camera::setYaw(float degrees) { + glm::vec3 euler = eulerAngles(); + euler.x = degrees; + applyEuler(euler); +} + +void Camera::rotateYaw(float degrees) { + glm::vec3 euler = eulerAngles(); + euler.x += degrees; + applyEuler(euler); +} + +void Camera::setPitch(float degrees) { + glm::vec3 euler = eulerAngles(); + euler.y = degrees; + applyEuler(euler); +} + +void Camera::rotatePitch(float degrees) { + glm::vec3 euler = eulerAngles(); + euler.y += degrees; + applyEuler(euler); +} + +void Camera::setRoll(float degrees) { + roll = degrees; +} + +void Camera::rotateRoll(float degrees) { + roll += degrees; +} + +glm::mat4 Camera::transformationMatrix() { + float rollRad = glm::radians(roll); + float x = sin(rollRad); + float y = cos(rollRad); + glm::vec3 up = glm::vec3(x, y, 0.0f); + //glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f); + glm::vec3 right = glm::normalize(glm::cross(direction, up)); + glm::vec3 cameraUp = glm::normalize(glm::cross(right, direction)); + + glm::mat4 transform = glm::mat4(1.0f); + transform[0][0] = right.x; + transform[1][0] = right.y; + transform[2][0] = right.z; + transform[0][1] = cameraUp.x; + transform[1][1] = cameraUp.y; + transform[2][1] = cameraUp.z; + transform[0][2] = -direction.x; + transform[1][2] = -direction.y; + transform[2][2] = -direction.z; + transform[3][0] = -glm::dot(right, position); + transform[3][1] = -glm::dot(cameraUp, position); + transform[3][2] = glm::dot(direction, position); + + return transform; +} + +void Camera::lookAtMatrix(glm::mat4 mat) { + glm::quat q; + float root, trace = mat[0].x + mat[1].y + mat[2].z; + root = sqrt(trace + 1.0f); + q.w = 0.5f * root; + root = 0.5f / root; + q.x = root * (mat[1].z - mat[2].y); + q.y = root * (mat[2].x - mat[0].z); + q.z = root * (mat[0].y - mat[1].x); + this->direction = glm::vec3(0.0, 0.0, -1.0) * q; +} + +// x = yaw, y = pitch, z = roll +glm::vec3 Camera::eulerAngles() { + // Yaw + float yawDegrees; + if(direction.x == 0 && direction.z == 0) { + yawDegrees = 0; + }else { + glm::vec2 xz = glm::normalize(glm::vec2(direction.x, direction.z)); // Normalized XZ coordinates + yawDegrees = glm::degrees(atan2(-xz.y, xz.x)) + 90.0f; // -z because OpenGL + if(yawDegrees > 180.0f) { + yawDegrees -= 360.0f; + } + } + + // Pitch + float pitchDegrees = glm::degrees(atan(direction.y / sqrt(direction.x * direction.x + direction.z * direction.z))); + return glm::vec3(yawDegrees, pitchDegrees, roll); +} + +void Camera::applyEuler(glm::vec3 euler) { + euler.y = clamp(euler.y, -89.0f, 89.0f); + + direction.x = sin(glm::radians(euler.x)) * cos(glm::radians(euler.y)); // sin(yaw) * cos(pitch) + direction.y = sin(glm::radians(euler.y)); // sin(pitch) + direction.z = cos(glm::radians(euler.x)) * cos(glm::radians(euler.y)); // cos(yaw) * cos(pitch) + roll = euler.z; +} + +} \ No newline at end of file diff --git a/src/kekengine/cpp/kekengine.cpp b/src/kekengine/cpp/kekengine.cpp index d1db87d..c73b0fb 100644 --- a/src/kekengine/cpp/kekengine.cpp +++ b/src/kekengine/cpp/kekengine.cpp @@ -8,10 +8,12 @@ #include #include +#include namespace kek { static GLFWwindow *window; +static Camera *cam; static int screenWidth = 800.0f; static int screenHeight = 600.0f; @@ -28,6 +30,27 @@ static void glDebugOutput(GLenum source, GLenum type, unsigned int id, GLenum se std::cout << "OpenGL Debug (" << id << "): " << message << std::endl; } +void onCursorPosCallback(GLFWwindow *window, double x, double y) { + static bool firstMouse = true; + static double lastX = 0, lastY = 0; + if(firstMouse) { + lastX = x; + lastY = y; + firstMouse = false; + } + + float xoff = lastX - x; + float yoff = lastY - y; + lastX = x; + lastY = y; + + xoff *= 0.1f; + yoff *= 0.1f; + + cam->rotateYaw(xoff); + cam->rotatePitch(yoff); +} + int init() { // Init GLFW if (glfwInit() != GL_TRUE) { @@ -53,7 +76,7 @@ int init() { glfwWindowHint(GLFW_MAXIMIZED, GL_TRUE); glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); - /*window = glfwCreateWindow(screenWidth, screenHeight, "MrLetsplay's weird OpenGL stuff", NULL, NULL); + window = glfwCreateWindow(screenWidth, screenHeight, "KekEngine", NULL, NULL); if(window == NULL) { const char *errorMsg; int code = glfwGetError(&errorMsg); @@ -92,19 +115,82 @@ int init() { glViewport(0, 0, screenWidth, screenHeight); - glfwSetFramebufferSizeCallback(window, framebufferSizeCallback);*/ + glfwSetFramebufferSizeCallback(window, framebufferSizeCallback); - //char *file = (char *) "# Blender 3.3.0\n# www.blender.org\nmtllib Cube.mtl\no Cube\nv 1.000000 1.000000 -1.000000\nv 1.000000 -1.000000 -1.000000\nv 1.000000 1.000000 1.000000\nv 1.000000 -1.000000 1.000000\nv -1.000000 1.000000 -1.000000\nv -1.000000 -1.000000 -1.000000\nv -1.000000 1.000000 1.000000\nv -1.000000 -1.000000 1.000000\nvn -0.0000 1.0000 -0.0000\nvn -0.0000 -0.0000 1.0000\nvn -1.0000 -0.0000 -0.0000\nvn -0.0000 -1.0000 -0.0000\nvn 1.0000 -0.0000 -0.0000\nvn -0.0000 -0.0000 -1.0000\nvt 0.625000 0.500000\nvt 0.375000 0.500000\nvt 0.625000 0.750000\nvt 0.375000 0.750000\nvt 0.875000 0.500000\nvt 0.625000 0.250000\nvt 0.125000 0.500000\nvt 0.375000 0.250000\nvt 0.875000 0.750000\nvt 0.625000 1.000000\nvt 0.625000 0.000000\nvt 0.375000 1.000000\nvt 0.375000 0.000000\nvt 0.125000 0.750000\ns 0\nusemtl Material\nf 1/1/1 5/5/1 7/9/1 3/3/1\nf 4/4/2 3/3/2 7/10/2 8/12/2\nf 8/13/3 7/11/3 5/6/3 6/8/3\nf 6/7/4 2/2/4 4/4/4 8/14/4\nf 2/2/5 1/1/5 3/3/5 4/4/5\nf 6/8/6 5/6/6 1/1/6 2/2/6"; - //MemoryBuffer *fileBuf = new MemoryBuffer(file, strlen(file)); - //Mesh *mesh = ObjParser::parse(fileBuf); + glEnable(GL_DEPTH_TEST); + glEnable(GL_MULTISAMPLE); + //glEnable(GL_CULL_FACE); + //glCullFace(GL_BACK); - MemoryBuffer *buf = kek::Resource::loadResource("../src/res/shader/mesh/fragment.glsl"); - if(buf) { - std::cout << buf << std::endl; - delete buf; + glfwSetCursorPosCallback(window, onCursorPosCallback); + glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); + + glClearColor(0.1f, 0.3f, 0.1f, 0.0f); + + cam = new Camera(); + + kek::MemoryBuffer *buf = kek::Resource::loadResource("../src/res/object/sphere/Sphere.obj"); + if(!buf) std::cout << "err buf" << std::endl; + kek::Mesh *mesh = kek::ObjParser::parse(buf); + kek::Shader *shader = new kek::Shader("../src/res/shader/mesh/vertex.glsl", "../src/res/shader/mesh/fragment.glsl"); + while(1) { + // Clear the screen + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glViewport(0, 0, screenWidth, screenHeight); + + if(glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) { + cam->translate(cam->direction * 0.1f); + } + + if(glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) { + cam->translate(cam->direction * -0.1f); + } + + if(glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) { + glm::vec3 camRight = glm::normalize(glm::cross(cam->direction, glm::vec3(0.0f, 1.0f, 0.0f))); + cam->translate(-camRight * 0.1f); + } + + if(glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) { + glm::vec3 camRight = glm::normalize(glm::cross(cam->direction, glm::vec3(0.0f, 1.0f, 0.0f))); + cam->translate(camRight * 0.1f); + } + + if(glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { + cam->translateY(0.1f); + } + + if(glfwGetKey(window, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS) { + cam->translateY(-0.1f); + } + + if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { + break; + } + + shader->use(); + + glm::mat4 view = cam->transformationMatrix(); + + glm::mat4 projection; + projection = glm::perspective(glm::radians(90.0f), screenWidth / (float) screenHeight, KEK_CAMERA_NEAR, KEK_CAMERA_FAR); + + glm::vec3 position = cam->getPosition(); + + glUniformMatrix4fv(glGetUniformLocation(shader->id, "view"), 1, GL_FALSE, glm::value_ptr(view)); + glUniformMatrix4fv(glGetUniformLocation(shader->id, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); + glUniform3fv(glGetUniformLocation(shader->id, "cameraPos"), 1, glm::value_ptr(position)); + glm::mat4 model = glm::mat4(1.0f); + glUniformMatrix4fv(glGetUniformLocation(shader->id, "model"), 1, GL_FALSE, glm::value_ptr(model)); + + mesh->draw(shader); + + // Swap buffers and poll window events + glfwSwapBuffers(window); + glfwPollEvents(); } return KEK_SUCCESS; } -} \ No newline at end of file +} diff --git a/src/kekengine/cpp/mesh.cpp b/src/kekengine/cpp/mesh.cpp new file mode 100644 index 0000000..3cc4a9c --- /dev/null +++ b/src/kekengine/cpp/mesh.cpp @@ -0,0 +1,78 @@ +#include "mesh.h" + +#include "constants.h" + +#include + +namespace kek { + +Vertex::Vertex(glm::vec3 pos, glm::vec3 normal, glm::vec2 texCoords) { + this->pos = pos; + this->normal = normal; + this->texCoords = texCoords; +} + +Mesh::Mesh(std::vector vertices, std::vector indices) { + this->vertices = vertices; + this->indices = indices; + + glGenVertexArrays(1, &vao); + glGenBuffers(1, &vbo); + glGenBuffers(1, &ebo); + + glBindVertexArray(vao); + + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), &vertices[0], GL_STATIC_DRAW); + //glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), &indices[0], GL_STATIC_DRAW); + //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + glVertexAttribPointer(KEK_VERTEX_SHADER_IN_POSITION, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); + glEnableVertexAttribArray(KEK_VERTEX_SHADER_IN_POSITION); + + glVertexAttribPointer(KEK_VERTEX_SHADER_IN_NORMAL, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void *) offsetof(Vertex, normal)); + glEnableVertexAttribArray(KEK_VERTEX_SHADER_IN_NORMAL); + + glVertexAttribPointer(KEK_VERTEX_SHADER_IN_TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void *) offsetof(Vertex, texCoords)); + glEnableVertexAttribArray(KEK_VERTEX_SHADER_IN_TEXCOORD); + + glBindVertexArray(0); + + GLenum err = glGetError(); + if(err != GL_NO_ERROR) { + std::cout << "OpenGL error while loading mesh: " << err << std::endl; + exit(1); + } +} + +Mesh::~Mesh() { + glDeleteBuffers(1, &ebo); + glDeleteBuffers(1, &vbo); + glDeleteVertexArrays(1, &vao); +} + +void Mesh::draw(Shader *shader) { + glBindVertexArray(vao); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); + + /*if(!light) { + material->diffuse->use(GL_TEXTURE0); + glUniform1i(glGetUniformLocation(shader->id, "material.diffuse"), 0); + + material->specular->use(GL_TEXTURE1); + glUniform1i(glGetUniformLocation(shader->id, "material.specular"), 1); + glUniform1f(glGetUniformLocation(shader->id, "material.shininess"), material->shininess); + }*/ + + // Bind vertices + texture coordinates + glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindVertexArray(0); +} + +} diff --git a/src/kekengine/cpp/object.cpp b/src/kekengine/cpp/object.cpp index e69de29..ae64966 100644 --- a/src/kekengine/cpp/object.cpp +++ b/src/kekengine/cpp/object.cpp @@ -0,0 +1,56 @@ +#include "object.h" + +namespace kek { + +void Object::translateX(float delta) { + translate(glm::vec3(delta, 0, 0)); +} + +void Object::translateY(float delta) { + translate(glm::vec3(0, delta, 0)); +} + +void Object::translateZ(float delta) { + translate(glm::vec3(0, 0, delta)); +} + +DefaultObject::DefaultObject() { + this->position = glm::vec3(0.0f, 0.0f, 0.0f); +} + +void DefaultObject::translate(glm::vec3 delta) { + position += delta; +} + +void DefaultObject::moveTo(glm::vec3 position) { + //this->position = glm::vec3(position.x, position.y, position.z); + this->position.x = position.x; + this->position.y = position.y; + this->position.z = position.z; +} + +glm::vec3 DefaultObject::getPosition() { + return this->position; +} + +void RotateableObject::lookAtPos(glm::vec3 position) { + lookAt(position - this->getPosition()); +} + +DefaultRotateableObject::DefaultRotateableObject() { + this->rotation = glm::quat(0.0f, 0.0f, 1.0f, 0.0f); +} + +void DefaultRotateableObject::rotate(float angle, glm::vec3 axis) { + this->rotation = glm::rotate(rotation, glm::radians(angle), axis); +} + +void DefaultRotateableObject::lookAt(glm::vec3 direction) { + this->rotation = glm::quatLookAt(glm::normalize(direction), glm::vec3(0.0f, 1.0f, 0.0f)); +} + +glm::quat DefaultRotateableObject::getRotation() { + return this->rotation; +} + +} diff --git a/src/kekengine/cpp/objparser.cpp b/src/kekengine/cpp/objparser.cpp index 82f1ac1..1b2685e 100644 --- a/src/kekengine/cpp/objparser.cpp +++ b/src/kekengine/cpp/objparser.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "types.h" @@ -62,11 +63,11 @@ Mesh *parse(MemoryBuffer *buf) { uint32_t v3, v3T, v3N; readFaceVertex(str, &v3, &v3T, &v3N); - vertices.push_back(Vertex(vertexPositions[v1], vertexNormals[v1N], vertexTexCoords[v1T])); + vertices.push_back(Vertex(vertexPositions[v1 - 1], vertexNormals[v1N - 1], vertexTexCoords[v1T - 1])); indices.push_back(indices.size()); - vertices.push_back(Vertex(vertexPositions[v2], vertexNormals[v2N], vertexTexCoords[v2T])); + vertices.push_back(Vertex(vertexPositions[v2 - 1], vertexNormals[v2N - 1], vertexTexCoords[v2T - 1])); indices.push_back(indices.size()); - vertices.push_back(Vertex(vertexPositions[v3], vertexNormals[v3N], vertexTexCoords[v3T])); + vertices.push_back(Vertex(vertexPositions[v3 - 1], vertexNormals[v3N - 1], vertexTexCoords[v3T - 1])); indices.push_back(indices.size()); }else { std::cout << "Ignoring unknown OBJ command: " << cmd << std::endl; diff --git a/src/kekengine/cpp/resource.cpp b/src/kekengine/cpp/resource.cpp index 95767c3..c6a8b0e 100644 --- a/src/kekengine/cpp/resource.cpp +++ b/src/kekengine/cpp/resource.cpp @@ -14,4 +14,4 @@ MemoryBuffer *loadResource(std::string path) { return new MemoryBuffer(data, size); } -} \ No newline at end of file +} diff --git a/src/kekengine/cpp/shader.cpp b/src/kekengine/cpp/shader.cpp index 77c4030..7e8b112 100644 --- a/src/kekengine/cpp/shader.cpp +++ b/src/kekengine/cpp/shader.cpp @@ -23,18 +23,19 @@ static GLuint compileShader(GLenum type, std::string path) { GLint success; - GLuint vertex = glCreateShader(type); - glShaderSource(vertex, 1, &src, NULL); - glCompileShader(vertex); + GLuint shaderID = glCreateShader(type); + glShaderSource(shaderID, 1, &src, NULL); + glCompileShader(shaderID); - glGetShaderiv(vertex, GL_COMPILE_STATUS, &success); + glGetShaderiv(shaderID, GL_COMPILE_STATUS, &success); if(!success) { char log[512]; - glGetShaderInfoLog(vertex, 512, NULL, log); - std::cout << "Failed to compile vertex shader \"" << path << "\":\n" << log << std::endl; + glGetShaderInfoLog(shaderID, 512, NULL, log); + std::cout << "Failed to compile shader \"" << path << "\":\n" << log << std::endl; + throw std::exception(); } - return vertex; + return shaderID; } static GLuint compileProgram(unsigned int n, GLenum *types, std::string *paths) { @@ -60,6 +61,7 @@ static GLuint compileProgram(unsigned int n, GLenum *types, std::string *paths) char log[512]; glGetProgramInfoLog(id, 512, NULL, log); std::cout << "Failed to link program:\n" << log << std::endl; + throw std::exception(); } // Delete shaders @@ -71,19 +73,37 @@ static GLuint compileProgram(unsigned int n, GLenum *types, std::string *paths) } Shader::Shader(std::string vertexPath, std::string fragmentPath) { + GLenum types[2]; + types[0] = GL_VERTEX_SHADER; + types[1] = GL_FRAGMENT_SHADER; + std::string paths[2]; + paths[0] = vertexPath; + paths[1] = fragmentPath; + + id = compileProgram(2, types, paths); } Shader::Shader(std::string vertexPath, std::string geometryPath, std::string fragmentPath) { + GLenum types[3]; + types[0] = GL_VERTEX_SHADER; + types[1] = GL_GEOMETRY_SHADER; + types[2] = GL_FRAGMENT_SHADER; + std::string paths[3]; + paths[0] = vertexPath; + paths[1] = geometryPath; + paths[2] = fragmentPath; + + id = compileProgram(3, types, paths); } Shader::~Shader() { - + glDeleteProgram(id); } void Shader::use() { - + glUseProgram(id); } -} \ No newline at end of file +} diff --git a/src/kekengine/cpp/utils.cpp b/src/kekengine/cpp/utils.cpp new file mode 100644 index 0000000..3aaeeac --- /dev/null +++ b/src/kekengine/cpp/utils.cpp @@ -0,0 +1,174 @@ +#include "utils.h" + +#include + +namespace kek { + +float clampCyclic(float value, float min, float max) { + while(value > max) value -= (max - min); + while(value < min) value += (max - min); + return value; +} + +float clamp(float value, float min, float max) { + if(value > max) value = max; + if(value < min) value = min; + return value; +} + +float clampCyclic(int value, int min, int max) { + while(value > max) value -= (max - min); + while(value < min) value += (max - min); + return value; +} + +float clamp(int value, int min, int max) { + if(value > max) value = max; + if(value < min) value = min; + return value; +} + +glm::vec3 faceNormal(CubeFace face) { + switch(face) { + case CubeFace::FRONT: + return glm::vec3(0.0f, 0.0f, 1.0f); + case CubeFace::BACK: + return glm::vec3(0.0f, 0.0f, -1.0f); + case CubeFace::UP: + return glm::vec3(0.0f, 1.0f, 0.0f); + case CubeFace::DOWN: + return glm::vec3(0.0f, -1.0f, 0.0f); + case CubeFace::LEFT: + return glm::vec3(-1.0f, 0.0f, 0.0f); + case CubeFace::RIGHT: + return glm::vec3(1.0f, 0.0f, 0.0f); + } + + return glm::vec3(0.0f, 0.0f, 0.0f); +} + +float cubeTriangles[] = { + // Front + -0.5f, -0.5f, 0.5f, // 0 + 0.5f, -0.5f, 0.5f, // 1 + 0.5f, 0.5f, 0.5f, // 2 + 0.5f, 0.5f, 0.5f, // 2 + -0.5f, 0.5f, 0.5f, // 3 + -0.5f, -0.5f, 0.5f, // 0 + + // Back + 0.5f, -0.5f, -0.5f, // 5 + -0.5f, -0.5f, -0.5f, // 4 + -0.5f, 0.5f, -0.5f, // 7 + -0.5f, 0.5f, -0.5f, // 7 + 0.5f, 0.5f, -0.5f, // 6 + 0.5f, -0.5f, -0.5f, // 5 + + // Up + -0.5f, 0.5f, 0.5f, // 3 + 0.5f, 0.5f, 0.5f, // 2 + 0.5f, 0.5f, -0.5f, // 6 + 0.5f, 0.5f, -0.5f, // 6 + -0.5f, 0.5f, -0.5f, // 7 + -0.5f, 0.5f, 0.5f, // 3 + + // Down + 0.5f, -0.5f, -0.5f, // 5 + 0.5f, -0.5f, 0.5f, // 1 + -0.5f, -0.5f, 0.5f, // 0 + -0.5f, -0.5f, 0.5f, // 0 + -0.5f, -0.5f, -0.5f, // 4 + 0.5f, -0.5f, -0.5f, // 5 + + // Left + -0.5f, -0.5f, -0.5f, // 4 + -0.5f, -0.5f, 0.5f, // 0 + -0.5f, 0.5f, 0.5f, // 3 + -0.5f, 0.5f, 0.5f, // 3 + -0.5f, 0.5f, -0.5f, // 7 + -0.5f, -0.5f, -0.5f, // 4 + + // Right + 0.5f, -0.5f, 0.5f, // 1 + 0.5f, -0.5f, -0.5f, // 5 + 0.5f, 0.5f, -0.5f, // 6 + 0.5f, 0.5f, -0.5f, // 6 + 0.5f, 0.5f, 0.5f, // 2 + 0.5f, -0.5f, 0.5f, // 1 +}; + +float textureCoordinates[] = { + // Front + 0.0f, 0.0f, // 0 + 1.0f, 0.0f, // 1 + 1.0f, 1.0f, // 2 + 1.0f, 1.0f, // 2 + 0.0f, 1.0f, // 3 + 0.0f, 0.0f, // 0 + + // Back + 0.0f, 0.0f, // 5 + 1.0f, 0.0f, // 4 + 1.0f, 1.0f, // 7 + 1.0f, 1.0f, // 7 + 0.0f, 1.0f, // 6 + 0.0f, 0.0f, // 5 + + // Up + 0.0f, 0.0f, // 3 + 1.0f, 0.0f, // 2 + 1.0f, 1.0f, // 6 + 1.0f, 1.0f, // 6 + 0.0f, 1.0f, // 7 + 0.0f, 0.0f, // 3 + + // Down + 1.0f, 1.0f, // 5 + 1.0f, 0.0f, // 1 + 0.0f, 0.0f, // 0 + 0.0f, 0.0f, // 0 + 0.0f, 1.0f, // 4 + 1.0f, 1.0f, // 5 + + // Left + 0.0f, 0.0f, // 4 + 1.0f, 0.0f, // 0 + 1.0f, 1.0f, // 3 + 1.0f, 1.0f, // 3 + 0.0f, 1.0f, // 7 + 0.0f, 0.0f, // 4 + + // Right + 0.0f, 0.0f, // 1 + 1.0f, 0.0f, // 5 + 1.0f, 1.0f, // 6 + 1.0f, 1.0f, // 6 + 0.0f, 1.0f, // 2 + 0.0f, 0.0f, // 1 +}; + +std::vector genCubeVertices(float w, float h, float d, bool texCoords) { + std::vector vertices; + + for(int i = 0; i < 6; i++) { + CubeFace f = (CubeFace) i; + glm::vec3 normal = faceNormal(f); + for(int v = 0; v < 6; v++) { + + kek::Vertex vertex( + glm::vec3(cubeTriangles[i * 18 + v * 3] * w, cubeTriangles[i * 18 + v * 3 + 1] * h, cubeTriangles[i * 18 + v * 3 + 2] * d), + normal, + texCoords ? glm::vec2(textureCoordinates[i * 12 + v * 2], textureCoordinates[i * 12 + v * 2 + 1]) : glm::vec2()); + + vertices.push_back(vertex); + } + } + + return vertices; +} + +std::string toString(glm::vec3 vector) { + return std::to_string(vector.x) + " " + std::to_string(vector.y) + " " + std::to_string(vector.z); +} + +} \ No newline at end of file diff --git a/src/kekengine/include/camera.h b/src/kekengine/include/camera.h new file mode 100644 index 0000000..d4b2467 --- /dev/null +++ b/src/kekengine/include/camera.h @@ -0,0 +1,44 @@ +#pragma once + +#include + +#include "object.h" + +namespace kek { + +class Camera: public DefaultObject { + +public: + glm::vec3 direction; + float roll; + + Camera(); + + void lookAt(glm::vec3 direction); + + void lookAtPos(glm::vec3 pos); + + void setYaw(float degrees); + + void rotateYaw(float degrees); + + void setPitch(float degrees); + + void rotatePitch(float degrees); + + void setRoll(float degrees); + + void rotateRoll(float degrees); + + glm::mat4 transformationMatrix(); + + void lookAtMatrix(glm::mat4 matrix); + + // x = yaw, y = pitch, z = roll + glm::vec3 eulerAngles(); + + void applyEuler(glm::vec3 euler); + +}; + +} \ No newline at end of file diff --git a/src/kekengine/include/constants.h b/src/kekengine/include/constants.h index 0ac875c..b267e08 100644 --- a/src/kekengine/include/constants.h +++ b/src/kekengine/include/constants.h @@ -2,3 +2,10 @@ #define KEK_SUCCESS 0 #define KEK_ERROR 1 + +#define KEK_VERTEX_SHADER_IN_POSITION 0 +#define KEK_VERTEX_SHADER_IN_NORMAL 1 +#define KEK_VERTEX_SHADER_IN_TEXCOORD 2 + +#define KEK_CAMERA_NEAR 0.1f +#define KEK_CAMERA_FAR 100.0f diff --git a/src/kekengine/include/kekengine.h b/src/kekengine/include/kekengine.h index 882d475..a4b0657 100644 --- a/src/kekengine/include/kekengine.h +++ b/src/kekengine/include/kekengine.h @@ -1,6 +1,15 @@ #pragma once +#include "camera.h" #include "constants.h" +#include "errordialog.h" +#include "mesh.h" +#include "object.h" +#include "objparser.h" +#include "resource.h" +#include "shader.h" +#include "types.h" +#include "utils.h" namespace kek { diff --git a/src/kekengine/include/mesh.h b/src/kekengine/include/mesh.h index 3cc821c..0291787 100644 --- a/src/kekengine/include/mesh.h +++ b/src/kekengine/include/mesh.h @@ -1,5 +1,7 @@ #pragma once +#include "shader.h" + #include #include #include @@ -12,11 +14,8 @@ struct Vertex { glm::vec3 normal; glm::vec2 texCoords; - Vertex(glm::vec3 pos, glm::vec3 normal, glm::vec2 texCoords) { - this->pos = pos; - this->normal = normal; - this->texCoords = texCoords; - } + Vertex(glm::vec3 pos, glm::vec3 normal, glm::vec2 texCoords); + }; class Mesh { @@ -25,13 +24,14 @@ public: std::vector vertices; std::vector indices; - Mesh(std::vector vertices, std::vector indices) { - this->vertices = vertices; - this->indices = indices; - } + unsigned int vao, vbo, ebo; + + Mesh(std::vector vertices, std::vector indices); ~Mesh(); + void draw(Shader *shader); + }; -} \ No newline at end of file +} diff --git a/src/kekengine/include/object.h b/src/kekengine/include/object.h index 6f70f09..46e1687 100644 --- a/src/kekengine/include/object.h +++ b/src/kekengine/include/object.h @@ -1 +1,84 @@ #pragma once + +#include +#include + +namespace kek { + +class Object { + +public: + virtual ~Object() {}; + + virtual void translate(glm::vec3 delta) = 0; + + virtual void translateX(float delta); + + virtual void translateY(float delta); + + virtual void translateZ(float delta); + + virtual void moveTo(glm::vec3 position) = 0; + + virtual glm::vec3 getPosition() = 0; + +}; + +class DefaultObject: public Object { + +protected: + glm::vec3 position; + +public: + DefaultObject(); + + virtual ~DefaultObject() {}; + + virtual void translate(glm::vec3 delta); + + virtual void moveTo(glm::vec3 position); + + virtual glm::vec3 getPosition(); + +}; + +class RotateableObject: public Object { + +public: + virtual ~RotateableObject() {}; + + virtual void rotate(float angle, glm::vec3 axis) = 0; + + virtual void lookAt(glm::vec3 direction) = 0; + + virtual void lookAtPos(glm::vec3 position); + + virtual glm::quat getRotation() = 0; + +}; + +class DefaultRotateableObject: public RotateableObject, public DefaultObject { + +protected: + glm::quat rotation; + +public: + DefaultRotateableObject(); + + virtual ~DefaultRotateableObject() {}; + + virtual void rotate(float angle, glm::vec3 axis); + + virtual void lookAt(glm::vec3 direction); + + virtual glm::quat getRotation(); + + virtual void translate(glm::vec3 delta) { DefaultObject::translate(delta); } + + virtual void moveTo(glm::vec3 position) { DefaultObject::moveTo(position); }; + + virtual glm::vec3 getPosition() { return DefaultObject::getPosition(); }; + +}; + +} \ No newline at end of file diff --git a/src/kekengine/include/utils.h b/src/kekengine/include/utils.h new file mode 100644 index 0000000..1564f74 --- /dev/null +++ b/src/kekengine/include/utils.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include + +#include "mesh.h" + +namespace kek { + +template +using generic_function_t = void(*)(Args... args); + +template +struct generic_callable_t { + generic_function_t function; + void *data; + + void operator()(Args... args) { + function(args..., data); + } +}; + +typedef generic_callable_t<> callable_t; + +float clampCyclic(float value, float min, float max); + +float clamp(float value, float min, float max); + +float clampCyclic(int value, int min, int max); + +float clamp(int value, int min, int max); + +enum class CubeFace { + FRONT, BACK, UP, DOWN, LEFT, RIGHT +}; + +glm::vec3 faceNormal(CubeFace face); + +void genCubeVertices(float w, float h, float d, bool texCoords, float **outVerts, size_t *outSize, size_t *vertexCount); + +std::vector genCubeVertices(float w, float h, float d, bool texCoords); + +std::string toString(glm::vec3 vector); + +} \ No newline at end of file diff --git a/src/kekgame/cpp/kekgame.cpp b/src/kekgame/cpp/kekgame.cpp index 41b000f..4657ad9 100644 --- a/src/kekgame/cpp/kekgame.cpp +++ b/src/kekgame/cpp/kekgame.cpp @@ -1,7 +1,9 @@ #include #include "kekengine.h" +#include +#include int main(int argc, char **argv) { kek::init(); -} \ No newline at end of file +} diff --git a/src/res/object/cube/Cube.mtl b/src/res/object/cube/Cube.mtl new file mode 100644 index 0000000..b1731f7 --- /dev/null +++ b/src/res/object/cube/Cube.mtl @@ -0,0 +1,12 @@ +# Blender 3.3.0 MTL File: 'None' +# www.blender.org + +newmtl Material +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/src/res/object/cube/Cube.obj b/src/res/object/cube/Cube.obj new file mode 100644 index 0000000..f5afe82 --- /dev/null +++ b/src/res/object/cube/Cube.obj @@ -0,0 +1,46 @@ +# Blender 3.3.0 +# www.blender.org +mtllib Cube.mtl +o Cube +v 1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 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 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material +f 5/5/1 3/3/1 1/1/1 +f 3/3/2 8/13/2 4/4/2 +f 7/11/3 6/8/3 8/12/3 +f 2/2/4 8/14/4 6/7/4 +f 1/1/5 4/4/5 2/2/5 +f 5/6/6 2/2/6 6/8/6 +f 5/5/1 7/9/1 3/3/1 +f 3/3/2 7/10/2 8/13/2 +f 7/11/3 5/6/3 6/8/3 +f 2/2/4 4/4/4 8/14/4 +f 1/1/5 3/3/5 4/4/5 +f 5/6/6 1/1/6 2/2/6 diff --git a/src/res/object/sphere/Sphere.mtl b/src/res/object/sphere/Sphere.mtl new file mode 100644 index 0000000..232a748 --- /dev/null +++ b/src/res/object/sphere/Sphere.mtl @@ -0,0 +1,2 @@ +# Blender 3.3.0 MTL File: 'None' +# www.blender.org diff --git a/src/res/object/sphere/Sphere.obj b/src/res/object/sphere/Sphere.obj new file mode 100644 index 0000000..af2f7f4 --- /dev/null +++ b/src/res/object/sphere/Sphere.obj @@ -0,0 +1,2536 @@ +# Blender 3.3.0 +# www.blender.org +mtllib Sphere.mtl +o Sphere +v 0.000000 0.831470 -0.555570 +v 0.000000 0.555570 -0.831470 +v 0.000000 0.195090 -0.980785 +v 0.000000 0.000000 -1.000000 +v 0.000000 -0.195090 -0.980785 +v 0.000000 -0.555570 -0.831470 +v 0.038060 0.980785 -0.191342 +v 0.074658 0.923880 -0.375330 +v 0.108386 0.831470 -0.544895 +v 0.137950 0.707107 -0.693520 +v 0.162212 0.555570 -0.815493 +v 0.180240 0.382683 -0.906127 +v 0.191342 0.195090 -0.961940 +v 0.195090 0.000000 -0.980785 +v 0.191342 -0.195090 -0.961940 +v 0.180240 -0.382683 -0.906127 +v 0.162212 -0.555570 -0.815493 +v 0.137950 -0.707107 -0.693520 +v 0.108386 -0.831470 -0.544895 +v 0.074658 -0.923880 -0.375330 +v 0.038060 -0.980785 -0.191342 +v 0.074658 0.980785 -0.180240 +v 0.146447 0.923880 -0.353553 +v 0.212608 0.831470 -0.513280 +v 0.270598 0.707107 -0.653281 +v 0.318190 0.555570 -0.768178 +v 0.353553 0.382683 -0.853553 +v 0.375330 0.195090 -0.906127 +v 0.382683 0.000000 -0.923879 +v 0.375330 -0.195090 -0.906127 +v 0.353553 -0.382683 -0.853553 +v 0.318190 -0.555570 -0.768178 +v 0.270598 -0.707107 -0.653281 +v 0.212608 -0.831470 -0.513280 +v 0.146447 -0.923880 -0.353553 +v 0.074658 -0.980785 -0.180240 +v 0.108386 0.980785 -0.162212 +v 0.212608 0.923880 -0.318190 +v 0.308658 0.831470 -0.461940 +v 0.392847 0.707107 -0.587938 +v 0.461940 0.555570 -0.691342 +v 0.513280 0.382683 -0.768178 +v 0.544895 0.195090 -0.815493 +v 0.555570 0.000000 -0.831469 +v 0.544895 -0.195090 -0.815493 +v 0.513280 -0.382683 -0.768178 +v 0.461940 -0.555570 -0.691342 +v 0.392847 -0.707107 -0.587938 +v 0.308658 -0.831470 -0.461940 +v 0.212608 -0.923880 -0.318190 +v 0.108386 -0.980785 -0.162212 +v 0.137950 0.980785 -0.137950 +v 0.270598 0.923880 -0.270598 +v 0.392847 0.831470 -0.392847 +v 0.500000 0.707107 -0.500000 +v 0.587938 0.555570 -0.587938 +v 0.653281 0.382683 -0.653281 +v 0.693520 0.195090 -0.693520 +v 0.707107 0.000000 -0.707107 +v 0.693520 -0.195090 -0.693520 +v 0.653281 -0.382683 -0.653281 +v 0.587938 -0.555570 -0.587938 +v 0.500000 -0.707107 -0.500000 +v 0.392847 -0.831470 -0.392847 +v 0.270598 -0.923880 -0.270598 +v 0.137950 -0.980785 -0.137950 +v 0.162212 0.980785 -0.108386 +v 0.318190 0.923880 -0.212608 +v 0.461940 0.831470 -0.308658 +v 0.587938 0.707107 -0.392847 +v 0.691342 0.555570 -0.461940 +v 0.768178 0.382683 -0.513280 +v 0.815493 0.195090 -0.544895 +v 0.831470 0.000000 -0.555570 +v 0.815493 -0.195090 -0.544895 +v 0.768178 -0.382683 -0.513280 +v 0.691342 -0.555570 -0.461940 +v 0.587938 -0.707107 -0.392847 +v 0.461940 -0.831470 -0.308658 +v 0.318190 -0.923880 -0.212608 +v 0.162212 -0.980785 -0.108386 +v 0.000000 1.000000 0.000000 +v 0.180240 0.980785 -0.074658 +v 0.353553 0.923880 -0.146447 +v 0.513280 0.831470 -0.212607 +v 0.653281 0.707107 -0.270598 +v 0.768178 0.555570 -0.318190 +v 0.853553 0.382683 -0.353553 +v 0.906127 0.195090 -0.375330 +v 0.923879 0.000000 -0.382683 +v 0.906127 -0.195090 -0.375330 +v 0.853553 -0.382683 -0.353553 +v 0.768178 -0.555570 -0.318190 +v 0.653281 -0.707107 -0.270598 +v 0.513280 -0.831470 -0.212607 +v 0.353553 -0.923880 -0.146447 +v 0.180240 -0.980785 -0.074658 +v 0.191342 0.980785 -0.038060 +v 0.375330 0.923880 -0.074658 +v 0.544895 0.831470 -0.108386 +v 0.693520 0.707107 -0.137950 +v 0.815493 0.555570 -0.162212 +v 0.906127 0.382683 -0.180240 +v 0.961940 0.195090 -0.191342 +v 0.980785 0.000000 -0.195090 +v 0.961940 -0.195090 -0.191342 +v 0.906127 -0.382683 -0.180240 +v 0.815493 -0.555570 -0.162212 +v 0.693520 -0.707107 -0.137950 +v 0.544895 -0.831470 -0.108386 +v 0.375330 -0.923880 -0.074658 +v 0.191342 -0.980785 -0.038060 +v 0.195090 0.980785 0.000000 +v 0.382683 0.923880 0.000000 +v 0.555570 0.831470 0.000000 +v 0.707107 0.707107 -0.000000 +v 0.831469 0.555570 0.000000 +v 0.923879 0.382683 -0.000000 +v 0.980785 0.195090 0.000000 +v 1.000000 0.000000 0.000000 +v 0.980785 -0.195090 0.000000 +v 0.923879 -0.382683 -0.000000 +v 0.831469 -0.555570 0.000000 +v 0.707107 -0.707107 -0.000000 +v 0.555570 -0.831470 0.000000 +v 0.382683 -0.923880 0.000000 +v 0.195090 -0.980785 0.000000 +v 0.191342 0.980785 0.038060 +v 0.375330 0.923880 0.074658 +v 0.544895 0.831470 0.108386 +v 0.693520 0.707107 0.137950 +v 0.815493 0.555570 0.162212 +v 0.906127 0.382683 0.180240 +v 0.961940 0.195090 0.191342 +v 0.980785 0.000000 0.195090 +v 0.961940 -0.195090 0.191342 +v 0.906127 -0.382683 0.180240 +v 0.815493 -0.555570 0.162212 +v 0.693520 -0.707107 0.137950 +v 0.544895 -0.831470 0.108386 +v 0.375330 -0.923880 0.074658 +v 0.191342 -0.980785 0.038060 +v 0.180240 0.980785 0.074658 +v 0.353553 0.923880 0.146447 +v 0.513280 0.831470 0.212608 +v 0.653281 0.707107 0.270598 +v 0.768178 0.555570 0.318190 +v 0.853553 0.382683 0.353553 +v 0.906127 0.195090 0.375330 +v 0.923879 0.000000 0.382683 +v 0.906127 -0.195090 0.375330 +v 0.853553 -0.382683 0.353553 +v 0.768178 -0.555570 0.318190 +v 0.653281 -0.707107 0.270598 +v 0.513280 -0.831470 0.212608 +v 0.353553 -0.923880 0.146447 +v 0.180240 -0.980785 0.074658 +v 0.162212 0.980785 0.108386 +v 0.318190 0.923880 0.212608 +v 0.461940 0.831470 0.308658 +v 0.587938 0.707107 0.392847 +v 0.691341 0.555570 0.461940 +v 0.768178 0.382683 0.513280 +v 0.815493 0.195090 0.544895 +v 0.831469 0.000000 0.555570 +v 0.815493 -0.195090 0.544895 +v 0.768178 -0.382683 0.513280 +v 0.691341 -0.555570 0.461940 +v 0.587938 -0.707107 0.392847 +v 0.461940 -0.831470 0.308658 +v 0.318190 -0.923880 0.212608 +v 0.162212 -0.980785 0.108386 +v 0.137950 0.980785 0.137950 +v 0.270598 0.923880 0.270598 +v 0.392847 0.831470 0.392847 +v 0.500000 0.707107 0.500000 +v 0.587938 0.555570 0.587938 +v 0.653281 0.382683 0.653281 +v 0.693520 0.195090 0.693520 +v 0.707106 0.000000 0.707107 +v 0.693520 -0.195090 0.693520 +v 0.653281 -0.382683 0.653281 +v 0.587938 -0.555570 0.587938 +v 0.500000 -0.707107 0.500000 +v 0.392847 -0.831470 0.392847 +v 0.270598 -0.923880 0.270598 +v 0.137950 -0.980785 0.137950 +v 0.108386 0.980785 0.162212 +v 0.212607 0.923880 0.318190 +v 0.308658 0.831470 0.461940 +v 0.392847 0.707107 0.587938 +v 0.461940 0.555570 0.691342 +v 0.513280 0.382683 0.768178 +v 0.544895 0.195090 0.815493 +v 0.555570 0.000000 0.831469 +v 0.544895 -0.195090 0.815493 +v 0.513280 -0.382683 0.768178 +v 0.461940 -0.555570 0.691342 +v 0.392847 -0.707107 0.587938 +v 0.308658 -0.831470 0.461940 +v 0.212607 -0.923880 0.318190 +v 0.108386 -0.980785 0.162212 +v 0.074658 0.980785 0.180240 +v 0.146447 0.923880 0.353553 +v 0.212607 0.831470 0.513280 +v 0.270598 0.707107 0.653281 +v 0.318189 0.555570 0.768178 +v 0.353553 0.382683 0.853553 +v 0.375330 0.195090 0.906127 +v 0.382683 0.000000 0.923879 +v 0.375330 -0.195090 0.906127 +v 0.353553 -0.382683 0.853553 +v 0.318189 -0.555570 0.768178 +v 0.270598 -0.707107 0.653281 +v 0.212607 -0.831470 0.513280 +v 0.146447 -0.923880 0.353553 +v 0.074658 -0.980785 0.180240 +v 0.038060 0.980785 0.191342 +v 0.074658 0.923880 0.375330 +v 0.108386 0.831470 0.544895 +v 0.137950 0.707107 0.693520 +v 0.162212 0.555570 0.815493 +v 0.180240 0.382683 0.906127 +v 0.191342 0.195090 0.961939 +v 0.195090 0.000000 0.980785 +v 0.191342 -0.195090 0.961939 +v 0.180240 -0.382683 0.906127 +v 0.162212 -0.555570 0.815493 +v 0.137950 -0.707107 0.693520 +v 0.108386 -0.831470 0.544895 +v 0.074658 -0.923880 0.375330 +v 0.038060 -0.980785 0.191342 +v -0.000000 0.980785 0.195090 +v -0.000000 0.923880 0.382683 +v -0.000000 0.831470 0.555570 +v -0.000000 0.707107 0.707107 +v -0.000000 0.555570 0.831469 +v 0.000000 0.382683 0.923879 +v -0.000000 0.195090 0.980785 +v -0.000000 0.000000 0.999999 +v -0.000000 -0.195090 0.980785 +v 0.000000 -0.382683 0.923879 +v -0.000000 -0.555570 0.831469 +v -0.000000 -0.707107 0.707107 +v -0.000000 -0.831470 0.555570 +v -0.000000 -0.923880 0.382683 +v -0.000000 -0.980785 0.195090 +v -0.038060 0.980785 0.191342 +v -0.074658 0.923880 0.375330 +v -0.108386 0.831470 0.544895 +v -0.137950 0.707107 0.693520 +v -0.162212 0.555570 0.815493 +v -0.180240 0.382683 0.906127 +v -0.191342 0.195090 0.961939 +v -0.195091 0.000000 0.980785 +v -0.191342 -0.195090 0.961939 +v -0.180240 -0.382683 0.906127 +v -0.162212 -0.555570 0.815493 +v -0.137950 -0.707107 0.693520 +v -0.108386 -0.831470 0.544895 +v -0.074658 -0.923880 0.375330 +v -0.038060 -0.980785 0.191342 +v -0.074658 0.980785 0.180240 +v -0.146447 0.923880 0.353553 +v -0.212608 0.831470 0.513280 +v -0.270598 0.707107 0.653281 +v -0.318190 0.555570 0.768177 +v -0.353553 0.382683 0.853553 +v -0.375330 0.195090 0.906127 +v -0.382683 0.000000 0.923879 +v -0.375330 -0.195090 0.906127 +v -0.353553 -0.382683 0.853553 +v -0.318190 -0.555570 0.768177 +v -0.270598 -0.707107 0.653281 +v -0.212608 -0.831470 0.513280 +v -0.146447 -0.923880 0.353553 +v -0.074658 -0.980785 0.180240 +v -0.108386 0.980785 0.162212 +v -0.212608 0.923880 0.318190 +v -0.308658 0.831470 0.461939 +v -0.392847 0.707107 0.587938 +v -0.461940 0.555570 0.691341 +v -0.513280 0.382683 0.768178 +v -0.544895 0.195090 0.815493 +v -0.555570 0.000000 0.831469 +v -0.544895 -0.195090 0.815493 +v -0.513280 -0.382683 0.768178 +v -0.461940 -0.555570 0.691341 +v -0.392847 -0.707107 0.587938 +v -0.308658 -0.831470 0.461939 +v -0.212608 -0.923880 0.318190 +v -0.108386 -0.980785 0.162212 +v -0.137950 0.980785 0.137950 +v -0.270598 0.923880 0.270598 +v -0.392847 0.831470 0.392847 +v -0.500000 0.707107 0.500000 +v -0.587938 0.555570 0.587937 +v -0.653281 0.382683 0.653281 +v -0.693520 0.195090 0.693520 +v -0.707106 0.000000 0.707106 +v -0.693520 -0.195090 0.693520 +v -0.653281 -0.382683 0.653281 +v -0.587938 -0.555570 0.587937 +v -0.500000 -0.707107 0.500000 +v -0.392847 -0.831470 0.392847 +v -0.270598 -0.923880 0.270598 +v -0.137950 -0.980785 0.137950 +v 0.000000 -1.000000 0.000000 +v -0.162212 0.980785 0.108386 +v -0.318190 0.923880 0.212607 +v -0.461940 0.831470 0.308658 +v -0.587938 0.707107 0.392847 +v -0.691341 0.555570 0.461939 +v -0.768177 0.382683 0.513280 +v -0.815493 0.195090 0.544895 +v -0.831469 0.000000 0.555569 +v -0.815493 -0.195090 0.544895 +v -0.768177 -0.382683 0.513280 +v -0.691341 -0.555570 0.461939 +v -0.587938 -0.707107 0.392847 +v -0.461940 -0.831470 0.308658 +v -0.318190 -0.923880 0.212607 +v -0.162212 -0.980785 0.108386 +v -0.180240 0.980785 0.074658 +v -0.353553 0.923880 0.146447 +v -0.513280 0.831470 0.212607 +v -0.653281 0.707107 0.270598 +v -0.768177 0.555570 0.318189 +v -0.853553 0.382683 0.353553 +v -0.906127 0.195090 0.375330 +v -0.923879 0.000000 0.382683 +v -0.906127 -0.195090 0.375330 +v -0.853553 -0.382683 0.353553 +v -0.768177 -0.555570 0.318189 +v -0.653281 -0.707107 0.270598 +v -0.513280 -0.831470 0.212607 +v -0.353553 -0.923880 0.146447 +v -0.180240 -0.980785 0.074658 +v -0.191342 0.980785 0.038060 +v -0.375330 0.923880 0.074658 +v -0.544895 0.831470 0.108386 +v -0.693520 0.707107 0.137950 +v -0.815493 0.555570 0.162211 +v -0.906127 0.382683 0.180240 +v -0.961939 0.195090 0.191341 +v -0.980784 0.000000 0.195090 +v -0.961939 -0.195090 0.191341 +v -0.906127 -0.382683 0.180240 +v -0.815493 -0.555570 0.162211 +v -0.693520 -0.707107 0.137950 +v -0.544895 -0.831470 0.108386 +v -0.375330 -0.923880 0.074658 +v -0.191342 -0.980785 0.038060 +v -0.195090 0.980785 -0.000000 +v -0.382683 0.923880 -0.000000 +v -0.555570 0.831470 -0.000000 +v -0.707107 0.707107 -0.000000 +v -0.831469 0.555570 -0.000000 +v -0.923879 0.382683 -0.000000 +v -0.980785 0.195090 -0.000000 +v -0.999999 0.000000 -0.000000 +v -0.980785 -0.195090 -0.000000 +v -0.923879 -0.382683 -0.000000 +v -0.831469 -0.555570 -0.000000 +v -0.707107 -0.707107 -0.000000 +v -0.555570 -0.831470 -0.000000 +v -0.382683 -0.923880 -0.000000 +v -0.195090 -0.980785 -0.000000 +v -0.191342 0.980785 -0.038060 +v -0.375330 0.923880 -0.074658 +v -0.544895 0.831470 -0.108386 +v -0.693520 0.707107 -0.137950 +v -0.815493 0.555570 -0.162212 +v -0.906127 0.382683 -0.180240 +v -0.961939 0.195090 -0.191342 +v -0.980784 0.000000 -0.195091 +v -0.961939 -0.195090 -0.191342 +v -0.906127 -0.382683 -0.180240 +v -0.815493 -0.555570 -0.162212 +v -0.693520 -0.707107 -0.137950 +v -0.544895 -0.831470 -0.108386 +v -0.375330 -0.923880 -0.074658 +v -0.191342 -0.980785 -0.038060 +v -0.180240 0.980785 -0.074658 +v -0.353553 0.923880 -0.146447 +v -0.513279 0.831470 -0.212607 +v -0.653281 0.707107 -0.270598 +v -0.768177 0.555570 -0.318190 +v -0.853553 0.382683 -0.353553 +v -0.906127 0.195090 -0.375330 +v -0.923878 0.000000 -0.382683 +v -0.906127 -0.195090 -0.375330 +v -0.853553 -0.382683 -0.353553 +v -0.768177 -0.555570 -0.318190 +v -0.653281 -0.707107 -0.270598 +v -0.513279 -0.831470 -0.212607 +v -0.353553 -0.923880 -0.146447 +v -0.180240 -0.980785 -0.074658 +v -0.162212 0.980785 -0.108386 +v -0.318189 0.923880 -0.212607 +v -0.461939 0.831470 -0.308658 +v -0.587938 0.707107 -0.392847 +v -0.691341 0.555570 -0.461940 +v -0.768177 0.382683 -0.513280 +v -0.815493 0.195090 -0.544895 +v -0.831468 0.000000 -0.555570 +v -0.815493 -0.195090 -0.544895 +v -0.768177 -0.382683 -0.513280 +v -0.691341 -0.555570 -0.461940 +v -0.587938 -0.707107 -0.392847 +v -0.461939 -0.831470 -0.308658 +v -0.318189 -0.923880 -0.212607 +v -0.162212 -0.980785 -0.108386 +v -0.137950 0.980785 -0.137950 +v -0.270598 0.923880 -0.270598 +v -0.392847 0.831470 -0.392847 +v -0.500000 0.707107 -0.500000 +v -0.587937 0.555570 -0.587938 +v -0.653281 0.382683 -0.653281 +v -0.693519 0.195090 -0.693520 +v -0.707106 0.000000 -0.707106 +v -0.693519 -0.195090 -0.693520 +v -0.653281 -0.382683 -0.653281 +v -0.587937 -0.555570 -0.587938 +v -0.500000 -0.707107 -0.500000 +v -0.392847 -0.831470 -0.392847 +v -0.270598 -0.923880 -0.270598 +v -0.137950 -0.980785 -0.137950 +v -0.108386 0.980785 -0.162212 +v -0.212607 0.923880 -0.318190 +v -0.308658 0.831470 -0.461939 +v -0.392847 0.707107 -0.587938 +v -0.461939 0.555570 -0.691341 +v -0.513280 0.382683 -0.768177 +v -0.544895 0.195090 -0.815493 +v -0.555569 0.000000 -0.831469 +v -0.544895 -0.195090 -0.815493 +v -0.513280 -0.382683 -0.768177 +v -0.461939 -0.555570 -0.691341 +v -0.392847 -0.707107 -0.587938 +v -0.308658 -0.831470 -0.461939 +v -0.212607 -0.923880 -0.318190 +v -0.108386 -0.980785 -0.162212 +v -0.074658 0.980785 -0.180240 +v -0.146446 0.923880 -0.353553 +v -0.212607 0.831470 -0.513279 +v -0.270598 0.707107 -0.653281 +v -0.318189 0.555570 -0.768177 +v -0.353553 0.382683 -0.853553 +v -0.375330 0.195090 -0.906127 +v -0.382683 0.000000 -0.923879 +v -0.375330 -0.195090 -0.906127 +v -0.353553 -0.382683 -0.853553 +v -0.318189 -0.555570 -0.768177 +v -0.270598 -0.707107 -0.653281 +v -0.212607 -0.831470 -0.513279 +v -0.146446 -0.923880 -0.353553 +v -0.074658 -0.980785 -0.180240 +v -0.038060 0.980785 -0.191342 +v -0.074658 0.923880 -0.375330 +v -0.108386 0.831470 -0.544895 +v -0.137950 0.707107 -0.693520 +v -0.162211 0.555570 -0.815493 +v -0.180240 0.382683 -0.906127 +v -0.191341 0.195090 -0.961939 +v -0.195090 0.000000 -0.980784 +v -0.191341 -0.195090 -0.961939 +v -0.180240 -0.382683 -0.906127 +v -0.162211 -0.555570 -0.815493 +v -0.137950 -0.707107 -0.693520 +v -0.108386 -0.831470 -0.544895 +v -0.074658 -0.923880 -0.375330 +v -0.038060 -0.980785 -0.191342 +v 0.000000 0.980785 -0.195090 +v 0.000000 0.923880 -0.382683 +v 0.000000 0.707107 -0.707107 +v 0.000000 0.382683 -0.923879 +v 0.000000 -0.382683 -0.923879 +v 0.000000 -0.707107 -0.707107 +v 0.000000 -0.831470 -0.555570 +v 0.000000 -0.923880 -0.382683 +v 0.000000 -0.980785 -0.195090 +vn 0.0464 -0.8810 -0.4709 +vn 0.0938 0.2890 -0.9527 +vn 0.0286 -0.9565 -0.2902 +vn 0.0975 0.0975 -0.9904 +vn 0.0097 0.9951 -0.0980 +vn 0.0097 -0.9951 -0.0980 +vn 0.0975 -0.0976 -0.9904 +vn 0.0286 0.9565 -0.2902 +vn 0.0938 -0.2890 -0.9527 +vn 0.0464 0.8810 -0.4709 +vn 0.0865 -0.4696 -0.8786 +vn 0.0624 0.7715 -0.6332 +vn 0.0759 -0.6326 -0.7708 +vn 0.0759 0.6326 -0.7708 +vn 0.0624 -0.7715 -0.6332 +vn 0.0865 0.4696 -0.8786 +vn 0.2248 0.6326 -0.7412 +vn 0.1847 -0.7715 -0.6088 +vn 0.2563 0.4696 -0.8448 +vn 0.1374 -0.8810 -0.4528 +vn 0.2779 0.2890 -0.9161 +vn 0.0846 -0.9565 -0.2790 +vn 0.2889 0.0976 -0.9524 +vn 0.0286 0.9951 -0.0942 +vn 0.0286 -0.9951 -0.0942 +vn 0.2889 -0.0976 -0.9524 +vn 0.0846 0.9565 -0.2790 +vn 0.2779 -0.2890 -0.9161 +vn 0.1374 0.8810 -0.4528 +vn 0.2563 -0.4696 -0.8448 +vn 0.1847 0.7715 -0.6088 +vn 0.2248 -0.6326 -0.7412 +vn 0.4691 -0.0975 -0.8777 +vn 0.1374 0.9565 -0.2571 +vn 0.4513 -0.2890 -0.8443 +vn 0.2231 0.8810 -0.4173 +vn 0.4162 -0.4696 -0.7786 +vn 0.2999 0.7715 -0.5611 +vn 0.3651 -0.6326 -0.6831 +vn 0.3651 0.6326 -0.6831 +vn 0.2999 -0.7715 -0.5611 +vn 0.4162 0.4696 -0.7786 +vn 0.2230 -0.8810 -0.4173 +vn 0.4513 0.2890 -0.8443 +vn 0.1374 -0.9565 -0.2571 +vn 0.4691 0.0975 -0.8777 +vn 0.0464 0.9951 -0.0869 +vn 0.0464 -0.9951 -0.0869 +vn 0.4036 -0.7715 -0.4918 +vn 0.5601 0.4696 -0.6825 +vn 0.3002 -0.8810 -0.3658 +vn 0.6073 0.2890 -0.7400 +vn 0.1850 -0.9565 -0.2254 +vn 0.6314 0.0975 -0.7693 +vn 0.0625 0.9951 -0.0761 +vn 0.0625 -0.9951 -0.0761 +vn 0.6314 -0.0975 -0.7693 +vn 0.1850 0.9565 -0.2254 +vn 0.6073 -0.2890 -0.7400 +vn 0.3002 0.8810 -0.3658 +vn 0.5601 -0.4696 -0.6825 +vn 0.4036 0.7715 -0.4918 +vn 0.4913 -0.6326 -0.5987 +vn 0.4913 0.6326 -0.5987 +vn 0.7400 -0.2890 -0.6073 +vn 0.3658 0.8810 -0.3002 +vn 0.6825 -0.4696 -0.5601 +vn 0.4918 0.7715 -0.4036 +vn 0.5987 -0.6326 -0.4913 +vn 0.5987 0.6326 -0.4913 +vn 0.4918 -0.7715 -0.4036 +vn 0.6825 0.4696 -0.5601 +vn 0.3658 -0.8810 -0.3002 +vn 0.7400 0.2890 -0.6073 +vn 0.2254 -0.9566 -0.1850 +vn 0.7693 0.0975 -0.6314 +vn 0.0761 0.9951 -0.0625 +vn 0.0761 -0.9951 -0.0625 +vn 0.7693 -0.0975 -0.6314 +vn 0.2254 0.9565 -0.1850 +vn 0.4173 -0.8810 -0.2230 +vn 0.8443 0.2890 -0.4513 +vn 0.2571 -0.9565 -0.1374 +vn 0.8777 0.0975 -0.4691 +vn 0.0869 0.9951 -0.0464 +vn 0.0869 -0.9951 -0.0464 +vn 0.8777 -0.0975 -0.4691 +vn 0.2571 0.9565 -0.1374 +vn 0.8443 -0.2890 -0.4513 +vn 0.4173 0.8810 -0.2230 +vn 0.7786 -0.4696 -0.4162 +vn 0.5611 0.7715 -0.2999 +vn 0.6831 -0.6326 -0.3651 +vn 0.6831 0.6326 -0.3651 +vn 0.5611 -0.7715 -0.2999 +vn 0.7786 0.4696 -0.4162 +vn 0.4528 0.8810 -0.1374 +vn 0.8448 -0.4696 -0.2563 +vn 0.6088 0.7715 -0.1847 +vn 0.7412 -0.6326 -0.2248 +vn 0.7412 0.6326 -0.2248 +vn 0.6088 -0.7715 -0.1847 +vn 0.8448 0.4696 -0.2563 +vn 0.4528 -0.8810 -0.1374 +vn 0.9161 0.2890 -0.2779 +vn 0.2790 -0.9565 -0.0846 +vn 0.9524 0.0975 -0.2889 +vn 0.0942 0.9951 -0.0286 +vn 0.0942 -0.9951 -0.0286 +vn 0.9524 -0.0975 -0.2889 +vn 0.2790 0.9565 -0.0846 +vn 0.9161 -0.2890 -0.2779 +vn 0.9527 0.2890 -0.0938 +vn 0.2902 -0.9565 -0.0286 +vn 0.9904 0.0975 -0.0975 +vn 0.0980 0.9951 -0.0097 +vn 0.0980 -0.9951 -0.0097 +vn 0.9904 -0.0975 -0.0975 +vn 0.2902 0.9565 -0.0286 +vn 0.9527 -0.2890 -0.0938 +vn 0.4709 0.8810 -0.0464 +vn 0.8786 -0.4696 -0.0865 +vn 0.6332 0.7715 -0.0624 +vn 0.7708 -0.6326 -0.0759 +vn 0.7708 0.6326 -0.0759 +vn 0.6332 -0.7715 -0.0624 +vn 0.8786 0.4696 -0.0865 +vn 0.4709 -0.8810 -0.0464 +vn 0.8786 -0.4696 0.0865 +vn 0.6332 0.7715 0.0624 +vn 0.7708 -0.6326 0.0759 +vn 0.7708 0.6326 0.0759 +vn 0.6332 -0.7715 0.0624 +vn 0.8786 0.4696 0.0865 +vn 0.4709 -0.8810 0.0464 +vn 0.9527 0.2890 0.0938 +vn 0.2902 -0.9565 0.0286 +vn 0.9904 0.0975 0.0976 +vn 0.0980 0.9951 0.0097 +vn 0.0980 -0.9951 0.0097 +vn 0.9904 -0.0975 0.0976 +vn 0.2902 0.9565 0.0286 +vn 0.9527 -0.2890 0.0938 +vn 0.4709 0.8810 0.0464 +vn 0.2790 -0.9565 0.0846 +vn 0.9524 0.0975 0.2889 +vn 0.0942 0.9951 0.0286 +vn 0.0942 -0.9951 0.0286 +vn 0.9524 -0.0975 0.2889 +vn 0.2790 0.9565 0.0846 +vn 0.9161 -0.2890 0.2779 +vn 0.4528 0.8810 0.1374 +vn 0.8448 -0.4696 0.2563 +vn 0.6088 0.7715 0.1847 +vn 0.7412 -0.6326 0.2248 +vn 0.7412 0.6326 0.2248 +vn 0.6088 -0.7715 0.1847 +vn 0.8448 0.4696 0.2563 +vn 0.4528 -0.8810 0.1374 +vn 0.9161 0.2890 0.2779 +vn 0.5611 0.7715 0.2999 +vn 0.6831 -0.6326 0.3651 +vn 0.6831 0.6326 0.3651 +vn 0.5611 -0.7715 0.2999 +vn 0.7786 0.4696 0.4162 +vn 0.4173 -0.8810 0.2230 +vn 0.8443 0.2890 0.4513 +vn 0.2571 -0.9565 0.1374 +vn 0.8777 0.0975 0.4691 +vn 0.0869 0.9951 0.0464 +vn 0.0869 -0.9951 0.0464 +vn 0.8777 -0.0975 0.4691 +vn 0.2571 0.9565 0.1374 +vn 0.8443 -0.2890 0.4513 +vn 0.4173 0.8810 0.2231 +vn 0.7786 -0.4696 0.4162 +vn 0.7693 0.0975 0.6314 +vn 0.0761 0.9951 0.0625 +vn 0.0761 -0.9951 0.0625 +vn 0.7693 -0.0975 0.6314 +vn 0.2254 0.9565 0.1850 +vn 0.7400 -0.2890 0.6073 +vn 0.3658 0.8810 0.3002 +vn 0.6825 -0.4696 0.5601 +vn 0.4918 0.7715 0.4036 +vn 0.5987 -0.6326 0.4913 +vn 0.5987 0.6326 0.4913 +vn 0.4918 -0.7715 0.4036 +vn 0.6825 0.4696 0.5601 +vn 0.3658 -0.8810 0.3002 +vn 0.7400 0.2890 0.6073 +vn 0.2254 -0.9565 0.1850 +vn 0.4913 -0.6326 0.5987 +vn 0.4913 0.6326 0.5987 +vn 0.4036 -0.7715 0.4918 +vn 0.5601 0.4696 0.6825 +vn 0.3002 -0.8810 0.3658 +vn 0.6073 0.2890 0.7400 +vn 0.1850 -0.9565 0.2254 +vn 0.6314 0.0975 0.7693 +vn 0.0625 0.9951 0.0761 +vn 0.0625 -0.9951 0.0761 +vn 0.6314 -0.0975 0.7693 +vn 0.1850 0.9565 0.2254 +vn 0.6073 -0.2890 0.7400 +vn 0.3002 0.8810 0.3658 +vn 0.5601 -0.4696 0.6825 +vn 0.4036 0.7715 0.4918 +vn 0.0464 -0.9951 0.0869 +vn 0.4691 -0.0975 0.8777 +vn 0.1374 0.9565 0.2571 +vn 0.4513 -0.2890 0.8443 +vn 0.2230 0.8810 0.4173 +vn 0.4162 -0.4696 0.7786 +vn 0.2999 0.7715 0.5611 +vn 0.3651 -0.6326 0.6831 +vn 0.3651 0.6326 0.6831 +vn 0.2999 -0.7715 0.5611 +vn 0.4162 0.4696 0.7786 +vn 0.2230 -0.8810 0.4173 +vn 0.4513 0.2890 0.8443 +vn 0.1374 -0.9565 0.2571 +vn 0.4691 0.0975 0.8777 +vn 0.0464 0.9951 0.0869 +vn 0.1847 -0.7715 0.6088 +vn 0.2563 0.4696 0.8448 +vn 0.1374 -0.8810 0.4528 +vn 0.2779 0.2890 0.9161 +vn 0.0846 -0.9565 0.2790 +vn 0.2889 0.0975 0.9524 +vn 0.0286 0.9951 0.0942 +vn 0.0286 -0.9951 0.0942 +vn 0.2889 -0.0975 0.9524 +vn 0.0846 0.9565 0.2790 +vn 0.2779 -0.2890 0.9161 +vn 0.1374 0.8810 0.4528 +vn 0.2563 -0.4696 0.8448 +vn 0.1847 0.7715 0.6088 +vn 0.2248 -0.6326 0.7412 +vn 0.2248 0.6326 0.7412 +vn 0.0286 0.9565 0.2902 +vn 0.0938 -0.2890 0.9527 +vn 0.0464 0.8810 0.4709 +vn 0.0865 -0.4696 0.8786 +vn 0.0624 0.7715 0.6332 +vn 0.0759 -0.6326 0.7708 +vn 0.0759 0.6326 0.7708 +vn 0.0624 -0.7715 0.6332 +vn 0.0865 0.4696 0.8786 +vn 0.0464 -0.8810 0.4709 +vn 0.0938 0.2890 0.9527 +vn 0.0286 -0.9565 0.2902 +vn 0.0975 0.0975 0.9904 +vn 0.0097 0.9951 0.0980 +vn 0.0097 -0.9951 0.0980 +vn 0.0975 -0.0975 0.9904 +vn -0.0865 0.4696 0.8786 +vn -0.0464 -0.8810 0.4709 +vn -0.0938 0.2890 0.9527 +vn -0.0286 -0.9565 0.2902 +vn -0.0976 0.0975 0.9904 +vn -0.0097 0.9951 0.0980 +vn -0.0097 -0.9951 0.0980 +vn -0.0975 -0.0975 0.9904 +vn -0.0286 0.9565 0.2902 +vn -0.0938 -0.2890 0.9527 +vn -0.0464 0.8810 0.4709 +vn -0.0865 -0.4696 0.8786 +vn -0.0624 0.7715 0.6332 +vn -0.0759 -0.6326 0.7708 +vn -0.0759 0.6326 0.7708 +vn -0.0624 -0.7715 0.6332 +vn -0.2779 -0.2890 0.9161 +vn -0.1374 0.8810 0.4528 +vn -0.2563 -0.4696 0.8448 +vn -0.1847 0.7715 0.6088 +vn -0.2248 -0.6326 0.7412 +vn -0.2248 0.6326 0.7412 +vn -0.1847 -0.7715 0.6088 +vn -0.2563 0.4696 0.8448 +vn -0.1374 -0.8810 0.4528 +vn -0.2779 0.2890 0.9161 +vn -0.0846 -0.9565 0.2790 +vn -0.2889 0.0975 0.9524 +vn -0.0286 0.9951 0.0942 +vn -0.0286 -0.9951 0.0942 +vn -0.2889 -0.0975 0.9524 +vn -0.0846 0.9565 0.2790 +vn -0.2230 -0.8810 0.4173 +vn -0.4513 0.2890 0.8443 +vn -0.1374 -0.9565 0.2571 +vn -0.4691 0.0975 0.8777 +vn -0.0464 0.9951 0.0869 +vn -0.0464 -0.9951 0.0869 +vn -0.4691 -0.0975 0.8777 +vn -0.1374 0.9565 0.2571 +vn -0.4513 -0.2890 0.8443 +vn -0.2230 0.8810 0.4173 +vn -0.4162 -0.4696 0.7786 +vn -0.2999 0.7715 0.5611 +vn -0.3651 -0.6326 0.6831 +vn -0.3651 0.6326 0.6831 +vn -0.2999 -0.7715 0.5611 +vn -0.4162 0.4696 0.7786 +vn -0.3002 0.8810 0.3658 +vn -0.5601 -0.4696 0.6825 +vn -0.4036 0.7715 0.4918 +vn -0.4913 -0.6326 0.5987 +vn -0.4913 0.6326 0.5987 +vn -0.4036 -0.7715 0.4918 +vn -0.5601 0.4696 0.6825 +vn -0.3002 -0.8810 0.3658 +vn -0.6073 0.2890 0.7400 +vn -0.1850 -0.9565 0.2254 +vn -0.6314 0.0975 0.7693 +vn -0.0625 0.9951 0.0761 +vn -0.0625 -0.9951 0.0761 +vn -0.6314 -0.0975 0.7693 +vn -0.1850 0.9565 0.2254 +vn -0.6073 -0.2890 0.7400 +vn -0.7400 0.2890 0.6073 +vn -0.2254 -0.9566 0.1850 +vn -0.7693 0.0975 0.6314 +vn -0.0761 0.9951 0.0625 +vn -0.0761 -0.9951 0.0625 +vn -0.7693 -0.0975 0.6314 +vn -0.2254 0.9565 0.1850 +vn -0.7400 -0.2890 0.6073 +vn -0.3658 0.8810 0.3002 +vn -0.6825 -0.4696 0.5601 +vn -0.4918 0.7715 0.4036 +vn -0.5987 -0.6326 0.4913 +vn -0.5987 0.6326 0.4913 +vn -0.4918 -0.7715 0.4036 +vn -0.6825 0.4696 0.5601 +vn -0.3658 -0.8810 0.3002 +vn -0.7786 -0.4696 0.4162 +vn -0.5611 0.7715 0.2999 +vn -0.6831 -0.6326 0.3651 +vn -0.6831 0.6326 0.3651 +vn -0.5611 -0.7715 0.2999 +vn -0.7786 0.4696 0.4162 +vn -0.4173 -0.8810 0.2231 +vn -0.8443 0.2890 0.4513 +vn -0.2571 -0.9565 0.1374 +vn -0.8777 0.0975 0.4691 +vn -0.0869 0.9951 0.0464 +vn -0.0869 -0.9951 0.0464 +vn -0.8777 -0.0975 0.4691 +vn -0.2571 0.9565 0.1374 +vn -0.8443 -0.2890 0.4513 +vn -0.4173 0.8810 0.2230 +vn -0.2790 -0.9565 0.0846 +vn -0.9524 0.0975 0.2889 +vn -0.0942 0.9951 0.0286 +vn -0.0942 -0.9951 0.0286 +vn -0.9524 -0.0975 0.2889 +vn -0.2790 0.9565 0.0846 +vn -0.9161 -0.2890 0.2779 +vn -0.4528 0.8810 0.1374 +vn -0.8448 -0.4696 0.2563 +vn -0.6088 0.7715 0.1847 +vn -0.7412 -0.6326 0.2248 +vn -0.7412 0.6326 0.2248 +vn -0.6088 -0.7715 0.1847 +vn -0.8448 0.4696 0.2563 +vn -0.4528 -0.8810 0.1374 +vn -0.9161 0.2890 0.2779 +vn -0.7708 -0.6326 0.0759 +vn -0.7708 0.6326 0.0759 +vn -0.6332 -0.7715 0.0624 +vn -0.8786 0.4696 0.0865 +vn -0.4709 -0.8810 0.0464 +vn -0.9527 0.2890 0.0938 +vn -0.2902 -0.9565 0.0286 +vn -0.9904 0.0975 0.0975 +vn -0.0980 0.9951 0.0097 +vn -0.0980 -0.9951 0.0097 +vn -0.9904 -0.0975 0.0976 +vn -0.2902 0.9565 0.0286 +vn -0.9527 -0.2890 0.0938 +vn -0.4709 0.8810 0.0464 +vn -0.8786 -0.4696 0.0865 +vn -0.6332 0.7715 0.0624 +vn -0.0980 0.9951 -0.0097 +vn -0.0980 -0.9951 -0.0097 +vn -0.9904 -0.0975 -0.0976 +vn -0.2902 0.9565 -0.0286 +vn -0.9527 -0.2890 -0.0938 +vn -0.4709 0.8810 -0.0464 +vn -0.8786 -0.4696 -0.0865 +vn -0.6332 0.7715 -0.0624 +vn -0.7708 -0.6326 -0.0759 +vn -0.7708 0.6326 -0.0759 +vn -0.6332 -0.7715 -0.0624 +vn -0.8786 0.4696 -0.0865 +vn -0.4709 -0.8810 -0.0464 +vn -0.9527 0.2890 -0.0938 +vn -0.2902 -0.9565 -0.0286 +vn -0.9904 0.0975 -0.0975 +vn -0.7412 0.6326 -0.2248 +vn -0.6088 -0.7715 -0.1847 +vn -0.8448 0.4696 -0.2563 +vn -0.4528 -0.8810 -0.1374 +vn -0.9161 0.2890 -0.2779 +vn -0.2790 -0.9565 -0.0846 +vn -0.9524 0.0975 -0.2889 +vn -0.0942 0.9951 -0.0286 +vn -0.0942 -0.9951 -0.0286 +vn -0.9524 -0.0975 -0.2889 +vn -0.2790 0.9565 -0.0846 +vn -0.9161 -0.2890 -0.2779 +vn -0.4528 0.8810 -0.1374 +vn -0.8448 -0.4696 -0.2563 +vn -0.6088 0.7715 -0.1847 +vn -0.7412 -0.6326 -0.2248 +vn -0.8777 -0.0975 -0.4691 +vn -0.2571 0.9565 -0.1374 +vn -0.8443 -0.2890 -0.4513 +vn -0.4173 0.8810 -0.2231 +vn -0.7786 -0.4696 -0.4162 +vn -0.5611 0.7715 -0.2999 +vn -0.6831 -0.6326 -0.3651 +vn -0.6831 0.6326 -0.3651 +vn -0.5611 -0.7715 -0.2999 +vn -0.7786 0.4696 -0.4162 +vn -0.4173 -0.8810 -0.2231 +vn -0.8443 0.2890 -0.4513 +vn -0.2571 -0.9565 -0.1374 +vn -0.8777 0.0975 -0.4691 +vn -0.0869 0.9951 -0.0464 +vn -0.0869 -0.9951 -0.0464 +vn -0.4918 -0.7715 -0.4036 +vn -0.6825 0.4696 -0.5601 +vn -0.3658 -0.8810 -0.3002 +vn -0.7400 0.2890 -0.6073 +vn -0.2254 -0.9565 -0.1850 +vn -0.7693 0.0975 -0.6314 +vn -0.0761 0.9951 -0.0625 +vn -0.0761 -0.9951 -0.0625 +vn -0.7693 -0.0975 -0.6314 +vn -0.2254 0.9565 -0.1850 +vn -0.7400 -0.2890 -0.6073 +vn -0.3658 0.8810 -0.3002 +vn -0.6825 -0.4696 -0.5601 +vn -0.4918 0.7715 -0.4036 +vn -0.5987 -0.6326 -0.4913 +vn -0.5987 0.6326 -0.4913 +vn -0.1850 0.9565 -0.2254 +vn -0.6073 -0.2890 -0.7400 +vn -0.3002 0.8810 -0.3658 +vn -0.5601 -0.4696 -0.6825 +vn -0.4036 0.7715 -0.4918 +vn -0.4913 -0.6326 -0.5987 +vn -0.4913 0.6326 -0.5987 +vn -0.4036 -0.7715 -0.4918 +vn -0.5601 0.4696 -0.6825 +vn -0.3002 -0.8810 -0.3658 +vn -0.6073 0.2890 -0.7400 +vn -0.1850 -0.9565 -0.2254 +vn -0.6314 0.0975 -0.7693 +vn -0.0625 0.9951 -0.0761 +vn -0.0625 -0.9951 -0.0761 +vn -0.6314 -0.0975 -0.7693 +vn -0.4162 0.4696 -0.7786 +vn -0.2230 -0.8810 -0.4173 +vn -0.4513 0.2890 -0.8443 +vn -0.1374 -0.9565 -0.2571 +vn -0.4691 0.0975 -0.8777 +vn -0.0464 0.9951 -0.0869 +vn -0.0464 -0.9951 -0.0869 +vn -0.4691 -0.0975 -0.8777 +vn -0.1374 0.9565 -0.2571 +vn -0.4513 -0.2890 -0.8443 +vn -0.2230 0.8810 -0.4173 +vn -0.4162 -0.4696 -0.7786 +vn -0.2999 0.7715 -0.5611 +vn -0.3651 -0.6326 -0.6831 +vn -0.3651 0.6326 -0.6831 +vn -0.2999 -0.7715 -0.5611 +vn -0.2779 -0.2890 -0.9161 +vn -0.1374 0.8810 -0.4528 +vn -0.2563 -0.4696 -0.8448 +vn -0.1847 0.7715 -0.6088 +vn -0.2248 -0.6326 -0.7412 +vn -0.2248 0.6326 -0.7412 +vn -0.1847 -0.7715 -0.6088 +vn -0.2563 0.4696 -0.8448 +vn -0.1374 -0.8810 -0.4528 +vn -0.2779 0.2890 -0.9161 +vn -0.0846 -0.9565 -0.2790 +vn -0.2889 0.0975 -0.9524 +vn -0.0286 0.9951 -0.0942 +vn -0.0286 -0.9951 -0.0942 +vn -0.2889 -0.0975 -0.9524 +vn -0.0846 0.9565 -0.2790 +vn -0.0464 -0.8810 -0.4709 +vn -0.0938 0.2890 -0.9527 +vn -0.0286 -0.9565 -0.2902 +vn -0.0976 0.0975 -0.9904 +vn -0.0097 0.9951 -0.0980 +vn -0.0097 -0.9951 -0.0980 +vn -0.0976 -0.0975 -0.9904 +vn -0.0286 0.9565 -0.2902 +vn -0.0938 -0.2890 -0.9527 +vn -0.0464 0.8810 -0.4709 +vn -0.0865 -0.4696 -0.8786 +vn -0.0624 0.7715 -0.6332 +vn -0.0759 -0.6326 -0.7708 +vn -0.0759 0.6326 -0.7708 +vn -0.0624 -0.7715 -0.6332 +vn -0.0865 0.4696 -0.8786 +vn 0.0975 0.0976 -0.9904 +vn 0.0975 -0.0975 -0.9904 +vn 0.2230 0.8810 -0.4173 +vn 0.2231 -0.8810 -0.4173 +vn 0.2254 -0.9565 -0.1850 +vn 0.4173 -0.8810 0.2231 +vn 0.4173 0.8810 0.2230 +vn 0.2231 -0.8810 0.4173 +vn -0.0975 0.0975 0.9904 +vn -0.0976 -0.0975 0.9904 +vn -0.2231 -0.8810 0.4173 +vn -0.2231 0.8810 0.4173 +vn -0.2254 -0.9565 0.1850 +vn -0.4173 -0.8810 0.2230 +vn -0.9904 0.0975 0.0976 +vn -0.9904 -0.0975 0.0975 +vn -0.9904 -0.0975 -0.0975 +vn -0.9904 0.0975 -0.0976 +vt 0.750000 0.812500 +vt 0.750000 0.687500 +vt 0.750000 0.562500 +vt 0.750000 0.500000 +vt 0.750000 0.437500 +vt 0.750000 0.312500 +vt 0.718750 0.937500 +vt 0.718750 0.875000 +vt 0.718750 0.812500 +vt 0.718750 0.750000 +vt 0.718750 0.687500 +vt 0.718750 0.625000 +vt 0.718750 0.562500 +vt 0.718750 0.500000 +vt 0.718750 0.437500 +vt 0.718750 0.375000 +vt 0.718750 0.312500 +vt 0.718750 0.250000 +vt 0.718750 0.187500 +vt 0.718750 0.125000 +vt 0.718750 0.062500 +vt 0.687500 0.937500 +vt 0.687500 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.750000 +vt 0.687500 0.687500 +vt 0.687500 0.625000 +vt 0.687500 0.562500 +vt 0.687500 0.500000 +vt 0.687500 0.437500 +vt 0.687500 0.375000 +vt 0.687500 0.312500 +vt 0.687500 0.250000 +vt 0.687500 0.187500 +vt 0.687500 0.125000 +vt 0.687500 0.062500 +vt 0.656250 0.937500 +vt 0.656250 0.875000 +vt 0.656250 0.812500 +vt 0.656250 0.750000 +vt 0.656250 0.687500 +vt 0.656250 0.625000 +vt 0.656250 0.562500 +vt 0.656250 0.500000 +vt 0.656250 0.437500 +vt 0.656250 0.375000 +vt 0.656250 0.312500 +vt 0.656250 0.250000 +vt 0.656250 0.187500 +vt 0.656250 0.125000 +vt 0.656250 0.062500 +vt 0.625000 0.937500 +vt 0.625000 0.875000 +vt 0.625000 0.812500 +vt 0.625000 0.750000 +vt 0.625000 0.687500 +vt 0.625000 0.625000 +vt 0.625000 0.562500 +vt 0.625000 0.500000 +vt 0.625000 0.437500 +vt 0.625000 0.375000 +vt 0.625000 0.312500 +vt 0.625000 0.250000 +vt 0.625000 0.187500 +vt 0.625000 0.125000 +vt 0.625000 0.062500 +vt 0.593750 0.937500 +vt 0.593750 0.875000 +vt 0.593750 0.812500 +vt 0.593750 0.750000 +vt 0.593750 0.687500 +vt 0.593750 0.625000 +vt 0.593750 0.562500 +vt 0.593750 0.500000 +vt 0.593750 0.437500 +vt 0.593750 0.375000 +vt 0.593750 0.312500 +vt 0.593750 0.250000 +vt 0.593750 0.187500 +vt 0.593750 0.125000 +vt 0.593750 0.062500 +vt 0.734375 1.000000 +vt 0.703125 1.000000 +vt 0.671875 1.000000 +vt 0.640625 1.000000 +vt 0.609375 1.000000 +vt 0.578125 1.000000 +vt 0.546875 1.000000 +vt 0.515625 1.000000 +vt 0.484375 1.000000 +vt 0.453125 1.000000 +vt 0.421875 1.000000 +vt 0.390625 1.000000 +vt 0.359375 1.000000 +vt 0.328125 1.000000 +vt 0.296875 1.000000 +vt 0.265625 1.000000 +vt 0.234375 1.000000 +vt 0.203125 1.000000 +vt 0.171875 1.000000 +vt 0.140625 1.000000 +vt 0.109375 1.000000 +vt 0.078125 1.000000 +vt 0.046875 1.000000 +vt 0.015625 1.000000 +vt 0.984375 1.000000 +vt 0.953125 1.000000 +vt 0.921875 1.000000 +vt 0.890625 1.000000 +vt 0.859375 1.000000 +vt 0.828125 1.000000 +vt 0.796875 1.000000 +vt 0.765625 1.000000 +vt 0.562500 0.937500 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.562500 0.750000 +vt 0.562500 0.687500 +vt 0.562500 0.625000 +vt 0.562500 0.562500 +vt 0.562500 0.500000 +vt 0.562500 0.437500 +vt 0.562500 0.375000 +vt 0.562500 0.312500 +vt 0.562500 0.250000 +vt 0.562500 0.187500 +vt 0.562500 0.125000 +vt 0.562500 0.062500 +vt 0.531250 0.937500 +vt 0.531250 0.875000 +vt 0.531250 0.812500 +vt 0.531250 0.750000 +vt 0.531250 0.687500 +vt 0.531250 0.625000 +vt 0.531250 0.562500 +vt 0.531250 0.500000 +vt 0.531250 0.437500 +vt 0.531250 0.375000 +vt 0.531250 0.312500 +vt 0.531250 0.250000 +vt 0.531250 0.187500 +vt 0.531250 0.125000 +vt 0.531250 0.062500 +vt 0.500000 0.937500 +vt 0.500000 0.875000 +vt 0.500000 0.812500 +vt 0.500000 0.750000 +vt 0.500000 0.687500 +vt 0.500000 0.625000 +vt 0.500000 0.562500 +vt 0.500000 0.500000 +vt 0.500000 0.437500 +vt 0.500000 0.375000 +vt 0.500000 0.312500 +vt 0.500000 0.250000 +vt 0.500000 0.187500 +vt 0.500000 0.125000 +vt 0.500000 0.062500 +vt 0.468750 0.937500 +vt 0.468750 0.875000 +vt 0.468750 0.812500 +vt 0.468750 0.750000 +vt 0.468750 0.687500 +vt 0.468750 0.625000 +vt 0.468750 0.562500 +vt 0.468750 0.500000 +vt 0.468750 0.437500 +vt 0.468750 0.375000 +vt 0.468750 0.312500 +vt 0.468750 0.250000 +vt 0.468750 0.187500 +vt 0.468750 0.125000 +vt 0.468750 0.062500 +vt 0.437500 0.937500 +vt 0.437500 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.750000 +vt 0.437500 0.687500 +vt 0.437500 0.625000 +vt 0.437500 0.562500 +vt 0.437500 0.500000 +vt 0.437500 0.437500 +vt 0.437500 0.375000 +vt 0.437500 0.312500 +vt 0.437500 0.250000 +vt 0.437500 0.187500 +vt 0.437500 0.125000 +vt 0.437500 0.062500 +vt 0.406250 0.937500 +vt 0.406250 0.875000 +vt 0.406250 0.812500 +vt 0.406250 0.750000 +vt 0.406250 0.687500 +vt 0.406250 0.625000 +vt 0.406250 0.562500 +vt 0.406250 0.500000 +vt 0.406250 0.437500 +vt 0.406250 0.375000 +vt 0.406250 0.312500 +vt 0.406250 0.250000 +vt 0.406250 0.187500 +vt 0.406250 0.125000 +vt 0.406250 0.062500 +vt 0.375000 0.937500 +vt 0.375000 0.875000 +vt 0.375000 0.812500 +vt 0.375000 0.750000 +vt 0.375000 0.687500 +vt 0.375000 0.625000 +vt 0.375000 0.562500 +vt 0.375000 0.500000 +vt 0.375000 0.437500 +vt 0.375000 0.375000 +vt 0.375000 0.312500 +vt 0.375000 0.250000 +vt 0.375000 0.187500 +vt 0.375000 0.125000 +vt 0.375000 0.062500 +vt 0.343750 0.937500 +vt 0.343750 0.875000 +vt 0.343750 0.812500 +vt 0.343750 0.750000 +vt 0.343750 0.687500 +vt 0.343750 0.625000 +vt 0.343750 0.562500 +vt 0.343750 0.500000 +vt 0.343750 0.437500 +vt 0.343750 0.375000 +vt 0.343750 0.312500 +vt 0.343750 0.250000 +vt 0.343750 0.187500 +vt 0.343750 0.125000 +vt 0.343750 0.062500 +vt 0.312500 0.937500 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.312500 0.750000 +vt 0.312500 0.687500 +vt 0.312500 0.625000 +vt 0.312500 0.562500 +vt 0.312500 0.500000 +vt 0.312500 0.437500 +vt 0.312500 0.375000 +vt 0.312500 0.312500 +vt 0.312500 0.250000 +vt 0.312500 0.187500 +vt 0.312500 0.125000 +vt 0.312500 0.062500 +vt 0.281250 0.937500 +vt 0.281250 0.875000 +vt 0.281250 0.812500 +vt 0.281250 0.750000 +vt 0.281250 0.687500 +vt 0.281250 0.625000 +vt 0.281250 0.562500 +vt 0.281250 0.500000 +vt 0.281250 0.437500 +vt 0.281250 0.375000 +vt 0.281250 0.312500 +vt 0.281250 0.250000 +vt 0.281250 0.187500 +vt 0.281250 0.125000 +vt 0.281250 0.062500 +vt 0.250000 0.937500 +vt 0.250000 0.875000 +vt 0.250000 0.812500 +vt 0.250000 0.750000 +vt 0.250000 0.687500 +vt 0.250000 0.625000 +vt 0.250000 0.562500 +vt 0.250000 0.500000 +vt 0.250000 0.437500 +vt 0.250000 0.375000 +vt 0.250000 0.312500 +vt 0.250000 0.250000 +vt 0.250000 0.187500 +vt 0.250000 0.125000 +vt 0.250000 0.062500 +vt 0.218750 0.937500 +vt 0.218750 0.875000 +vt 0.218750 0.812500 +vt 0.218750 0.750000 +vt 0.218750 0.687500 +vt 0.218750 0.625000 +vt 0.218750 0.562500 +vt 0.218750 0.500000 +vt 0.218750 0.437500 +vt 0.218750 0.375000 +vt 0.218750 0.312500 +vt 0.218750 0.250000 +vt 0.218750 0.187500 +vt 0.218750 0.125000 +vt 0.218750 0.062500 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.187500 0.812500 +vt 0.187500 0.750000 +vt 0.187500 0.687500 +vt 0.187500 0.625000 +vt 0.187500 0.562500 +vt 0.187500 0.500000 +vt 0.187500 0.437500 +vt 0.187500 0.375000 +vt 0.187500 0.312500 +vt 0.187500 0.250000 +vt 0.187500 0.187500 +vt 0.187500 0.125000 +vt 0.187500 0.062500 +vt 0.156250 0.937500 +vt 0.156250 0.875000 +vt 0.156250 0.812500 +vt 0.156250 0.750000 +vt 0.156250 0.687500 +vt 0.156250 0.625000 +vt 0.156250 0.562500 +vt 0.156250 0.500000 +vt 0.156250 0.437500 +vt 0.156250 0.375000 +vt 0.156250 0.312500 +vt 0.156250 0.250000 +vt 0.156250 0.187500 +vt 0.156250 0.125000 +vt 0.156250 0.062500 +vt 0.125000 0.937500 +vt 0.125000 0.875000 +vt 0.125000 0.812500 +vt 0.125000 0.750000 +vt 0.125000 0.687500 +vt 0.125000 0.625000 +vt 0.125000 0.562500 +vt 0.125000 0.500000 +vt 0.125000 0.437500 +vt 0.125000 0.375000 +vt 0.125000 0.312500 +vt 0.125000 0.250000 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.062500 +vt 0.734375 0.000000 +vt 0.703125 0.000000 +vt 0.671875 0.000000 +vt 0.640625 0.000000 +vt 0.609375 0.000000 +vt 0.578125 0.000000 +vt 0.546875 0.000000 +vt 0.515625 0.000000 +vt 0.484375 0.000000 +vt 0.453125 0.000000 +vt 0.421875 0.000000 +vt 0.390625 0.000000 +vt 0.359375 0.000000 +vt 0.328125 0.000000 +vt 0.296875 0.000000 +vt 0.265625 0.000000 +vt 0.234375 0.000000 +vt 0.203125 0.000000 +vt 0.171875 0.000000 +vt 0.140625 0.000000 +vt 0.109375 0.000000 +vt 0.078125 0.000000 +vt 0.046875 0.000000 +vt 0.015625 0.000000 +vt 0.984375 0.000000 +vt 0.953125 0.000000 +vt 0.921875 0.000000 +vt 0.890625 0.000000 +vt 0.859375 0.000000 +vt 0.828125 0.000000 +vt 0.796875 0.000000 +vt 0.765625 0.000000 +vt 0.093750 0.937500 +vt 0.093750 0.875000 +vt 0.093750 0.812500 +vt 0.093750 0.750000 +vt 0.093750 0.687500 +vt 0.093750 0.625000 +vt 0.093750 0.562500 +vt 0.093750 0.500000 +vt 0.093750 0.437500 +vt 0.093750 0.375000 +vt 0.093750 0.312500 +vt 0.093750 0.250000 +vt 0.093750 0.187500 +vt 0.093750 0.125000 +vt 0.093750 0.062500 +vt 0.062500 0.937500 +vt 0.062500 0.875000 +vt 0.062500 0.812500 +vt 0.062500 0.750000 +vt 0.062500 0.687500 +vt 0.062500 0.625000 +vt 0.062500 0.562500 +vt 0.062500 0.500000 +vt 0.062500 0.437500 +vt 0.062500 0.375000 +vt 0.062500 0.312500 +vt 0.062500 0.250000 +vt 0.062500 0.187500 +vt 0.062500 0.125000 +vt 0.062500 0.062500 +vt 0.031250 0.937500 +vt 0.031250 0.875000 +vt 0.031250 0.812500 +vt 0.031250 0.750000 +vt 0.031250 0.687500 +vt 0.031250 0.625000 +vt 0.031250 0.562500 +vt 0.031250 0.500000 +vt 0.031250 0.437500 +vt 0.031250 0.375000 +vt 0.031250 0.312500 +vt 0.031250 0.250000 +vt 0.031250 0.187500 +vt 0.031250 0.125000 +vt 0.031250 0.062500 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.750000 +vt 1.000000 0.750000 +vt 0.000000 0.687500 +vt 1.000000 0.687500 +vt 0.000000 0.625000 +vt 1.000000 0.625000 +vt 0.000000 0.562500 +vt 1.000000 0.562500 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 0.437500 +vt 1.000000 0.437500 +vt 0.000000 0.375000 +vt 1.000000 0.375000 +vt 0.000000 0.312500 +vt 1.000000 0.312500 +vt 0.000000 0.250000 +vt 1.000000 0.250000 +vt 0.000000 0.187500 +vt 1.000000 0.187500 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 0.968750 0.937500 +vt 0.968750 0.875000 +vt 0.968750 0.812500 +vt 0.968750 0.750000 +vt 0.968750 0.687500 +vt 0.968750 0.625000 +vt 0.968750 0.562500 +vt 0.968750 0.500000 +vt 0.968750 0.437500 +vt 0.968750 0.375000 +vt 0.968750 0.312500 +vt 0.968750 0.250000 +vt 0.968750 0.187500 +vt 0.968750 0.125000 +vt 0.968750 0.062500 +vt 0.937500 0.937500 +vt 0.937500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.750000 +vt 0.937500 0.687500 +vt 0.937500 0.625000 +vt 0.937500 0.562500 +vt 0.937500 0.500000 +vt 0.937500 0.437500 +vt 0.937500 0.375000 +vt 0.937500 0.312500 +vt 0.937500 0.250000 +vt 0.937500 0.187500 +vt 0.937500 0.125000 +vt 0.937500 0.062500 +vt 0.906250 0.937500 +vt 0.906250 0.875000 +vt 0.906250 0.812500 +vt 0.906250 0.750000 +vt 0.906250 0.687500 +vt 0.906250 0.625000 +vt 0.906250 0.562500 +vt 0.906250 0.500000 +vt 0.906250 0.437500 +vt 0.906250 0.375000 +vt 0.906250 0.312500 +vt 0.906250 0.250000 +vt 0.906250 0.187500 +vt 0.906250 0.125000 +vt 0.906250 0.062500 +vt 0.875000 0.937500 +vt 0.875000 0.875000 +vt 0.875000 0.812500 +vt 0.875000 0.750000 +vt 0.875000 0.687500 +vt 0.875000 0.625000 +vt 0.875000 0.562500 +vt 0.875000 0.500000 +vt 0.875000 0.437500 +vt 0.875000 0.375000 +vt 0.875000 0.312500 +vt 0.875000 0.250000 +vt 0.875000 0.187500 +vt 0.875000 0.125000 +vt 0.875000 0.062500 +vt 0.843750 0.937500 +vt 0.843750 0.875000 +vt 0.843750 0.812500 +vt 0.843750 0.750000 +vt 0.843750 0.687500 +vt 0.843750 0.625000 +vt 0.843750 0.562500 +vt 0.843750 0.500000 +vt 0.843750 0.437500 +vt 0.843750 0.375000 +vt 0.843750 0.312500 +vt 0.843750 0.250000 +vt 0.843750 0.187500 +vt 0.843750 0.125000 +vt 0.843750 0.062500 +vt 0.812500 0.937500 +vt 0.812500 0.875000 +vt 0.812500 0.812500 +vt 0.812500 0.750000 +vt 0.812500 0.687500 +vt 0.812500 0.625000 +vt 0.812500 0.562500 +vt 0.812500 0.500000 +vt 0.812500 0.437500 +vt 0.812500 0.375000 +vt 0.812500 0.312500 +vt 0.812500 0.250000 +vt 0.812500 0.187500 +vt 0.812500 0.125000 +vt 0.812500 0.062500 +vt 0.781250 0.937500 +vt 0.781250 0.875000 +vt 0.781250 0.812500 +vt 0.781250 0.750000 +vt 0.781250 0.687500 +vt 0.781250 0.625000 +vt 0.781250 0.562500 +vt 0.781250 0.500000 +vt 0.781250 0.437500 +vt 0.781250 0.375000 +vt 0.781250 0.312500 +vt 0.781250 0.250000 +vt 0.781250 0.187500 +vt 0.781250 0.125000 +vt 0.781250 0.062500 +vt 0.750000 0.937500 +vt 0.750000 0.875000 +vt 0.750000 0.750000 +vt 0.750000 0.625000 +vt 0.750000 0.375000 +vt 0.750000 0.250000 +vt 0.750000 0.187500 +vt 0.750000 0.125000 +vt 0.750000 0.062500 +s 0 +f 480/557/1 20/20/1 481/558/1 +f 3/3/2 12/12/2 13/13/2 +f 481/558/3 21/21/3 482/559/3 +f 3/3/4 14/14/4 4/4/4 +f 474/551/5 82/82/5 7/7/5 +f 308/339/6 482/559/6 21/21/6 +f 4/4/7 15/15/7 5/5/7 +f 475/552/8 7/7/8 8/8/8 +f 5/5/9 16/16/9 478/555/9 +f 1/1/10 8/8/10 9/9/10 +f 478/555/11 17/17/11 6/6/11 +f 476/553/12 9/9/12 10/10/12 +f 6/6/13 18/18/13 479/556/13 +f 2/2/14 10/10/14 11/11/14 +f 479/556/15 19/19/15 480/557/15 +f 477/554/16 11/11/16 12/12/16 +f 10/10/17 26/26/17 11/11/17 +f 19/19/18 33/33/18 34/34/18 +f 11/11/19 27/27/19 12/12/19 +f 20/20/20 34/34/20 35/35/20 +f 13/13/21 27/27/21 28/28/21 +f 20/20/22 36/36/22 21/21/22 +f 13/13/23 29/29/23 14/14/23 +f 7/7/24 82/83/24 22/22/24 +f 308/340/25 21/21/25 36/36/25 +f 14/14/26 30/30/26 15/15/26 +f 7/7/27 23/23/27 8/8/27 +f 15/15/28 31/31/28 16/16/28 +f 8/8/29 24/24/29 9/9/29 +f 16/16/30 32/32/30 17/17/30 +f 9/9/31 25/25/31 10/10/31 +f 17/17/32 33/33/32 18/18/32 +f 30/30/33 44/44/33 45/45/33 +f 22/22/34 38/38/34 23/23/34 +f 30/30/35 46/46/35 31/31/35 +f 23/23/36 39/39/36 24/24/36 +f 32/32/37 46/46/37 47/47/37 +f 24/24/38 40/40/38 25/25/38 +f 33/33/39 47/47/39 48/48/39 +f 25/25/40 41/41/40 26/26/40 +f 34/34/41 48/48/41 49/49/41 +f 26/26/42 42/42/42 27/27/42 +f 34/34/43 50/50/43 35/35/43 +f 27/27/44 43/43/44 28/28/44 +f 35/35/45 51/51/45 36/36/45 +f 28/28/46 44/44/46 29/29/46 +f 22/22/47 82/84/47 37/37/47 +f 308/341/48 36/36/48 51/51/48 +f 48/48/49 64/64/49 49/49/49 +f 41/41/50 57/57/50 42/42/50 +f 49/49/51 65/65/51 50/50/51 +f 43/43/52 57/57/52 58/58/52 +f 50/50/53 66/66/53 51/51/53 +f 44/44/54 58/58/54 59/59/54 +f 37/37/55 82/85/55 52/52/55 +f 308/342/56 51/51/56 66/66/56 +f 44/44/57 60/60/57 45/45/57 +f 37/37/58 53/53/58 38/38/58 +f 45/45/59 61/61/59 46/46/59 +f 38/38/60 54/54/60 39/39/60 +f 47/47/61 61/61/61 62/62/61 +f 39/39/62 55/55/62 40/40/62 +f 47/47/63 63/63/63 48/48/63 +f 40/40/64 56/56/64 41/41/64 +f 60/60/65 76/76/65 61/61/65 +f 53/53/66 69/69/66 54/54/66 +f 62/62/67 76/76/67 77/77/67 +f 54/54/68 70/70/68 55/55/68 +f 62/62/69 78/78/69 63/63/69 +f 56/56/70 70/70/70 71/71/70 +f 63/63/71 79/79/71 64/64/71 +f 56/56/72 72/72/72 57/57/72 +f 65/65/73 79/79/73 80/80/73 +f 58/58/74 72/72/74 73/73/74 +f 65/65/75 81/81/75 66/66/75 +f 59/59/76 73/73/76 74/74/76 +f 52/52/77 82/86/77 67/67/77 +f 308/343/78 66/66/78 81/81/78 +f 59/59/79 75/75/79 60/60/79 +f 52/52/80 68/68/80 53/53/80 +f 79/79/81 96/127/81 80/80/81 +f 73/73/82 88/119/82 89/120/82 +f 81/81/83 96/127/83 97/128/83 +f 74/74/84 89/120/84 90/121/84 +f 67/67/85 82/87/85 83/114/85 +f 308/344/86 81/81/86 97/128/86 +f 74/74/87 91/122/87 75/75/87 +f 67/67/88 84/115/88 68/68/88 +f 75/75/89 92/123/89 76/76/89 +f 68/68/90 85/116/90 69/69/90 +f 77/77/91 92/123/91 93/124/91 +f 69/69/92 86/117/92 70/70/92 +f 77/77/93 94/125/93 78/78/93 +f 71/71/94 86/117/94 87/118/94 +f 78/78/95 95/126/95 79/79/95 +f 71/71/96 88/119/96 72/72/96 +f 84/115/97 100/131/97 85/116/97 +f 93/124/98 107/138/98 108/139/98 +f 85/116/99 101/132/99 86/117/99 +f 93/124/100 109/140/100 94/125/100 +f 87/118/101 101/132/101 102/133/101 +f 95/126/102 109/140/102 110/141/102 +f 87/118/103 103/134/103 88/119/103 +f 96/127/104 110/141/104 111/142/104 +f 89/120/105 103/134/105 104/135/105 +f 96/127/106 112/143/106 97/128/106 +f 90/121/107 104/135/107 105/136/107 +f 83/114/108 82/88/108 98/129/108 +f 308/345/109 97/128/109 112/143/109 +f 90/121/110 106/137/110 91/122/110 +f 84/115/111 98/129/111 99/130/111 +f 91/122/112 107/138/112 92/123/112 +f 104/135/113 118/149/113 119/150/113 +f 111/142/114 127/158/114 112/143/114 +f 105/136/115 119/150/115 120/151/115 +f 98/129/116 82/89/116 113/144/116 +f 308/346/117 112/143/117 127/158/117 +f 105/136/118 121/152/118 106/137/118 +f 99/130/119 113/144/119 114/145/119 +f 106/137/120 122/153/120 107/138/120 +f 99/130/121 115/146/121 100/131/121 +f 108/139/122 122/153/122 123/154/122 +f 100/131/123 116/147/123 101/132/123 +f 108/139/124 124/155/124 109/140/124 +f 102/133/125 116/147/125 117/148/125 +f 110/141/126 124/155/126 125/156/126 +f 102/133/127 118/149/127 103/134/127 +f 110/141/128 126/157/128 111/142/128 +f 123/154/129 137/168/129 138/169/129 +f 115/146/130 131/162/130 116/147/130 +f 123/154/131 139/170/131 124/155/131 +f 117/148/132 131/162/132 132/163/132 +f 125/156/133 139/170/133 140/171/133 +f 117/148/134 133/164/134 118/149/134 +f 125/156/135 141/172/135 126/157/135 +f 119/150/136 133/164/136 134/165/136 +f 126/157/137 142/173/137 127/158/137 +f 120/151/138 134/165/138 135/166/138 +f 113/144/139 82/90/139 128/159/139 +f 308/347/140 127/158/140 142/173/140 +f 120/151/141 136/167/141 121/152/141 +f 113/144/142 129/160/142 114/145/142 +f 121/152/143 137/168/143 122/153/143 +f 114/145/144 130/161/144 115/146/144 +f 142/173/145 156/187/145 157/188/145 +f 135/166/146 149/180/146 150/181/146 +f 128/159/147 82/91/147 143/174/147 +f 308/348/148 142/173/148 157/188/148 +f 135/166/149 151/182/149 136/167/149 +f 128/159/150 144/175/150 129/160/150 +f 136/167/151 152/183/151 137/168/151 +f 130/161/152 144/175/152 145/176/152 +f 138/169/153 152/183/153 153/184/153 +f 130/161/154 146/177/154 131/162/154 +f 138/169/155 154/185/155 139/170/155 +f 132/163/156 146/177/156 147/178/156 +f 140/171/157 154/185/157 155/186/157 +f 132/163/158 148/179/158 133/164/158 +f 140/171/159 156/187/159 141/172/159 +f 134/165/160 148/179/160 149/180/160 +f 145/176/161 161/192/161 146/177/161 +f 153/184/162 169/200/162 154/185/162 +f 147/178/163 161/192/163 162/193/163 +f 155/186/164 169/200/164 170/201/164 +f 147/178/165 163/194/165 148/179/165 +f 155/186/166 171/202/166 156/187/166 +f 149/180/167 163/194/167 164/195/167 +f 156/187/168 172/203/168 157/188/168 +f 150/181/169 164/195/169 165/196/169 +f 143/174/170 82/92/170 158/189/170 +f 308/349/171 157/188/171 172/203/171 +f 150/181/172 166/197/172 151/182/172 +f 143/174/173 159/190/173 144/175/173 +f 151/182/174 167/198/174 152/183/174 +f 145/176/175 159/190/175 160/191/175 +f 153/184/176 167/198/176 168/199/176 +f 165/196/177 179/210/177 180/211/177 +f 158/189/178 82/93/178 173/204/178 +f 308/350/179 172/203/179 187/218/179 +f 165/196/180 181/212/180 166/197/180 +f 158/189/181 174/205/181 159/190/181 +f 166/197/182 182/213/182 167/198/182 +f 159/190/183 175/206/183 160/191/183 +f 168/199/184 182/213/184 183/214/184 +f 160/191/185 176/207/185 161/192/185 +f 168/199/186 184/215/186 169/200/186 +f 162/193/187 176/207/187 177/208/187 +f 169/200/188 185/216/188 170/201/188 +f 162/193/189 178/209/189 163/194/189 +f 171/202/190 185/216/190 186/217/190 +f 164/195/191 178/209/191 179/210/191 +f 172/203/192 186/217/192 187/218/192 +f 183/214/193 199/230/193 184/215/193 +f 177/208/194 191/222/194 192/223/194 +f 185/216/195 199/230/195 200/231/195 +f 177/208/196 193/224/196 178/209/196 +f 185/216/197 201/232/197 186/217/197 +f 179/210/198 193/224/198 194/225/198 +f 186/217/199 202/233/199 187/218/199 +f 180/211/200 194/225/200 195/226/200 +f 173/204/201 82/94/201 188/219/201 +f 308/351/202 187/218/202 202/233/202 +f 180/211/203 196/227/203 181/212/203 +f 174/205/204 188/219/204 189/220/204 +f 181/212/205 197/228/205 182/213/205 +f 175/206/206 189/220/206 190/221/206 +f 183/214/207 197/228/207 198/229/207 +f 175/206/208 191/222/208 176/207/208 +f 308/352/209 202/233/209 217/248/209 +f 195/226/210 211/242/210 196/227/210 +f 188/219/211 204/235/211 189/220/211 +f 196/227/212 212/243/212 197/228/212 +f 189/220/213 205/236/213 190/221/213 +f 198/229/214 212/243/214 213/244/214 +f 190/221/215 206/237/215 191/222/215 +f 198/229/216 214/245/216 199/230/216 +f 192/223/217 206/237/217 207/238/217 +f 200/231/218 214/245/218 215/246/218 +f 192/223/219 208/239/219 193/224/219 +f 200/231/220 216/247/220 201/232/220 +f 194/225/221 208/239/221 209/240/221 +f 201/232/222 217/248/222 202/233/222 +f 195/226/223 209/240/223 210/241/223 +f 188/219/224 82/95/224 203/234/224 +f 215/246/225 229/260/225 230/261/225 +f 207/238/226 223/254/226 208/239/226 +f 215/246/227 231/262/227 216/247/227 +f 209/240/228 223/254/228 224/255/228 +f 216/247/229 232/263/229 217/248/229 +f 210/241/230 224/255/230 225/256/230 +f 203/234/231 82/96/231 218/249/231 +f 308/353/232 217/248/232 232/263/232 +f 210/241/233 226/257/233 211/242/233 +f 203/234/234 219/250/234 204/235/234 +f 211/242/235 227/258/235 212/243/235 +f 204/235/236 220/251/236 205/236/236 +f 213/244/237 227/258/237 228/259/237 +f 205/236/238 221/252/238 206/237/238 +f 213/244/239 229/260/239 214/245/239 +f 207/238/240 221/252/240 222/253/240 +f 218/249/241 234/265/241 219/250/241 +f 226/257/242 242/273/242 227/258/242 +f 220/251/243 234/265/243 235/266/243 +f 228/259/244 242/273/244 243/274/244 +f 220/251/245 236/267/245 221/252/245 +f 228/259/246 244/275/246 229/260/246 +f 222/253/247 236/267/247 237/268/247 +f 230/261/248 244/275/248 245/276/248 +f 222/253/249 238/269/249 223/254/249 +f 230/261/250 246/277/250 231/262/250 +f 224/255/251 238/269/251 239/270/251 +f 232/263/252 246/277/252 247/278/252 +f 225/256/253 239/270/253 240/271/253 +f 218/249/254 82/97/254 233/264/254 +f 308/354/255 232/263/255 247/278/255 +f 225/256/256 241/272/256 226/257/256 +f 237/268/257 253/284/257 238/269/257 +f 245/276/258 261/292/258 246/277/258 +f 239/270/259 253/284/259 254/285/259 +f 246/277/260 262/293/260 247/278/260 +f 240/271/261 254/285/261 255/286/261 +f 233/264/262 82/98/262 248/279/262 +f 308/355/263 247/278/263 262/293/263 +f 240/271/264 256/287/264 241/272/264 +f 233/264/265 249/280/265 234/265/265 +f 241/272/266 257/288/266 242/273/266 +f 234/265/267 250/281/267 235/266/267 +f 243/274/268 257/288/268 258/289/268 +f 235/266/269 251/282/269 236/267/269 +f 243/274/270 259/290/270 244/275/270 +f 237/268/271 251/282/271 252/283/271 +f 245/276/272 259/290/272 260/291/272 +f 256/287/273 272/303/273 257/288/273 +f 249/280/274 265/296/274 250/281/274 +f 258/289/275 272/303/275 273/304/275 +f 250/281/276 266/297/276 251/282/276 +f 258/289/277 274/305/277 259/290/277 +f 252/283/278 266/297/278 267/298/278 +f 260/291/279 274/305/279 275/306/279 +f 252/283/280 268/299/280 253/284/280 +f 260/291/281 276/307/281 261/292/281 +f 254/285/282 268/299/282 269/300/282 +f 261/292/283 277/308/283 262/293/283 +f 255/286/284 269/300/284 270/301/284 +f 248/279/285 82/99/285 263/294/285 +f 308/356/286 262/293/286 277/308/286 +f 255/286/287 271/302/287 256/287/287 +f 249/280/288 263/294/288 264/295/288 +f 275/306/289 291/322/289 276/307/289 +f 269/300/290 283/314/290 284/315/290 +f 277/308/291 291/322/291 292/323/291 +f 270/301/292 284/315/292 285/316/292 +f 263/294/293 82/100/293 278/309/293 +f 308/357/294 277/308/294 292/323/294 +f 270/301/295 286/317/295 271/302/295 +f 264/295/296 278/309/296 279/310/296 +f 271/302/297 287/318/297 272/303/297 +f 264/295/298 280/311/298 265/296/298 +f 273/304/299 287/318/299 288/319/299 +f 265/296/300 281/312/300 266/297/300 +f 273/304/301 289/320/301 274/305/301 +f 267/298/302 281/312/302 282/313/302 +f 275/306/303 289/320/303 290/321/303 +f 267/298/304 283/314/304 268/299/304 +f 279/310/305 295/326/305 280/311/305 +f 288/319/306 302/333/306 303/334/306 +f 280/311/307 296/327/307 281/312/307 +f 288/319/308 304/335/308 289/320/308 +f 282/313/309 296/327/309 297/328/309 +f 290/321/310 304/335/310 305/336/310 +f 282/313/311 298/329/311 283/314/311 +f 290/321/312 306/337/312 291/322/312 +f 284/315/313 298/329/313 299/330/313 +f 292/323/314 306/337/314 307/338/314 +f 285/316/315 299/330/315 300/331/315 +f 278/309/316 82/101/316 293/324/316 +f 308/358/317 292/323/317 307/338/317 +f 285/316/318 301/332/318 286/317/318 +f 278/309/319 294/325/319 279/310/319 +f 286/317/320 302/333/320 287/318/320 +f 299/330/321 314/376/321 315/377/321 +f 306/337/322 323/385/322 307/338/322 +f 300/331/323 315/377/323 316/378/323 +f 293/324/324 82/102/324 309/371/324 +f 308/359/325 307/338/325 323/385/325 +f 300/331/326 317/379/326 301/332/326 +f 293/324/327 310/372/327 294/325/327 +f 301/332/328 318/380/328 302/333/328 +f 294/325/329 311/373/329 295/326/329 +f 303/334/330 318/380/330 319/381/330 +f 295/326/331 312/374/331 296/327/331 +f 303/334/332 320/382/332 304/335/332 +f 297/328/333 312/374/333 313/375/333 +f 305/336/334 320/382/334 321/383/334 +f 297/328/335 314/376/335 298/329/335 +f 305/336/336 322/384/336 306/337/336 +f 319/381/337 333/395/337 334/396/337 +f 311/373/338 327/389/338 312/374/338 +f 319/381/339 335/397/339 320/382/339 +f 312/374/340 328/390/340 313/375/340 +f 321/383/341 335/397/341 336/398/341 +f 313/375/342 329/391/342 314/376/342 +f 321/383/343 337/399/343 322/384/343 +f 315/377/344 329/391/344 330/392/344 +f 322/384/345 338/400/345 323/385/345 +f 316/378/346 330/392/346 331/393/346 +f 309/371/347 82/103/347 324/386/347 +f 308/360/348 323/385/348 338/400/348 +f 316/378/349 332/394/349 317/379/349 +f 309/371/350 325/387/350 310/372/350 +f 317/379/351 333/395/351 318/380/351 +f 310/372/352 326/388/352 311/373/352 +f 337/399/353 353/415/353 338/400/353 +f 331/393/354 345/407/354 346/408/354 +f 324/386/355 82/104/355 339/401/355 +f 308/361/356 338/400/356 353/415/356 +f 331/393/357 347/409/357 332/394/357 +f 324/386/358 340/402/358 325/387/358 +f 332/394/359 348/410/359 333/395/359 +f 325/387/360 341/403/360 326/388/360 +f 334/396/361 348/410/361 349/411/361 +f 326/388/362 342/404/362 327/389/362 +f 334/396/363 350/412/363 335/397/363 +f 328/390/364 342/404/364 343/405/364 +f 336/398/365 350/412/365 351/413/365 +f 328/390/366 344/406/366 329/391/366 +f 336/398/367 352/414/367 337/399/367 +f 330/392/368 344/406/368 345/407/368 +f 349/411/369 365/438/369 350/412/369 +f 343/405/370 357/422/370 358/424/370 +f 351/413/371 365/438/371 366/440/371 +f 343/405/372 359/426/372 344/406/372 +f 351/413/373 367/442/373 352/414/373 +f 345/407/374 359/426/374 360/428/374 +f 352/414/375 368/445/375 353/415/375 +f 346/408/376 360/428/376 361/430/376 +f 339/401/377 82/105/377 354/416/377 +f 308/362/378 353/415/378 368/445/378 +f 346/408/379 362/432/379 347/409/379 +f 339/401/380 355/418/380 340/402/380 +f 347/409/381 363/434/381 348/410/381 +f 341/403/382 355/418/382 356/420/382 +f 349/411/383 363/434/383 364/436/383 +f 341/403/384 357/422/384 342/404/384 +f 354/417/385 82/106/385 369/446/385 +f 308/363/386 368/444/386 383/460/386 +f 361/431/387 377/454/387 362/433/387 +f 354/417/388 370/447/388 355/419/388 +f 362/433/389 378/455/389 363/435/389 +f 356/421/390 370/447/390 371/448/390 +f 364/437/391 378/455/391 379/456/391 +f 356/421/392 372/449/392 357/423/392 +f 364/437/393 380/457/393 365/439/393 +f 358/425/394 372/449/394 373/450/394 +f 366/441/395 380/457/395 381/458/395 +f 358/425/396 374/451/396 359/427/396 +f 366/441/397 382/459/397 367/443/397 +f 360/429/398 374/451/398 375/452/398 +f 367/443/399 383/460/399 368/444/399 +f 361/431/400 375/452/400 376/453/400 +f 373/450/401 387/464/401 388/465/401 +f 381/458/402 395/472/402 396/473/402 +f 373/450/403 389/466/403 374/451/403 +f 381/458/404 397/474/404 382/459/404 +f 375/452/405 389/466/405 390/467/405 +f 382/459/406 398/475/406 383/460/406 +f 376/453/407 390/467/407 391/468/407 +f 369/446/408 82/107/408 384/461/408 +f 308/364/409 383/460/409 398/475/409 +f 376/453/410 392/469/410 377/454/410 +f 369/446/411 385/462/411 370/447/411 +f 377/454/412 393/470/412 378/455/412 +f 371/448/413 385/462/413 386/463/413 +f 379/456/414 393/470/414 394/471/414 +f 371/448/415 387/464/415 372/449/415 +f 379/456/416 395/472/416 380/457/416 +f 391/468/417 407/484/417 392/469/417 +f 385/462/418 399/476/418 400/477/418 +f 392/469/419 408/485/419 393/470/419 +f 385/462/420 401/478/420 386/463/420 +f 394/471/421 408/485/421 409/486/421 +f 386/463/422 402/479/422 387/464/422 +f 394/471/423 410/487/423 395/472/423 +f 388/465/424 402/479/424 403/480/424 +f 396/473/425 410/487/425 411/488/425 +f 388/465/426 404/481/426 389/466/426 +f 397/474/427 411/488/427 412/489/427 +f 390/467/428 404/481/428 405/482/428 +f 397/474/429 413/490/429 398/475/429 +f 391/468/430 405/482/430 406/483/430 +f 384/461/431 82/108/431 399/476/431 +f 308/365/432 398/475/432 413/490/432 +f 411/488/433 425/502/433 426/503/433 +f 403/480/434 419/496/434 404/481/434 +f 411/488/435 427/504/435 412/489/435 +f 405/482/436 419/496/436 420/497/436 +f 412/489/437 428/505/437 413/490/437 +f 406/483/438 420/497/438 421/498/438 +f 399/476/439 82/109/439 414/491/439 +f 308/366/440 413/490/440 428/505/440 +f 406/483/441 422/499/441 407/484/441 +f 399/476/442 415/492/442 400/477/442 +f 407/484/443 423/500/443 408/485/443 +f 401/478/444 415/492/444 416/493/444 +f 409/486/445 423/500/445 424/501/445 +f 401/478/446 417/494/446 402/479/446 +f 409/486/447 425/502/447 410/487/447 +f 403/480/448 417/494/448 418/495/448 +f 414/491/449 430/507/449 415/492/449 +f 422/499/450 438/515/450 423/500/450 +f 416/493/451 430/507/451 431/508/451 +f 424/501/452 438/515/452 439/516/452 +f 416/493/453 432/509/453 417/494/453 +f 424/501/454 440/517/454 425/502/454 +f 418/495/455 432/509/455 433/510/455 +f 426/503/456 440/517/456 441/518/456 +f 418/495/457 434/511/457 419/496/457 +f 426/503/458 442/519/458 427/504/458 +f 420/497/459 434/511/459 435/512/459 +f 427/504/460 443/520/460 428/505/460 +f 421/498/461 435/512/461 436/513/461 +f 414/491/462 82/110/462 429/506/462 +f 308/367/463 428/505/463 443/520/463 +f 421/498/464 437/514/464 422/499/464 +f 433/510/465 449/526/465 434/511/465 +f 441/518/466 457/534/466 442/519/466 +f 435/512/467 449/526/467 450/527/467 +f 442/519/468 458/535/468 443/520/468 +f 436/513/469 450/527/469 451/528/469 +f 429/506/470 82/111/470 444/521/470 +f 308/368/471 443/520/471 458/535/471 +f 436/513/472 452/529/472 437/514/472 +f 430/507/473 444/521/473 445/522/473 +f 437/514/474 453/530/474 438/515/474 +f 430/507/475 446/523/475 431/508/475 +f 439/516/476 453/530/476 454/531/476 +f 431/508/477 447/524/477 432/509/477 +f 439/516/478 455/532/478 440/517/478 +f 433/510/479 447/524/479 448/525/479 +f 441/518/480 455/532/480 456/533/480 +f 452/529/481 468/545/481 453/530/481 +f 446/523/482 460/537/482 461/538/482 +f 454/531/483 468/545/483 469/546/483 +f 446/523/484 462/539/484 447/524/484 +f 454/531/485 470/547/485 455/532/485 +f 448/525/486 462/539/486 463/540/486 +f 456/533/487 470/547/487 471/548/487 +f 448/525/488 464/541/488 449/526/488 +f 456/533/489 472/549/489 457/534/489 +f 450/527/490 464/541/490 465/542/490 +f 458/535/491 472/549/491 473/550/491 +f 451/528/492 465/542/492 466/543/492 +f 444/521/493 82/112/493 459/536/493 +f 308/369/494 458/535/494 473/550/494 +f 451/528/495 467/544/495 452/529/495 +f 444/521/496 460/537/496 445/522/496 +f 471/548/497 481/558/497 472/549/497 +f 465/542/498 477/554/498 3/3/498 +f 472/549/499 482/559/499 473/550/499 +f 466/543/500 3/3/500 4/4/500 +f 459/536/501 82/113/501 474/551/501 +f 308/370/502 473/550/502 482/559/502 +f 466/543/503 5/5/503 467/544/503 +f 460/537/504 474/551/504 475/552/504 +f 467/544/505 478/555/505 468/545/505 +f 461/538/506 475/552/506 1/1/506 +f 468/545/507 6/6/507 469/546/507 +f 462/539/508 1/1/508 476/553/508 +f 469/546/509 479/556/509 470/547/509 +f 463/540/510 476/553/510 2/2/510 +f 471/548/511 479/556/511 480/557/511 +f 464/541/512 2/2/512 477/554/512 +f 480/557/1 19/19/1 20/20/1 +f 3/3/2 477/554/2 12/12/2 +f 481/558/3 20/20/3 21/21/3 +f 3/3/513 13/13/513 14/14/513 +f 4/4/514 14/14/514 15/15/514 +f 475/552/8 474/551/8 7/7/8 +f 5/5/9 15/15/9 16/16/9 +f 1/1/10 475/552/10 8/8/10 +f 478/555/11 16/16/11 17/17/11 +f 476/553/12 1/1/12 9/9/12 +f 6/6/13 17/17/13 18/18/13 +f 2/2/14 476/553/14 10/10/14 +f 479/556/15 18/18/15 19/19/15 +f 477/554/16 2/2/16 11/11/16 +f 10/10/17 25/25/17 26/26/17 +f 19/19/18 18/18/18 33/33/18 +f 11/11/19 26/26/19 27/27/19 +f 20/20/20 19/19/20 34/34/20 +f 13/13/21 12/12/21 27/27/21 +f 20/20/22 35/35/22 36/36/22 +f 13/13/23 28/28/23 29/29/23 +f 14/14/26 29/29/26 30/30/26 +f 7/7/27 22/22/27 23/23/27 +f 15/15/28 30/30/28 31/31/28 +f 8/8/29 23/23/29 24/24/29 +f 16/16/30 31/31/30 32/32/30 +f 9/9/31 24/24/31 25/25/31 +f 17/17/32 32/32/32 33/33/32 +f 30/30/33 29/29/33 44/44/33 +f 22/22/34 37/37/34 38/38/34 +f 30/30/35 45/45/35 46/46/35 +f 23/23/515 38/38/515 39/39/515 +f 32/32/37 31/31/37 46/46/37 +f 24/24/38 39/39/38 40/40/38 +f 33/33/39 32/32/39 47/47/39 +f 25/25/40 40/40/40 41/41/40 +f 34/34/41 33/33/41 48/48/41 +f 26/26/42 41/41/42 42/42/42 +f 34/34/516 49/49/516 50/50/516 +f 27/27/44 42/42/44 43/43/44 +f 35/35/45 50/50/45 51/51/45 +f 28/28/46 43/43/46 44/44/46 +f 48/48/49 63/63/49 64/64/49 +f 41/41/50 56/56/50 57/57/50 +f 49/49/51 64/64/51 65/65/51 +f 43/43/52 42/42/52 57/57/52 +f 50/50/53 65/65/53 66/66/53 +f 44/44/54 43/43/54 58/58/54 +f 44/44/57 59/59/57 60/60/57 +f 37/37/58 52/52/58 53/53/58 +f 45/45/59 60/60/59 61/61/59 +f 38/38/60 53/53/60 54/54/60 +f 47/47/61 46/46/61 61/61/61 +f 39/39/62 54/54/62 55/55/62 +f 47/47/63 62/62/63 63/63/63 +f 40/40/64 55/55/64 56/56/64 +f 60/60/65 75/75/65 76/76/65 +f 53/53/66 68/68/66 69/69/66 +f 62/62/67 61/61/67 76/76/67 +f 54/54/68 69/69/68 70/70/68 +f 62/62/69 77/77/69 78/78/69 +f 56/56/70 55/55/70 70/70/70 +f 63/63/71 78/78/71 79/79/71 +f 56/56/72 71/71/72 72/72/72 +f 65/65/73 64/64/73 79/79/73 +f 58/58/74 57/57/74 72/72/74 +f 65/65/517 80/80/517 81/81/517 +f 59/59/76 58/58/76 73/73/76 +f 59/59/79 74/74/79 75/75/79 +f 52/52/80 67/67/80 68/68/80 +f 79/79/81 95/126/81 96/127/81 +f 73/73/82 72/72/82 88/119/82 +f 81/81/83 80/80/83 96/127/83 +f 74/74/84 73/73/84 89/120/84 +f 74/74/87 90/121/87 91/122/87 +f 67/67/88 83/114/88 84/115/88 +f 75/75/89 91/122/89 92/123/89 +f 68/68/90 84/115/90 85/116/90 +f 77/77/91 76/76/91 92/123/91 +f 69/69/92 85/116/92 86/117/92 +f 77/77/93 93/124/93 94/125/93 +f 71/71/94 70/70/94 86/117/94 +f 78/78/95 94/125/95 95/126/95 +f 71/71/96 87/118/96 88/119/96 +f 84/115/97 99/130/97 100/131/97 +f 93/124/98 92/123/98 107/138/98 +f 85/116/99 100/131/99 101/132/99 +f 93/124/100 108/139/100 109/140/100 +f 87/118/101 86/117/101 101/132/101 +f 95/126/102 94/125/102 109/140/102 +f 87/118/103 102/133/103 103/134/103 +f 96/127/104 95/126/104 110/141/104 +f 89/120/105 88/119/105 103/134/105 +f 96/127/106 111/142/106 112/143/106 +f 90/121/107 89/120/107 104/135/107 +f 90/121/110 105/136/110 106/137/110 +f 84/115/111 83/114/111 98/129/111 +f 91/122/112 106/137/112 107/138/112 +f 104/135/113 103/134/113 118/149/113 +f 111/142/114 126/157/114 127/158/114 +f 105/136/115 104/135/115 119/150/115 +f 105/136/118 120/151/118 121/152/118 +f 99/130/119 98/129/119 113/144/119 +f 106/137/120 121/152/120 122/153/120 +f 99/130/121 114/145/121 115/146/121 +f 108/139/122 107/138/122 122/153/122 +f 100/131/123 115/146/123 116/147/123 +f 108/139/124 123/154/124 124/155/124 +f 102/133/125 101/132/125 116/147/125 +f 110/141/126 109/140/126 124/155/126 +f 102/133/127 117/148/127 118/149/127 +f 110/141/128 125/156/128 126/157/128 +f 123/154/129 122/153/129 137/168/129 +f 115/146/130 130/161/130 131/162/130 +f 123/154/131 138/169/131 139/170/131 +f 117/148/132 116/147/132 131/162/132 +f 125/156/133 124/155/133 139/170/133 +f 117/148/134 132/163/134 133/164/134 +f 125/156/135 140/171/135 141/172/135 +f 119/150/136 118/149/136 133/164/136 +f 126/157/137 141/172/137 142/173/137 +f 120/151/138 119/150/138 134/165/138 +f 120/151/141 135/166/141 136/167/141 +f 113/144/142 128/159/142 129/160/142 +f 121/152/143 136/167/143 137/168/143 +f 114/145/144 129/160/144 130/161/144 +f 142/173/145 141/172/145 156/187/145 +f 135/166/146 134/165/146 149/180/146 +f 135/166/149 150/181/149 151/182/149 +f 128/159/150 143/174/150 144/175/150 +f 136/167/151 151/182/151 152/183/151 +f 130/161/152 129/160/152 144/175/152 +f 138/169/153 137/168/153 152/183/153 +f 130/161/154 145/176/154 146/177/154 +f 138/169/155 153/184/155 154/185/155 +f 132/163/156 131/162/156 146/177/156 +f 140/171/157 139/170/157 154/185/157 +f 132/163/158 147/178/158 148/179/158 +f 140/171/159 155/186/159 156/187/159 +f 134/165/160 133/164/160 148/179/160 +f 145/176/161 160/191/161 161/192/161 +f 153/184/162 168/199/162 169/200/162 +f 147/178/163 146/177/163 161/192/163 +f 155/186/164 154/185/164 169/200/164 +f 147/178/165 162/193/165 163/194/165 +f 155/186/518 170/201/518 171/202/518 +f 149/180/167 148/179/167 163/194/167 +f 156/187/168 171/202/168 172/203/168 +f 150/181/169 149/180/169 164/195/169 +f 150/181/172 165/196/172 166/197/172 +f 143/174/173 158/189/173 159/190/173 +f 151/182/174 166/197/174 167/198/174 +f 145/176/519 144/175/519 159/190/519 +f 153/184/176 152/183/176 167/198/176 +f 165/196/177 164/195/177 179/210/177 +f 165/196/180 180/211/180 181/212/180 +f 158/189/181 173/204/181 174/205/181 +f 166/197/182 181/212/182 182/213/182 +f 159/190/183 174/205/183 175/206/183 +f 168/199/184 167/198/184 182/213/184 +f 160/191/185 175/206/185 176/207/185 +f 168/199/186 183/214/186 184/215/186 +f 162/193/187 161/192/187 176/207/187 +f 169/200/188 184/215/188 185/216/188 +f 162/193/189 177/208/189 178/209/189 +f 171/202/190 170/201/190 185/216/190 +f 164/195/191 163/194/191 178/209/191 +f 172/203/192 171/202/192 186/217/192 +f 183/214/193 198/229/193 199/230/193 +f 177/208/194 176/207/194 191/222/194 +f 185/216/195 184/215/195 199/230/195 +f 177/208/196 192/223/196 193/224/196 +f 185/216/197 200/231/197 201/232/197 +f 179/210/198 178/209/198 193/224/198 +f 186/217/199 201/232/199 202/233/199 +f 180/211/200 179/210/200 194/225/200 +f 180/211/203 195/226/203 196/227/203 +f 174/205/204 173/204/204 188/219/204 +f 181/212/205 196/227/205 197/228/205 +f 175/206/206 174/205/206 189/220/206 +f 183/214/207 182/213/207 197/228/207 +f 175/206/208 190/221/208 191/222/208 +f 195/226/210 210/241/210 211/242/210 +f 188/219/211 203/234/211 204/235/211 +f 196/227/212 211/242/212 212/243/212 +f 189/220/213 204/235/213 205/236/213 +f 198/229/214 197/228/214 212/243/214 +f 190/221/215 205/236/215 206/237/215 +f 198/229/216 213/244/216 214/245/216 +f 192/223/217 191/222/217 206/237/217 +f 200/231/218 199/230/218 214/245/218 +f 192/223/219 207/238/219 208/239/219 +f 200/231/520 215/246/520 216/247/520 +f 194/225/221 193/224/221 208/239/221 +f 201/232/222 216/247/222 217/248/222 +f 195/226/223 194/225/223 209/240/223 +f 215/246/225 214/245/225 229/260/225 +f 207/238/226 222/253/226 223/254/226 +f 215/246/227 230/261/227 231/262/227 +f 209/240/228 208/239/228 223/254/228 +f 216/247/229 231/262/229 232/263/229 +f 210/241/230 209/240/230 224/255/230 +f 210/241/233 225/256/233 226/257/233 +f 203/234/234 218/249/234 219/250/234 +f 211/242/235 226/257/235 227/258/235 +f 204/235/236 219/250/236 220/251/236 +f 213/244/237 212/243/237 227/258/237 +f 205/236/238 220/251/238 221/252/238 +f 213/244/239 228/259/239 229/260/239 +f 207/238/240 206/237/240 221/252/240 +f 218/249/241 233/264/241 234/265/241 +f 226/257/242 241/272/242 242/273/242 +f 220/251/243 219/250/243 234/265/243 +f 228/259/244 227/258/244 242/273/244 +f 220/251/245 235/266/245 236/267/245 +f 228/259/246 243/274/246 244/275/246 +f 222/253/247 221/252/247 236/267/247 +f 230/261/248 229/260/248 244/275/248 +f 222/253/249 237/268/249 238/269/249 +f 230/261/250 245/276/250 246/277/250 +f 224/255/251 223/254/251 238/269/251 +f 232/263/252 231/262/252 246/277/252 +f 225/256/253 224/255/253 239/270/253 +f 225/256/256 240/271/256 241/272/256 +f 237/268/257 252/283/257 253/284/257 +f 245/276/258 260/291/258 261/292/258 +f 239/270/259 238/269/259 253/284/259 +f 246/277/260 261/292/260 262/293/260 +f 240/271/521 239/270/521 254/285/521 +f 240/271/522 255/286/522 256/287/522 +f 233/264/265 248/279/265 249/280/265 +f 241/272/266 256/287/266 257/288/266 +f 234/265/267 249/280/267 250/281/267 +f 243/274/268 242/273/268 257/288/268 +f 235/266/269 250/281/269 251/282/269 +f 243/274/270 258/289/270 259/290/270 +f 237/268/271 236/267/271 251/282/271 +f 245/276/272 244/275/272 259/290/272 +f 256/287/273 271/302/273 272/303/273 +f 249/280/274 264/295/274 265/296/274 +f 258/289/275 257/288/275 272/303/275 +f 250/281/276 265/296/276 266/297/276 +f 258/289/277 273/304/277 274/305/277 +f 252/283/278 251/282/278 266/297/278 +f 260/291/279 259/290/279 274/305/279 +f 252/283/280 267/298/280 268/299/280 +f 260/291/281 275/306/281 276/307/281 +f 254/285/282 253/284/282 268/299/282 +f 261/292/283 276/307/283 277/308/283 +f 255/286/284 254/285/284 269/300/284 +f 255/286/287 270/301/287 271/302/287 +f 249/280/288 248/279/288 263/294/288 +f 275/306/523 290/321/523 291/322/523 +f 269/300/290 268/299/290 283/314/290 +f 277/308/291 276/307/291 291/322/291 +f 270/301/292 269/300/292 284/315/292 +f 270/301/295 285/316/295 286/317/295 +f 264/295/296 263/294/296 278/309/296 +f 271/302/297 286/317/297 287/318/297 +f 264/295/524 279/310/524 280/311/524 +f 273/304/299 272/303/299 287/318/299 +f 265/296/300 280/311/300 281/312/300 +f 273/304/301 288/319/301 289/320/301 +f 267/298/302 266/297/302 281/312/302 +f 275/306/303 274/305/303 289/320/303 +f 267/298/304 282/313/304 283/314/304 +f 279/310/305 294/325/305 295/326/305 +f 288/319/306 287/318/306 302/333/306 +f 280/311/307 295/326/307 296/327/307 +f 288/319/308 303/334/308 304/335/308 +f 282/313/309 281/312/309 296/327/309 +f 290/321/310 289/320/310 304/335/310 +f 282/313/311 297/328/311 298/329/311 +f 290/321/312 305/336/312 306/337/312 +f 284/315/313 283/314/313 298/329/313 +f 292/323/314 291/322/314 306/337/314 +f 285/316/315 284/315/315 299/330/315 +f 285/316/318 300/331/318 301/332/318 +f 278/309/319 293/324/319 294/325/319 +f 286/317/320 301/332/320 302/333/320 +f 299/330/321 298/329/321 314/376/321 +f 306/337/525 322/384/525 323/385/525 +f 300/331/323 299/330/323 315/377/323 +f 300/331/326 316/378/326 317/379/326 +f 293/324/327 309/371/327 310/372/327 +f 301/332/328 317/379/328 318/380/328 +f 294/325/329 310/372/329 311/373/329 +f 303/334/330 302/333/330 318/380/330 +f 295/326/331 311/373/331 312/374/331 +f 303/334/332 319/381/332 320/382/332 +f 297/328/333 296/327/333 312/374/333 +f 305/336/334 304/335/334 320/382/334 +f 297/328/335 313/375/335 314/376/335 +f 305/336/336 321/383/336 322/384/336 +f 319/381/337 318/380/337 333/395/337 +f 311/373/338 326/388/338 327/389/338 +f 319/381/339 334/396/339 335/397/339 +f 312/374/340 327/389/340 328/390/340 +f 321/383/341 320/382/341 335/397/341 +f 313/375/342 328/390/342 329/391/342 +f 321/383/526 336/398/526 337/399/526 +f 315/377/344 314/376/344 329/391/344 +f 322/384/345 337/399/345 338/400/345 +f 316/378/346 315/377/346 330/392/346 +f 316/378/349 331/393/349 332/394/349 +f 309/371/350 324/386/350 325/387/350 +f 317/379/351 332/394/351 333/395/351 +f 310/372/352 325/387/352 326/388/352 +f 337/399/353 352/414/353 353/415/353 +f 331/393/354 330/392/354 345/407/354 +f 331/393/357 346/408/357 347/409/357 +f 324/386/358 339/401/358 340/402/358 +f 332/394/359 347/409/359 348/410/359 +f 325/387/360 340/402/360 341/403/360 +f 334/396/361 333/395/361 348/410/361 +f 326/388/362 341/403/362 342/404/362 +f 334/396/363 349/411/363 350/412/363 +f 328/390/364 327/389/364 342/404/364 +f 336/398/365 335/397/365 350/412/365 +f 328/390/366 343/405/366 344/406/366 +f 336/398/367 351/413/367 352/414/367 +f 330/392/368 329/391/368 344/406/368 +f 349/411/369 364/436/369 365/438/369 +f 343/405/370 342/404/370 357/422/370 +f 351/413/371 350/412/371 365/438/371 +f 343/405/372 358/424/372 359/426/372 +f 351/413/373 366/440/373 367/442/373 +f 345/407/374 344/406/374 359/426/374 +f 352/414/375 367/442/375 368/445/375 +f 346/408/527 345/407/527 360/428/527 +f 346/408/528 361/430/528 362/432/528 +f 339/401/380 354/416/380 355/418/380 +f 347/409/381 362/432/381 363/434/381 +f 341/403/382 340/402/382 355/418/382 +f 349/411/383 348/410/383 363/434/383 +f 341/403/384 356/420/384 357/422/384 +f 361/431/529 376/453/529 377/454/529 +f 354/417/388 369/446/388 370/447/388 +f 362/433/389 377/454/389 378/455/389 +f 356/421/390 355/419/390 370/447/390 +f 364/437/391 363/435/391 378/455/391 +f 356/421/392 371/448/392 372/449/392 +f 364/437/393 379/456/393 380/457/393 +f 358/425/394 357/423/394 372/449/394 +f 366/441/395 365/439/395 380/457/395 +f 358/425/396 373/450/396 374/451/396 +f 366/441/397 381/458/397 382/459/397 +f 360/429/398 359/427/398 374/451/398 +f 367/443/399 382/459/399 383/460/399 +f 361/431/530 360/429/530 375/452/530 +f 373/450/401 372/449/401 387/464/401 +f 381/458/402 380/457/402 395/472/402 +f 373/450/403 388/465/403 389/466/403 +f 381/458/404 396/473/404 397/474/404 +f 375/452/405 374/451/405 389/466/405 +f 382/459/406 397/474/406 398/475/406 +f 376/453/407 375/452/407 390/467/407 +f 376/453/410 391/468/410 392/469/410 +f 369/446/411 384/461/411 385/462/411 +f 377/454/412 392/469/412 393/470/412 +f 371/448/413 370/447/413 385/462/413 +f 379/456/414 378/455/414 393/470/414 +f 371/448/415 386/463/415 387/464/415 +f 379/456/416 394/471/416 395/472/416 +f 391/468/417 406/483/417 407/484/417 +f 385/462/418 384/461/418 399/476/418 +f 392/469/419 407/484/419 408/485/419 +f 385/462/420 400/477/420 401/478/420 +f 394/471/421 393/470/421 408/485/421 +f 386/463/422 401/478/422 402/479/422 +f 394/471/423 409/486/423 410/487/423 +f 388/465/424 387/464/424 402/479/424 +f 396/473/425 395/472/425 410/487/425 +f 388/465/426 403/480/426 404/481/426 +f 397/474/427 396/473/427 411/488/427 +f 390/467/428 389/466/428 404/481/428 +f 397/474/429 412/489/429 413/490/429 +f 391/468/430 390/467/430 405/482/430 +f 411/488/433 410/487/433 425/502/433 +f 403/480/434 418/495/434 419/496/434 +f 411/488/435 426/503/435 427/504/435 +f 405/482/436 404/481/436 419/496/436 +f 412/489/437 427/504/437 428/505/437 +f 406/483/438 405/482/438 420/497/438 +f 406/483/441 421/498/441 422/499/441 +f 399/476/442 414/491/442 415/492/442 +f 407/484/443 422/499/443 423/500/443 +f 401/478/444 400/477/444 415/492/444 +f 409/486/445 408/485/445 423/500/445 +f 401/478/446 416/493/446 417/494/446 +f 409/486/447 424/501/447 425/502/447 +f 403/480/448 402/479/448 417/494/448 +f 414/491/449 429/506/449 430/507/449 +f 422/499/450 437/514/450 438/515/450 +f 416/493/451 415/492/451 430/507/451 +f 424/501/452 423/500/452 438/515/452 +f 416/493/453 431/508/453 432/509/453 +f 424/501/454 439/516/454 440/517/454 +f 418/495/455 417/494/455 432/509/455 +f 426/503/456 425/502/456 440/517/456 +f 418/495/457 433/510/457 434/511/457 +f 426/503/458 441/518/458 442/519/458 +f 420/497/459 419/496/459 434/511/459 +f 427/504/460 442/519/460 443/520/460 +f 421/498/461 420/497/461 435/512/461 +f 421/498/464 436/513/464 437/514/464 +f 433/510/465 448/525/465 449/526/465 +f 441/518/466 456/533/466 457/534/466 +f 435/512/467 434/511/467 449/526/467 +f 442/519/468 457/534/468 458/535/468 +f 436/513/469 435/512/469 450/527/469 +f 436/513/472 451/528/472 452/529/472 +f 430/507/473 429/506/473 444/521/473 +f 437/514/474 452/529/474 453/530/474 +f 430/507/475 445/522/475 446/523/475 +f 439/516/476 438/515/476 453/530/476 +f 431/508/477 446/523/477 447/524/477 +f 439/516/478 454/531/478 455/532/478 +f 433/510/479 432/509/479 447/524/479 +f 441/518/480 440/517/480 455/532/480 +f 452/529/481 467/544/481 468/545/481 +f 446/523/482 445/522/482 460/537/482 +f 454/531/483 453/530/483 468/545/483 +f 446/523/484 461/538/484 462/539/484 +f 454/531/485 469/546/485 470/547/485 +f 448/525/486 447/524/486 462/539/486 +f 456/533/487 455/532/487 470/547/487 +f 448/525/488 463/540/488 464/541/488 +f 456/533/489 471/548/489 472/549/489 +f 450/527/490 449/526/490 464/541/490 +f 458/535/491 457/534/491 472/549/491 +f 451/528/492 450/527/492 465/542/492 +f 451/528/495 466/543/495 467/544/495 +f 444/521/496 459/536/496 460/537/496 +f 471/548/497 480/557/497 481/558/497 +f 465/542/498 464/541/498 477/554/498 +f 472/549/499 481/558/499 482/559/499 +f 466/543/500 465/542/500 3/3/500 +f 466/543/503 4/4/503 5/5/503 +f 460/537/504 459/536/504 474/551/504 +f 467/544/505 5/5/505 478/555/505 +f 461/538/506 460/537/506 475/552/506 +f 468/545/507 478/555/507 6/6/507 +f 462/539/508 461/538/508 1/1/508 +f 469/546/509 6/6/509 479/556/509 +f 463/540/510 462/539/510 476/553/510 +f 471/548/511 470/547/511 479/556/511 +f 464/541/512 463/540/512 2/2/512 diff --git a/src/res/shader/mesh/fragment.glsl b/src/res/shader/mesh/fragment.glsl index bac761c..b29b2e5 100644 --- a/src/res/shader/mesh/fragment.glsl +++ b/src/res/shader/mesh/fragment.glsl @@ -1,9 +1,9 @@ #version 330 core in VS_OUT { + vec3 fragmentPosition; vec2 textureCoordinate; vec3 normal; - vec3 fragmentPosition; } fs_in; uniform vec3 cameraPos; @@ -11,7 +11,7 @@ uniform vec3 cameraPos; out vec4 color; void main() { - vec3 norm = normalize(fs_in.normal); - vec3 viewDir = normalize(cameraPos - fs_in.fragmentPosition); - color = vec4(1.0); -} \ No newline at end of file + //vec3 norm = normalize(fs_in.normal); + //vec3 viewDir = normalize(cameraPos - fs_in.fragmentPosition); + color = length(fs_in.fragmentPosition) / 2 * vec4(1.0); +} diff --git a/src/res/shader/mesh/vertex.glsl b/src/res/shader/mesh/vertex.glsl index f510ff0..bbc5871 100644 --- a/src/res/shader/mesh/vertex.glsl +++ b/src/res/shader/mesh/vertex.glsl @@ -20,4 +20,4 @@ void main() { vs_out.fragmentPosition = vec3(model * vec4(position, 1.0)); vs_out.textureCoordinate = texCoord; vs_out.normal = mat3(transpose(inverse(model))) * normal; -} \ No newline at end of file +}