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