diff --git a/CrystalPoint.vcxproj b/CrystalPoint.vcxproj index 87360d9..e67e882 100644 --- a/CrystalPoint.vcxproj +++ b/CrystalPoint.vcxproj @@ -23,6 +23,7 @@ Win32Proj CrystalPoint 8.1 + CrystalPoint @@ -153,13 +154,16 @@ + - + + + @@ -170,14 +174,17 @@ + - + + + diff --git a/CrystalPoint.vcxproj.filters b/CrystalPoint.vcxproj.filters index 675688c..6e949e9 100644 --- a/CrystalPoint.vcxproj.filters +++ b/CrystalPoint.vcxproj.filters @@ -25,14 +25,14 @@ {1be14b84-6fa7-4cfb-94b9-666f3ee14198} + + {1b39afb7-b64b-458a-bba3-755631986211} + Header Files - - Header Files - Header Files @@ -75,14 +75,23 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + Source Files - - Source Files\State - Source Files\State @@ -104,9 +113,6 @@ Source Files\Model - - Source Files\Model - Source Files\Model @@ -125,5 +131,20 @@ Source Files + + Source Files\Model + + + Source Files\Handler + + + Source Files\Handler + + + Source Files\State + + + Source Files\State + \ No newline at end of file diff --git a/Header.h b/Header.h index 8048421..c1a99be 100644 --- a/Header.h +++ b/Header.h @@ -17,4 +17,6 @@ #include #include +#include "Vector.h" + using namespace std; \ No newline at end of file diff --git a/InitState.cpp b/InitState.cpp new file mode 100644 index 0000000..ccaebd6 --- /dev/null +++ b/InitState.cpp @@ -0,0 +1,12 @@ +#include "InitState.h" + + + +InitState::InitState() +{ +} + + +InitState::~InitState() +{ +} diff --git a/InitState.h b/InitState.h new file mode 100644 index 0000000..5537e67 --- /dev/null +++ b/InitState.h @@ -0,0 +1,11 @@ +#pragma once +#include "Header.h" +#include "State.h" + +class InitState : public State +{ +public: + InitState(); + ~InitState(); +}; + diff --git a/LoadingState.h b/LoadingState.h index c4ad570..b4c292f 100644 --- a/LoadingState.h +++ b/LoadingState.h @@ -1,7 +1,8 @@ #pragma once #include "Header.h" +#include "State.h" -class LoadingState +class LoadingState : public State { public: LoadingState(); diff --git a/Main.cpp b/Main.cpp index 69197f5..5e7c269 100644 --- a/Main.cpp +++ b/Main.cpp @@ -1,6 +1,8 @@ #include "Header.h" #include "Model.h" #include "Player.h" +#include "StateHandler.h" +#include "State.h" //Prototypes void bindFuncOpenGL(void); @@ -17,6 +19,7 @@ bool keys[255]; //int currentModel = 0; Player *player; +StateHandler *statehandler; void display() { @@ -29,6 +32,7 @@ void display() glMatrixMode(GL_MODELVIEW); glLoadIdentity(); + /*glRotatef(player.eyes.rotX, 1, 0, 0); glRotatef(player.eyes.rotY, 0, 1, 0); glTranslatef(player.eyes.posX, player.eyes.posY, player.eyes.posZ); @@ -42,7 +46,10 @@ void display() glPopMatrix();*/ //Draw here - player->Draw_Player(); + + statehandler->GetCurrentState()->Display(); + + player->Display(); glutSolidCube(10.0); @@ -67,6 +74,9 @@ void idle() float deltaTime = frameTime - lastFrameTime; lastFrameTime = frameTime; + statehandler->GetCurrentState()->Keyboard(keys); + statehandler->GetCurrentState()->Idle(deltaTime); + float speed = 10; if (keys['a']) move(0, deltaTime*speed, false); @@ -85,12 +95,16 @@ void mousemotion(int x, int y) int dy = y - Height / 2; if ((dx != 0 || dy != 0) && abs(dx) < 400 && abs(dy) < 400) { - player->eyes.rotY += dx / 10.0f; - player->eyes.rotX += dy / 10.0f; + statehandler->GetCurrentState()->MouseMove(x, y, dx, dy); glutWarpPointer(Width / 2, Height / 2); } } +void mouse(int button, int type, int x, int y) +{ + statehandler->GetCurrentState()->MouseClick(button, type, x, y); +} + void keyboard(unsigned char key, int, int) { if (key == 27) @@ -132,10 +146,9 @@ void bindFuncOpenGL() //Keyboard glutKeyboardFunc(keyboard); glutKeyboardUpFunc(keyboardup); - //glutMouseFunc(mousefunc); //Mouse - //glutMouseFunc(mouse); + glutMouseFunc(mouse); glutPassiveMotionFunc(mousemotion); } @@ -186,5 +199,8 @@ void configureOpenGL() void loadModels() { player = new Player(); + statehandler = new StateHandler(); + + statehandler->Navigate(statehandler->WORLD_STATE); //models.push_back(new Model("models/weapons/ZwaardMetTextures/TextureZwaard.obj")); } \ No newline at end of file diff --git a/MenuState.h b/MenuState.h index e3a7426..8a36cc1 100644 --- a/MenuState.h +++ b/MenuState.h @@ -1,10 +1,10 @@ #pragma once #include "Header.h" +#include "State.h" -class MenuState +class MenuState : public State { public: MenuState(); ~MenuState(); -}; - +}; \ No newline at end of file diff --git a/Model.cpp b/Model.cpp index b25e3d4..fe474e3 100644 --- a/Model.cpp +++ b/Model.cpp @@ -3,6 +3,11 @@ #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" +//Prototypes +vector split(string str, string sep); +string replace(string str, string toReplace, string replacement); +string toLower(string data); + Model::Model(string fileName) { std::string dirName = fileName; @@ -112,13 +117,19 @@ Model::Model(string fileName) groups.push_back(currentGroup); } +Model::Model(void) +{ + Model("models/TextureZwaard.obj"); +} Model::~Model(void) { } - - +void Model::AddInstance(ModelInstance* inst) +{ + instances.push_back(inst); +} void Model::draw() { @@ -152,17 +163,30 @@ void Model::draw() } } - glBegin(GL_TRIANGLES); - for (auto &f : g->faces) + for (auto &instance : instances) { - for (auto &v : f.vertices) + + glBegin(GL_TRIANGLES); + for (auto &f : g->faces) { - glNormal3f(normals[v.normal].x, normals[v.normal].y, normals[v.normal].z); - glTexCoord2f(texcoords[v.texcoord].x, texcoords[v.texcoord].y); - glVertex3f(vertices[v.position].x, vertices[v.position].y, vertices[v.position].z); + for (auto &v : f.vertices) + { + glPushMatrix(); + + glTranslatef(instance->translation.x, instance->translation.y, instance->translation.z); + glRotatef(instance->rotation.x, 1, 0, 0); + glRotatef(instance->rotation.y, 0, 1, 0); + glRotatef(instance->rotation.z, 0, 0, 1); + glScalef(instance->scale.x, instance->scale.y, instance->scale.z); + + glNormal3f(normals[v.normal].x, normals[v.normal].y, normals[v.normal].z); + glTexCoord2f(texcoords[v.texcoord].x, texcoords[v.texcoord].y); + glVertex3f(vertices[v.position].x, vertices[v.position].y, vertices[v.position].z); + } } + glEnd(); + } - glEnd(); } } @@ -270,4 +294,40 @@ Model::Texture::Texture(const std::string & fileName) void Model::Texture::bind() { glBindTexture(GL_TEXTURE_2D, index); -} \ No newline at end of file +} + +string replace(string str, string toReplace, string replacement) +{ + size_t index = 0; + while (true) + { + index = str.find(toReplace, index); + if (index == std::string::npos) + break; + str.replace(index, toReplace.length(), replacement); + ++index; + } + return str; +} + +vector split(string str, string sep) +{ + std::vector ret; + size_t index; + while (true) + { + index = str.find(sep); + if (index == std::string::npos) + break; + ret.push_back(str.substr(0, index)); + str = str.substr(index + 1); + } + ret.push_back(str); + return ret; +} + +inline string toLower(string data) +{ + std::transform(data.begin(), data.end(), data.begin(), ::tolower); + return data; +} diff --git a/Model.h b/Model.h index 77ea091..0ff281e 100644 --- a/Model.h +++ b/Model.h @@ -1,7 +1,6 @@ #pragma once #include "Header.h" -#include "ModelLoader.h" -#include "Vector.h" +#include "ModelInstance.h" class Model { @@ -59,10 +58,15 @@ private: std::vector groups; std::vector materials; + std::vector instances; + void loadMaterialFile(std::string fileName, std::string dirName); public: Model(std::string filename); + Model(void); ~Model(void); + void AddInstance(ModelInstance* inst); + void draw(); }; diff --git a/ModelHandler.cpp b/ModelHandler.cpp new file mode 100644 index 0000000..60edb27 --- /dev/null +++ b/ModelHandler.cpp @@ -0,0 +1,12 @@ +#include "ModelHandler.h" + + + +ModelHandler::ModelHandler() +{ +} + + +ModelHandler::~ModelHandler() +{ +} diff --git a/ModelHandler.h b/ModelHandler.h new file mode 100644 index 0000000..028afd5 --- /dev/null +++ b/ModelHandler.h @@ -0,0 +1,8 @@ +#pragma once +class ModelHandler +{ +public: + ModelHandler(); + ~ModelHandler(); +}; + diff --git a/ModelInstance.cpp b/ModelInstance.cpp new file mode 100644 index 0000000..bed0f80 --- /dev/null +++ b/ModelInstance.cpp @@ -0,0 +1,10 @@ +#include "ModelInstance.h" + +ModelInstance::ModelInstance() +{ +} + + +ModelInstance::~ModelInstance() +{ +} diff --git a/ModelInstance.h b/ModelInstance.h new file mode 100644 index 0000000..6287a2e --- /dev/null +++ b/ModelInstance.h @@ -0,0 +1,16 @@ +#pragma once +#include "Header.h" + +class ModelInstance +{ +private: +public: + ModelInstance(); + ~ModelInstance(); + + Vec3f translation; + Vec3f rotation; + Vec3f scale; + +}; + diff --git a/ModelLoader.cpp b/ModelLoader.cpp deleted file mode 100644 index 2afdb71..0000000 --- a/ModelLoader.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "Header.h" -#include "ModelLoader.h" - -string replace(string str, string toReplace, string replacement) -{ - size_t index = 0; - while (true) - { - index = str.find(toReplace, index); - if (index == std::string::npos) - break; - str.replace(index, toReplace.length(), replacement); - ++index; - } - return str; -} - -vector split(string str, string sep) -{ - std::vector ret; - size_t index; - while (true) - { - index = str.find(sep); - if (index == std::string::npos) - break; - ret.push_back(str.substr(0, index)); - str = str.substr(index + 1); - } - ret.push_back(str); - return ret; -} \ No newline at end of file diff --git a/ModelLoader.h b/ModelLoader.h deleted file mode 100644 index 89ebe71..0000000 --- a/ModelLoader.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "Header.h" - -string replace(string str, string toReplace, string replacement); -vector split(string str, string sep); -inline string toLower(string data) -{ - std::transform(data.begin(), data.end(), data.begin(), ::tolower); - return data; -} diff --git a/Player.cpp b/Player.cpp index 34748f4..85417f5 100644 --- a/Player.cpp +++ b/Player.cpp @@ -15,7 +15,7 @@ Player::~Player() delete left; } -void Player::Draw_Player(void) +void Player::Display(void) { if (right != nullptr) { diff --git a/Player.h b/Player.h index 84aa8de..8359528 100644 --- a/Player.h +++ b/Player.h @@ -17,7 +17,7 @@ public: float rotY = 0; } eyes; - void Draw_Player(void); + void Display(void); private: int level; int xp; diff --git a/SettingsState.cpp b/SettingsState.cpp new file mode 100644 index 0000000..6378ddf --- /dev/null +++ b/SettingsState.cpp @@ -0,0 +1,12 @@ +#include "SettingsState.h" + + + +SettingsState::SettingsState() +{ +} + + +SettingsState::~SettingsState() +{ +} diff --git a/SettingsState.h b/SettingsState.h new file mode 100644 index 0000000..4469361 --- /dev/null +++ b/SettingsState.h @@ -0,0 +1,11 @@ +#pragma once +#include "Header.h" +#include "State.h" + +class SettingsState : public State +{ +public: + SettingsState(); + ~SettingsState(); +}; + diff --git a/State.cpp b/State.cpp index 7015cb2..ea5090f 100644 --- a/State.cpp +++ b/State.cpp @@ -10,3 +10,31 @@ State::State() State::~State() { } + +void State::Entry() +{ +} + +void State::Exit() +{ +} + +void State::Idle(float delta) +{ +} + +void State::Display() +{ +} + +void State::Keyboard(bool keys[255]) +{ +} + +void State::MouseMove(int x, int y, int dx, int dy) +{ +} + +void State::MouseClick(int button, int type, int x, int y) +{ +} diff --git a/State.h b/State.h index b6e8c3c..7136f3a 100644 --- a/State.h +++ b/State.h @@ -6,5 +6,21 @@ class State public: State(); ~State(); + + virtual void Entry(); + virtual void Exit(); + + virtual void Idle(float delta); + virtual void Display(); + + virtual void Keyboard(bool keys[255]); + virtual void MouseMove(int x, int y, int dx, int dy); + virtual void MouseClick(int button, int type, int x, int y); }; +#include "InitState.h" +#include "LoadingState.h" +#include "MenuState.h" +#include "SettingsState.h" +#include "WorldState.h" + diff --git a/StateHandler.cpp b/StateHandler.cpp index 5861068..8c7027b 100644 --- a/StateHandler.cpp +++ b/StateHandler.cpp @@ -1,12 +1,32 @@ #include "StateHandler.h" - - StateHandler::StateHandler() { + StateList.push_back(new InitState()); //INIT_STATE + StateList.push_back(new LoadingState()); //LOADING_STATE + StateList.push_back(new MenuState()); //MENU_STATE + StateList.push_back(new SettingsState()); //SETTINGS_STATE + StateList.push_back(new WorldState()); //WORLD_STATE + + CurrentState = INIT_STATE; } StateHandler::~StateHandler() { } + +void StateHandler::Navigate(EState state) +{ + if (CurrentState == state) + return; + + StateList.at(CurrentState)->Exit(); + CurrentState = state; + StateList.at(CurrentState)->Entry(); +} + +State* StateHandler::GetCurrentState() +{ + return StateList.at(CurrentState); +} diff --git a/StateHandler.h b/StateHandler.h index 24673c9..712b1d7 100644 --- a/StateHandler.h +++ b/StateHandler.h @@ -1,10 +1,19 @@ #pragma once #include "Header.h" +#include "State.h" class StateHandler { public: + enum EState { INIT_STATE = 0, LOADING_STATE = 1, MENU_STATE = 2, SETTINGS_STATE = 3, WORLD_STATE = 4 }; + StateHandler(); ~StateHandler(); + + void Navigate(EState state); + State* GetCurrentState(); +private: + EState CurrentState; + vector StateList; }; diff --git a/WorldState.h b/WorldState.h index d110f22..9249110 100644 --- a/WorldState.h +++ b/WorldState.h @@ -1,7 +1,8 @@ #pragma once #include "Header.h" +#include "State.h" -class WorldState +class WorldState : public State { public: WorldState(); diff --git a/models/HANDVAT.png b/models/HANDVAT.png new file mode 100644 index 0000000..b56b296 Binary files /dev/null and b/models/HANDVAT.png differ diff --git a/models/TextureZwaard.mtl b/models/TextureZwaard.mtl new file mode 100644 index 0000000..6328409 --- /dev/null +++ b/models/TextureZwaard.mtl @@ -0,0 +1,134 @@ +newmtl initialShadingGroup +illum 4 +Kd 0.22 0.22 0.22 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl lambert2SG +illum 4 +Kd 0.50 0.32 0.25 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl lambert3SG +illum 4 +Kd 0.45 0.45 0.45 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl lambert4SG +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl lambert5SG +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__lambert3SG +illum 4 +Kd 0.45 0.45 0.45 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__lambert4SG +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__lambert4SG1 +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__lambert4SG2 +illum 4 +Kd 0.00 0.00 0.00 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +map_Kd ZWAARD.png +Ni 1.00 +newmtl pasted__lambert5SG +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__lambert5SG1 +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__lambert5SG2 +illum 4 +Kd 0.00 0.00 0.00 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +map_Kd HANDVAT.png +Ni 1.00 +newmtl pasted__pasted__lambert4SG +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert4SG1 +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert4SG2 +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert4SG3 +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert5SG +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert5SG1 +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert5SG2 +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__lambert5SG3 +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__pasted__lambert4SG +illum 4 +Kd 0.12 0.12 0.12 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 +newmtl pasted__pasted__pasted__lambert5SG +illum 4 +Kd 0.10 0.05 0.02 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 1.00 diff --git a/models/TextureZwaard.obj b/models/TextureZwaard.obj new file mode 100644 index 0000000..88776bb --- /dev/null +++ b/models/TextureZwaard.obj @@ -0,0 +1,436 @@ +# This file uses centimeters as units for non-parametric coordinates. + +mtllib TextureZwaard.mtl +g default +v -2.214711 4.435681 -1.922955 +v -2.214711 4.829163 -1.922955 +v -2.214711 4.829163 -2.316437 +v -2.214711 4.435681 -2.316437 +v -1.821229 4.435681 -2.316437 +v -1.821229 4.829163 -2.316437 +v -1.821229 4.829163 -1.922955 +v -1.821229 4.435681 -1.922955 +v -1.908670 5.978167 -2.010395 +v -2.127271 5.978167 -2.010395 +v -1.908670 5.978167 -2.228996 +v -2.127271 5.978167 -2.228996 +v -2.127271 4.523121 -3.000496 +v -1.908670 4.523121 -3.000496 +v -2.127271 4.741723 -2.990724 +v -1.908670 4.741723 -2.990724 +v -1.908670 4.523121 -1.238895 +v -2.127271 4.523121 -1.238895 +v -1.908670 4.741723 -1.248667 +v -2.127271 4.741723 -1.248667 +v -2.017970 5.567809 -1.922955 +v -1.870414 5.567809 -1.972140 +v -2.017970 6.121793 -1.972140 +v -2.165526 5.567809 -1.972140 +v -2.017970 4.829163 -1.922955 +v -1.821229 5.567809 -2.119696 +v -1.870414 5.567809 -2.267251 +v -1.870414 6.121793 -2.119696 +v -1.821229 4.829163 -2.119696 +v -2.017970 6.306454 -2.119696 +v -2.017970 6.121793 -2.267251 +v -2.165526 6.121793 -2.119696 +v -2.214711 5.567809 -2.119696 +v -2.165526 5.567809 -2.267251 +v -2.214711 4.829163 -2.119696 +v -2.017970 5.567809 -2.316437 +v -2.017970 4.829163 -2.316437 +v -2.017970 4.435681 -2.756189 +v -2.017970 4.484866 -3.086004 +v -1.870414 4.484866 -2.756189 +v -2.017970 4.435681 -2.316437 +v -2.165526 4.484866 -2.756189 +v -2.214711 4.632422 -2.756189 +v -2.165526 4.632422 -3.086004 +v -2.214711 4.632422 -2.316437 +v -2.165526 4.779978 -2.734202 +v -2.017970 4.632422 -3.195942 +v -2.017970 4.779978 -3.064016 +v -1.870414 4.632422 -3.086004 +v -1.821229 4.632422 -2.756189 +v -1.870414 4.779978 -2.734202 +v -1.821229 4.632422 -2.316437 +v -2.017970 4.829163 -2.668239 +v -2.116341 4.829163 -2.316437 +v -1.919600 4.829163 -2.316437 +v -2.017970 4.435681 -1.483202 +v -1.870414 4.484866 -1.483202 +v -2.017970 4.484866 -1.153388 +v -2.165526 4.484866 -1.483202 +v -2.017970 4.435681 -1.922955 +v -1.821229 4.632422 -1.483202 +v -1.870414 4.779978 -1.505190 +v -1.870414 4.632422 -1.153388 +v -1.821229 4.632422 -1.922955 +v -2.017970 4.632422 -1.043449 +v -2.017970 4.779978 -1.175375 +v -2.165526 4.632422 -1.153388 +v -2.214711 4.632422 -1.483202 +v -2.165526 4.779978 -1.505190 +v -2.214711 4.632422 -1.922955 +v -2.017970 4.829163 -1.571153 +v -1.919600 4.829163 -1.922955 +v -2.116341 4.829163 -1.922955 +v -2.145140 1.194092 -2.004379 +v -1.894884 1.194092 -2.004379 +v -2.145140 4.476328 -2.004379 +v -1.894884 4.476328 -2.004379 +v -2.145140 4.476328 -2.254635 +v -1.894884 4.476328 -2.254635 +v -2.145140 1.194092 -2.254635 +v -1.894884 1.194092 -2.254635 +v -2.020800 1.194092 -1.837458 +v -2.020800 1.194092 -2.421667 +v -2.020800 4.476328 -2.421667 +v -2.020800 4.476328 -1.837458 +v -2.020800 0.395449 -2.130295 +v -2.020012 0.395449 -2.129507 +v -2.020800 0.395449 -2.128719 +vt 0.375000 0.175791 +vt 0.375000 0.183595 +vt 0.375000 0.191400 +vt 0.250000 0.191400 +vt 0.125000 0.191400 +vt 0.125000 0.183595 +vt 0.125000 0.175791 +vt 0.875000 0.175791 +vt 0.875000 0.183595 +vt 0.875000 0.191400 +vt 0.750000 0.191400 +vt 0.625000 0.191400 +vt 0.625000 0.183595 +vt 0.625000 0.175791 +vt 0.500000 0.191400 +vt 0.562500 0.191400 +vt 0.625000 0.220700 +vt 0.500000 0.220700 +vt 0.875000 0.220700 +vt 0.750000 0.220700 +vt 0.375000 0.375000 +vt 0.375000 0.250000 +vt 0.500000 0.273925 +vt 0.500000 0.375000 +vt 0.375000 0.220700 +vt 0.250000 0.220700 +vt 0.375000 0.529300 +vt 0.375000 0.500000 +vt 0.500000 0.476075 +vt 0.500000 0.529300 +vt -1.#IND00 -1.#IND00 +vt 0.375000 0.000000 +vt 0.500000 0.000000 +vt 0.500000 0.051075 +vt -1.#IND00 -1.#IND00 +vt 0.125000 0.000000 +vt 0.250000 0.000000 +vt -1.#IND00 -1.#IND00 +vt 0.375000 0.875000 +vt 0.375000 0.750000 +vt 0.500000 0.765928 +vt 0.500000 0.875000 +vt -1.#IND00 -1.#IND00 +vt 0.625000 0.000000 +vt 0.750000 0.000000 +vt -1.#IND00 -1.#IND00 +vt 0.562500 0.647850 +vt 0.625000 0.647850 +vt 0.625000 0.698925 +vt 0.500000 0.688710 +vt 0.500000 0.147850 +vt 0.625000 0.147850 +vt -1.#IND00 -1.#IND00 +vt 0.500000 0.198925 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt 0.375000 0.375000 +vt 0.375000 0.250000 +vt 0.500000 0.268481 +vt 0.500000 0.375000 +vt -1.#IND00 -1.#IND00 +vt 0.375000 0.147850 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt 0.375000 0.551075 +vt 0.375000 0.500000 +vt 0.500000 0.484072 +vt 0.500000 0.561290 +vt 0.375000 0.102150 +vt 0.625000 0.138970 +vt 0.500000 0.161821 +vt 0.625000 0.250000 +vt 0.437500 0.191400 +vt 0.875000 0.250000 +vt 0.750000 0.250000 +vt 0.625000 0.375000 +vt 0.625000 0.500000 +vt 0.250000 0.250000 +vt 0.125000 0.250000 +vt 0.125000 0.220700 +vt 0.625000 0.529300 +vt 0.625000 0.558600 +vt 0.562500 0.558600 +vt 0.500000 0.558600 +vt 0.437500 0.558600 +vt 0.375000 0.558600 +vt 0.625000 0.102150 +vt 0.500000 0.102150 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt 0.625000 0.750000 +vt 0.625000 0.875000 +vt 0.625000 1.000000 +vt 0.500000 1.000000 +vt 0.375000 1.000000 +vt 0.875000 0.000000 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt 0.375000 0.698925 +vt 0.375000 0.647850 +vt 0.437500 0.647850 +vt 0.500000 0.647850 +vt 0.625000 0.250000 +vt 0.875000 0.250000 +vt 0.750000 0.250000 +vt 0.625000 0.375000 +vt 0.625000 0.500000 +vt 0.250000 0.250000 +vt 0.125000 0.250000 +vt -1.#IND00 -1.#IND00 +vt -1.#IND00 -1.#IND00 +vt 0.625000 0.551075 +vt 0.625000 0.602150 +vt 0.562500 0.602150 +vt 0.500000 0.602150 +vt 0.437500 0.602150 +vt 0.375000 0.602150 +vt 0.499213 0.250000 +vt 0.499213 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.250000 +vt 0.499213 0.500000 +vt 0.625000 0.500000 +vt 0.499213 0.750000 +vt 0.625000 0.750000 +vt 0.500000 0.875471 +vt 0.499213 0.875361 +vt 0.499213 0.874686 +vt 0.875000 0.000000 +vt 0.875000 0.250000 +vt 0.125000 0.000000 +vt 0.375000 0.000000 +vt 0.375000 0.250000 +vt 0.125000 0.250000 +vt 0.375000 0.750000 +vt 0.375000 1.000000 +vt 0.375000 0.500000 +vt 0.625000 1.000000 +vt 0.499213 1.000000 +vn -0.706849 -0.706849 0.027027 +vn -0.999778 -0.000000 0.021082 +vn -0.916167 0.161747 0.366710 +vn -0.999853 0.017156 0.000000 +vn -0.916167 0.161747 -0.366710 +vn -0.999778 0.000000 -0.021082 +vn -0.706848 -0.706849 -0.027027 +vn 0.706849 -0.706848 -0.027027 +vn 0.999778 -0.000000 -0.021082 +vn 0.916167 0.161747 -0.366710 +vn 0.999853 0.017156 0.000000 +vn 0.916167 0.161747 0.366710 +vn 0.999778 0.000000 0.021082 +vn 0.706849 -0.706848 0.027027 +vn 0.000000 0.296282 0.955101 +vn 0.165279 0.343682 0.924427 +vn 0.705454 0.068331 0.705454 +vn -0.000000 0.059769 0.998212 +vn 0.705454 0.068331 -0.705454 +vn 0.998212 0.059770 0.000000 +vn -0.926131 0.377203 0.000000 +vn -0.699145 0.149633 0.699147 +vn -0.000000 0.377204 0.926130 +vn -0.000000 1.000000 -0.000000 +vn -0.705454 0.068331 0.705454 +vn -0.998212 0.059770 0.000000 +vn -0.705454 0.068331 -0.705454 +vn -0.699146 0.149633 -0.699146 +vn 0.000000 0.377204 -0.926130 +vn -0.000000 0.059769 -0.998212 +vn -0.702552 -0.702552 -0.113318 +vn -0.680278 -0.680278 -0.272843 +vn -0.000000 -0.871334 -0.490690 +vn 0.000000 -0.995011 -0.099770 +vn -0.764530 0.632514 -0.124178 +vn -0.647141 0.717488 -0.257720 +vn -0.867188 0.029145 -0.497127 +vn -0.994694 0.006104 -0.102697 +vn -0.000000 0.901897 -0.431952 +vn 0.000000 0.041614 -0.999134 +vn 0.702553 -0.702552 -0.113318 +vn 0.680279 -0.680278 -0.272842 +vn 0.867188 0.029145 -0.497127 +vn 0.994694 0.006104 -0.102697 +vn 0.165279 0.343682 -0.924427 +vn 0.764531 0.632513 -0.124177 +vn -0.000000 0.994023 -0.109172 +vn 0.000000 -0.999780 0.020984 +vn 0.702552 -0.702552 0.113318 +vn 0.000000 -0.995011 0.099770 +vn 0.764531 0.632513 0.124177 +vn 0.994694 0.006104 0.102697 +vn -0.867188 0.029145 0.497128 +vn -0.680278 -0.680278 0.272843 +vn -0.000000 -0.871334 0.490690 +vn -0.000000 0.041614 0.999134 +vn -0.702552 -0.702552 0.113318 +vn -0.994694 0.006104 0.102697 +vn -0.764530 0.632514 0.124178 +vn -0.647140 0.717488 0.257721 +vn -0.000000 0.901897 0.431952 +vn 0.000000 0.994023 0.109172 +vn 0.000000 -0.999780 -0.020984 +vn 0.699145 0.149633 0.699147 +vn -0.165279 0.343682 0.924427 +vn 0.699146 0.149633 -0.699145 +vn 0.926130 0.377204 -0.000000 +vn -0.000000 0.296282 -0.955101 +vn -0.165279 0.343682 -0.924427 +vn 0.647141 0.717488 -0.257720 +vn 0.680279 -0.680278 0.272842 +vn 0.647141 0.717488 0.257720 +vn 0.867188 0.029145 0.497128 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.798332 0.000000 0.602218 +vn 0.798332 0.000000 0.602218 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.798524 0.000000 -0.601963 +vn 0.798524 0.000000 -0.601963 +vn 0.967785 -0.251777 0.000042 +vn -0.485721 -0.462486 0.741742 +vn -0.485344 -0.462668 -0.741875 +vn 1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.935019 -0.191988 -0.298128 +vn -0.934995 -0.191995 0.298198 +vn -0.802147 0.000000 -0.597126 +vn -0.802147 0.000000 -0.597126 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.801957 0.000000 0.597382 +vn -0.801957 0.000000 0.597382 +vn 0.003575 -0.342600 -0.939475 +vn 0.932888 -0.193820 -0.303570 +vn 0.932863 -0.193827 0.303641 +vn 0.003576 -0.342485 0.939516 +s 1 +g polySurface10 +usemtl pasted__lambert5SG2 +f 1/1/1 70/2/2 2/3/3 35/4/4 3/5/5 45/6/6 4/7/7 +f 5/8/8 52/9/9 6/10/10 29/11/11 7/12/12 64/13/13 8/14/14 +f 25/15/15 72/16/16 7/12/12 22/17/17 21/18/18 +f 29/11/11 6/10/10 27/19/19 26/20/20 +f 32/21/21 10/22/22 23/23/23 30/24/24 +f 35/4/4 2/3/3 24/25/25 33/26/26 +f 34/27/27 12/28/28 31/29/29 36/30/30 +f 42/31/31 13/32/32 39/33/33 38/34/34 +f 46/35/35 15/36/36 44/37/37 43/38/38 +f 44/39/37 15/40/36 48/41/39 47/42/40 +f 40/43/41 14/44/42 49/45/43 50/46/44 +f 55/47/45 6/48/10 51/49/46 53/50/47 +f 60/51/48 8/52/14 57/53/49 56/54/50 +f 64/55/13 7/56/12 62/57/51 61/58/52 +f 67/59/53 18/60/54 58/61/55 65/62/56 +f 70/63/2 1/64/1 59/65/57 68/66/58 +f 69/67/59 20/68/60 66/69/61 71/70/62 +f 1/1/1 4/71/7 41/72/63 5/8/8 8/52/14 60/73/48 +f 22/17/17 9/74/64 23/23/23 21/18/18 +f 23/23/23 10/22/22 24/25/25 21/18/18 +f 24/25/25 2/3/3 73/75/65 25/15/15 21/18/18 +f 27/19/19 11/76/66 28/77/67 26/20/20 +f 28/77/67 9/74/64 22/17/17 26/20/20 +f 22/17/17 7/12/12 29/11/11 26/20/20 +f 23/23/23 9/74/64 28/78/67 30/24/24 +f 28/78/67 11/79/66 31/29/29 30/24/24 +f 31/29/29 12/28/28 32/21/21 30/24/24 +f 24/25/25 10/22/22 32/80/21 33/26/26 +f 32/80/21 12/81/28 34/82/27 33/26/26 +f 34/82/27 3/5/5 35/4/4 33/26/26 +f 31/29/29 11/79/66 27/83/19 36/30/30 +f 27/83/19 6/84/10 55/85/45 37/86/68 36/30/30 +f 37/86/68 54/87/69 3/88/5 34/27/27 36/30/30 +f 39/33/33 14/44/42 40/43/41 38/34/34 +f 40/43/41 5/89/8 41/90/63 38/34/34 +f 41/90/63 4/71/7 42/31/31 38/34/34 +f 44/37/37 13/32/32 42/31/31 43/38/38 +f 42/31/31 4/71/7 45/91/6 43/38/38 +f 45/91/6 3/92/5 46/35/35 43/38/38 +f 48/41/39 16/93/70 49/94/43 47/42/40 +f 49/94/43 14/95/42 39/96/33 47/42/40 +f 39/96/33 13/97/32 44/39/37 47/42/40 +f 49/45/43 16/98/70 51/99/46 50/46/44 +f 51/99/46 6/100/10 52/101/9 50/46/44 +f 52/101/9 5/89/8 40/43/41 50/46/44 +f 51/49/46 16/93/70 48/41/39 53/50/47 +f 48/41/39 15/40/36 46/102/35 53/50/47 +f 46/102/35 3/103/5 54/104/69 53/50/47 +f 54/104/69 37/105/68 55/47/45 53/50/47 +f 57/53/49 17/106/71 58/61/55 56/54/50 +f 58/61/55 18/60/54 59/65/57 56/54/50 +f 59/65/57 1/64/1 60/51/48 56/54/50 +f 62/57/51 19/107/72 63/108/73 61/58/52 +f 63/108/73 17/106/71 57/53/49 61/58/52 +f 57/53/49 8/52/14 64/55/13 61/58/52 +f 58/61/55 17/106/71 63/109/73 65/62/56 +f 63/109/73 19/110/72 66/69/61 65/62/56 +f 66/69/61 20/68/60 67/59/53 65/62/56 +f 59/65/57 18/60/54 67/111/53 68/66/58 +f 67/111/53 20/112/60 69/113/59 68/66/58 +f 69/113/59 2/114/3 70/63/2 68/66/58 +f 66/69/61 19/110/72 62/115/51 71/70/62 +f 62/115/51 7/116/12 72/117/16 71/70/62 +f 72/117/16 25/118/15 73/119/65 71/70/62 +f 73/119/65 2/120/3 69/67/59 71/70/62 +s 10 +usemtl pasted__lambert4SG2 +f 85/121/74 82/122/75 75/123/76 77/124/77 +s 11 +f 84/125/78 85/121/79 77/124/80 79/126/81 +s 12 +f 83/127/82 84/125/83 79/126/84 81/128/85 +s 13 +f 87/129/86 88/130/87 86/131/88 +s off +f 75/123/89 81/132/90 79/133/91 77/124/92 +f 80/134/93 74/135/94 76/136/95 78/137/96 +s 13 +f 80/138/97 86/131/88 88/130/87 74/139/98 +s 12 +f 78/140/99 84/125/83 83/127/82 80/138/100 +s 11 +f 76/136/101 85/121/79 84/125/78 78/140/102 +s 10 +f 74/135/103 82/122/75 85/121/74 76/136/104 +s 13 +f 80/138/97 83/127/105 86/131/88 +f 81/128/106 87/129/86 86/131/88 83/127/105 +f 75/141/107 87/129/86 81/128/106 +f 82/142/108 88/130/87 87/129/86 75/141/107 +f 74/139/98 88/130/87 82/142/108 diff --git a/models/ZWAARD.png b/models/ZWAARD.png new file mode 100644 index 0000000..6c7467e Binary files /dev/null and b/models/ZWAARD.png differ