summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Rødal <srodal@gmail.com>2008-11-30 23:45:13 +0100
committerSamuel Rødal <srodal@gmail.com>2008-11-30 23:45:13 +0100
commite6e8c04114373e9ecacfdccd496e7503ed1046a1 (patch)
tree54ba54b39f2ba3339cd0252b9b3aec5e2d529ed3
parent8b9e2e330c6d5d97b4170703e543adbd555e8be7 (diff)
Add OpenGL model renderer and improve update/visibility handling for increased performance.
-rw-r--r--README1
-rw-r--r--entity.cpp6
-rw-r--r--main.cpp2
-rw-r--r--matrix4x4.cpp82
-rw-r--r--matrix4x4.h23
-rw-r--r--mazescene.cpp117
-rw-r--r--mazescene.h16
-rw-r--r--model.cpp167
-rw-r--r--model.h60
-rw-r--r--modelitem.cpp215
-rw-r--r--modelitem.h89
-rw-r--r--point3d.h122
-rw-r--r--qt.obj2456
-rw-r--r--qt3d.pro6
14 files changed, 3269 insertions, 93 deletions
diff --git a/README b/README
index 314cdb9..b8f0800 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
All the textures used are from the Wolfenstein 3D Texture Library, http://www.areyep.com/RIPandMCS-TextureLibrary.html
+2008-11-30
diff --git a/entity.cpp b/entity.cpp
index cdcd4c7..b8f1ea9 100644
--- a/entity.cpp
+++ b/entity.cpp
@@ -135,9 +135,3 @@ void Entity::updateImage()
else
setImage(images.at(m_angleIndex));
}
-
-void MazeScene::addEntity(Entity *entity)
-{
- addItem(entity);
- m_entities << entity;
-}
diff --git a/main.cpp b/main.cpp
index 1b1f389..14fd589 100644
--- a/main.cpp
+++ b/main.cpp
@@ -14,7 +14,7 @@ int main(int argc, char **argv)
"# #"
"# #### #"
"& # #"
- "# @@ &"
+ "* @@ &"
"# @@ # #"
"# #"
"###&%-##"
diff --git a/matrix4x4.cpp b/matrix4x4.cpp
index 66ecb81..ad1da29 100644
--- a/matrix4x4.cpp
+++ b/matrix4x4.cpp
@@ -2,7 +2,7 @@
Matrix4x4::Matrix4x4()
{
- qreal identity[] =
+ float identity[] =
{
1, 0, 0, 0,
0, 1, 0, 0,
@@ -13,12 +13,21 @@ Matrix4x4::Matrix4x4()
setData(identity);
}
-Matrix4x4::Matrix4x4(qreal *data)
+Matrix4x4::Matrix4x4(float *data)
{
setData(data);
}
-void Matrix4x4::setData(qreal *data)
+Matrix4x4 Matrix4x4::orderSwapped() const
+{
+ float data[16];
+ for (int i = 0; i < 4; ++i)
+ for (int j = 0; j < 4; ++j)
+ data[4*i + j] = m[4*j + i];
+ return Matrix4x4(data);
+}
+
+void Matrix4x4::setData(float *data)
{
for (int i = 0; i < 16; ++i)
m[i] = data[i];
@@ -42,14 +51,24 @@ Matrix4x4 Matrix4x4::operator*(const Matrix4x4 &other) const
return Matrix4x4(*this) *= other;
}
-Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis)
+Point3d Matrix4x4::operator*(const Point3d &p) const
+{
+ qreal x = m[0] * p.x + m[4] * p.y + m[8] * p.z + m[12];
+ qreal y = m[1] * p.x + m[5] * p.y + m[9] * p.z + m[13];
+ qreal z = m[2] * p.x + m[6] * p.y + m[10] * p.z + m[14];
+ qreal w = m[3] * p.x + m[7] * p.y + m[11] * p.z + m[15];
+
+ return Point3d(x / w, y / w, z / w);
+}
+
+Matrix4x4 Matrix4x4::fromRotation(float angle, Qt::Axis axis)
{
QTransform rot;
rot.rotate(angle);
switch (axis) {
case Qt::XAxis:
{
- qreal data[] =
+ float data[] =
{
1, 0, 0, 0,
0, rot.m11(), rot.m12(), 0,
@@ -60,7 +79,7 @@ Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis)
}
case Qt::YAxis:
{
- qreal data[] =
+ float data[] =
{
rot.m11(), 0, rot.m12(), 0,
0, 1, 0, 0,
@@ -71,7 +90,7 @@ Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis)
}
case Qt::ZAxis:
{
- qreal data[] =
+ float data[] =
{
rot.m11(), rot.m12(), 0, 0,
rot.m21(), rot.m22(), 0, 0,
@@ -85,9 +104,9 @@ Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis)
}
}
-Matrix4x4 Matrix4x4::fromTranslation(qreal dx, qreal dy, qreal dz)
+Matrix4x4 Matrix4x4::fromTranslation(float dx, float dy, float dz)
{
- qreal data[] =
+ float data[] =
{
1, 0, 0, 0,
0, 1, 0, 0,
@@ -97,9 +116,9 @@ Matrix4x4 Matrix4x4::fromTranslation(qreal dx, qreal dy, qreal dz)
return Matrix4x4(data);
}
-Matrix4x4 Matrix4x4::fromScale(qreal sx, qreal sy, qreal sz)
+Matrix4x4 Matrix4x4::fromScale(float sx, float sy, float sz)
{
- qreal data[] =
+ float data[] =
{
sx, 0, 0, 0,
0, sy, 0, 0,
@@ -109,26 +128,20 @@ Matrix4x4 Matrix4x4::fromScale(qreal sx, qreal sy, qreal sz)
return Matrix4x4(data);
}
-Matrix4x4 Matrix4x4::fromProjection(qreal fov)
+Matrix4x4 Matrix4x4::fromProjection(float fov)
{
- qreal data[] =
- {
- 1, 0, 0, 0,
- 0, 1, 0, 0,
- 0, 0, 1, fov,
- 0, 0, 0, 0
- };
- return Matrix4x4(data);
-}
+ float zNear = 0.001;
+ float zFar = 1000;
-Matrix4x4 convert2dTo3d()
-{
- qreal data[] =
+ float m33 = (zNear + zFar) / (zNear - zFar);
+ float m34 = (2 * zNear * zFar) / (zNear - zFar);
+
+ float data[] =
{
- 1, 0, 0, 0,
- 0, 1, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 1
+ fov, 0, 0, 0,
+ 0, fov, 0, 0,
+ 0, 0, m33, -1,
+ 0, 0, m34, 0
};
return Matrix4x4(data);
}
@@ -139,3 +152,16 @@ QTransform Matrix4x4::toQTransform() const
m[4], m[5], m[7],
m[12], m[13], m[15]);
}
+
+Matrix4x4 Matrix4x4::fromQTransform(const QTransform &transform)
+{
+ float data[] =
+ {
+ transform.m11(), transform.m12(), 0, transform.m13(),
+ transform.m21(), transform.m22(), 0, transform.m23(),
+ 0, 0, 1, 0,
+ transform.m31(), transform.m32(), 0, transform.m33()
+ };
+
+ return Matrix4x4(data);
+}
diff --git a/matrix4x4.h b/matrix4x4.h
index 588bb40..11ddfb2 100644
--- a/matrix4x4.h
+++ b/matrix4x4.h
@@ -4,27 +4,34 @@
#include <qnamespace.h>
#include <QTransform>
+#include "point3d.h"
+
class Matrix4x4
{
public:
Matrix4x4();
- Matrix4x4(qreal *data);
+ Matrix4x4(float *data);
Matrix4x4 &operator*=(const Matrix4x4 &other);
Matrix4x4 operator*(const Matrix4x4 &other) const;
- static Matrix4x4 fromRotation(qreal angle, Qt::Axis axis);
- static Matrix4x4 fromTranslation(qreal dx, qreal dy, qreal dz);
- static Matrix4x4 fromScale(qreal sx, qreal sy, qreal sz);
- static Matrix4x4 fromProjection(qreal fov);
- static Matrix4x4 convert2dTo3d();
+ Point3d operator*(const Point3d &point) const;
+
+ static Matrix4x4 fromRotation(float angle, Qt::Axis axis);
+ static Matrix4x4 fromTranslation(float dx, float dy, float dz);
+ static Matrix4x4 fromScale(float sx, float sy, float sz);
+ static Matrix4x4 fromProjection(float fov);
QTransform toQTransform() const;
+ static Matrix4x4 fromQTransform(const QTransform &transform);
+
+ void setData(float *data);
+ const float *data() const { return m; }
- void setData(qreal *data);
+ Matrix4x4 orderSwapped() const;
private:
- qreal m[16];
+ float m[16];
};
#endif
diff --git a/mazescene.cpp b/mazescene.cpp
index 6a516c5..08b4d37 100644
--- a/mazescene.cpp
+++ b/mazescene.cpp
@@ -14,9 +14,9 @@
#include <qmath.h>
#include <qdebug.h>
-#include "matrix4x4.h"
#include "scriptwidget.h"
#include "entity.h"
+#include "modelitem.h"
#ifdef USE_PHONON
#include "mediaplayer/mediaplayer.h"
@@ -83,6 +83,7 @@ MazeScene::MazeScene(const QVector<Light> &lights, const char *map, int width, i
types['?'] = 5;
types['!'] = 6;
types['='] = 7;
+ types['*'] = 8;
int type;
for (int y = 0; y < height; ++y) {
@@ -125,6 +126,12 @@ MazeScene::MazeScene(const QVector<Light> &lights, const char *map, int width, i
updateTransforms();
}
+void MazeScene::addProjectedItem(ProjectedItem *item)
+{
+ addItem(item);
+ m_projectedItems << item;
+}
+
void MazeScene::addWall(const QPointF &a, const QPointF &b, int type)
{
WallItem *item = new WallItem(this, a, b, type);
@@ -135,7 +142,7 @@ void MazeScene::addWall(const QPointF &a, const QPointF &b, int type)
}
#endif
item->setVisible(false);
- addItem(item);
+ addProjectedItem(item);
m_walls << item;
if (type == -1)
@@ -157,6 +164,16 @@ static inline QTransform rotatingTransform(qreal angle)
return transform;
}
+Matrix4x4 Camera::matrix(qreal time) const
+{
+ Matrix4x4 m;
+ m *= Matrix4x4::fromTranslation(-m_pos.x(), 0.04 * qSin(10 * time) + 0.1, -m_pos.y());
+ m *= Matrix4x4::fromRotation(m_yaw + 180, Qt::YAxis);
+ m *= Matrix4x4::fromScale(-1, 1, 1);
+ m *= Matrix4x4::fromRotation(m_pitch, Qt::XAxis);
+ return m;
+}
+
void MazeScene::drawBackground(QPainter *painter, const QRectF &)
{
static QImage floor = QImage("floor.png").convertToFormat(QImage::Format_RGB32);
@@ -172,15 +189,10 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &)
const QRectF r(1, 1, m_width-2, m_height-2);
- Matrix4x4 m;
- m *= Matrix4x4::fromRotation(m_camera.yaw(), Qt::YAxis);
- m *= Matrix4x4::fromRotation(m_camera.pitch(), Qt::XAxis);
- m *= Matrix4x4::fromProjection(0.5);
-
- qreal heightOffset = 0.04 * qSin(0.01 * m_walkTime) + 0.1;
+ Matrix4x4 m = m_camera.matrix(0.001 * m_walkTime) * Matrix4x4::fromProjection(1);
Matrix4x4 floorMatrix = Matrix4x4::fromRotation(90, Qt::XAxis);
- floorMatrix *= Matrix4x4::fromTranslation(-m_camera.pos().x(), heightOffset + 0.5, -m_camera.pos().y());
+ floorMatrix *= Matrix4x4::fromTranslation(0, 0.5, 0);
floorMatrix *= m;
painter->save();
@@ -189,7 +201,7 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &)
painter->restore();
Matrix4x4 ceilingMatrix = Matrix4x4::fromRotation(90, Qt::XAxis);
- ceilingMatrix *= Matrix4x4::fromTranslation(-m_camera.pos().x(), heightOffset - 0.5, -m_camera.pos().y());
+ ceilingMatrix *= Matrix4x4::fromTranslation(0, -0.5, 0);
ceilingMatrix *= m;
painter->save();
@@ -198,6 +210,12 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &)
painter->restore();
}
+void MazeScene::addEntity(Entity *entity)
+{
+ addProjectedItem(entity);
+ m_entities << entity;
+}
+
ProjectedItem::ProjectedItem(const QRectF &bounds, bool shadow)
: m_bounds(bounds)
, m_shadowItem(0)
@@ -217,6 +235,16 @@ void ProjectedItem::setPosition(const QPointF &a, const QPointF &b)
m_b = b;
}
+class ResizingView : public QGraphicsView
+{
+protected:
+ void resizeEvent(QResizeEvent *event) {
+ if (scene())
+ scene()->setSceneRect(QRect(QPoint(0, 0), event->size()));
+ QGraphicsView::resizeEvent(event);
+ }
+};
+
WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int type)
: ProjectedItem(QRectF(-0.5, -0.5, 1.0, 1.0))
, m_type(type)
@@ -252,9 +280,6 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ
m_scale = 0.8;
- QPalette palette;
- palette.setColor(QPalette::Window, QColor(Qt::transparent));
-
m_childItem = 0;
QWidget *childWidget = 0;
if (type == 3 && a.y() == b.y()) {
@@ -263,7 +288,6 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ
QObject::connect(button, SIGNAL(clicked()), scene, SLOT(toggleDoors()));
widget->setLayout(new QVBoxLayout);
widget->layout()->addWidget(button);
- widget->setPalette(palette);
childWidget = widget;
m_scale = 0.3;
} else if (type == 4) {
@@ -282,6 +306,11 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ
childWidget = new MediaPlayer(QString());
m_scale = 0.6;
#endif
+ } else if (type == 8) {
+ ModelItem *dialog = new ModelItem;
+ childWidget = dialog;
+ scene->addProjectedItem(dialog);
+ m_scale = 0.5;
} else if (type == 0 || type == 2) {
static int index;
if (index == 0) {
@@ -291,7 +320,6 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ
QObject::connect(checkBox, SIGNAL(toggled(bool)), scene, SLOT(toggleRenderer()), Qt::QueuedConnection);
widget->setLayout(new QVBoxLayout);
widget->layout()->addWidget(checkBox);
- widget->setPalette(palette);
childWidget = widget;
m_scale = 0.2;
} else if (!(index % 7)) {
@@ -333,30 +361,30 @@ bool MazeScene::eventFilter(QObject *target, QEvent *event)
foreach (WallItem *item, m_walls) {
QGraphicsProxyWidget *proxy = item->childItem();
- if (!proxy)
- continue;
- if (proxy->widget() == widget) {
- QRectF rect = proxy->boundingRect();
-
- QPointF center = rect.center();
-
- qreal scale = item->childScale();
- scale = qMin(scale / rect.width(), scale / rect.height());
- proxy->resetMatrix();
- proxy->translate(0, -0.05);
- proxy->scale(scale, scale);
- proxy->translate(-center.x(), -center.y());
-
- // refresh cache size
- proxy->setCacheMode(QGraphicsItem::NoCache);
- proxy->setCacheMode(QGraphicsItem::ItemCoordinateCache);
- break;
- }
+ if (proxy && proxy->widget() == widget)
+ item->childResized();
}
return false;
}
+void WallItem::childResized()
+{
+ QRectF rect = m_childItem->boundingRect();
+
+ QPointF center = rect.center();
+
+ qreal scale = qMin(m_scale / rect.width(), m_scale / rect.height());
+ m_childItem->resetMatrix();
+ m_childItem->translate(0, -0.05);
+ m_childItem->scale(scale, scale);
+ m_childItem->translate(-center.x(), -center.y());
+
+ // refresh cache size
+ m_childItem->setCacheMode(QGraphicsItem::NoCache);
+ m_childItem->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+}
+
void ProjectedItem::setConstantLight(qreal light)
{
if (m_shadowItem)
@@ -434,18 +462,19 @@ void ProjectedItem::updateTransform(const Camera &camera, qreal time)
QPointF cb = rotation.map(m_b);
if (ca.y() <= 0 && cb.y() <= 0) {
- setVisible(false);
+ // hide the item by placing it far outside the scene
+ // we could use setVisible() but that causes unnecessary
+ // update to cahced items
+ QTransform transform;
+ transform.translate(-1000, -1000);
+ setTransform(transform);
return;
}
- const qreal fov = 0.5;
-
Matrix4x4 m;
m *= Matrix4x4::fromRotation(-QLineF(m_b, m_a).angle(), Qt::YAxis);
- m *= Matrix4x4::fromTranslation(center.x() - camera.pos().x(), 0.04 * qSin(10 * time) + 0.1, center.y() - camera.pos().y());
- m *= Matrix4x4::fromRotation(camera.yaw(), Qt::YAxis);
- m *= Matrix4x4::fromRotation(camera.pitch(), Qt::XAxis);
- m *= Matrix4x4::fromProjection(fov);
+ m *= Matrix4x4::fromTranslation(center.x(), 0, center.y());
+ m *= camera.matrix(time) * Matrix4x4::fromProjection(1);
qreal zm = QLineF(camera.pos(), center).length();
@@ -569,8 +598,10 @@ bool MazeScene::tryMove(QPointF &pos, const QPointF &delta, Entity *entity) cons
void MazeScene::updateTransforms()
{
- foreach (WallItem *item, m_walls) {
+ foreach (ProjectedItem *item, m_projectedItems)
item->updateTransform(m_camera, m_walkTime * 0.001);
+
+ foreach (WallItem *item, m_walls) {
if (item->isVisible()) {
// embed recursive scene
if (QGraphicsProxyWidget *child = item->childItem()) {
@@ -591,8 +622,6 @@ void MazeScene::updateTransforms()
}
}
}
- foreach (Entity *entity, m_entities)
- entity->updateTransform(m_camera, m_walkTime * 0.001);
#ifdef USE_PHONON
if (m_player) {
diff --git a/mazescene.h b/mazescene.h
index 7925a9f..2b95873 100644
--- a/mazescene.h
+++ b/mazescene.h
@@ -11,6 +11,8 @@
#include <QTime>
#include <QTimeLine>
+#include "matrix4x4.h"
+
class MazeScene;
class MediaPlayer;
class Entity;
@@ -40,6 +42,8 @@ public:
void setPitch(qreal pitch) { m_pitch = pitch; }
void setPos(const QPointF &pos) { m_pos = pos; }
+ Matrix4x4 matrix(qreal time) const;
+
private:
qreal m_yaw;
qreal m_pitch;
@@ -70,10 +74,11 @@ public:
QPointF a() const { return m_a; }
QPointF b() const { return m_b; }
+ virtual void updateTransform(const Camera &camera, qreal time);
+
QRectF boundingRect() const;
void setPosition(const QPointF &a, const QPointF &b);
- void updateTransform(const Camera &camera, qreal time);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void setAnimationTime(qreal time);
void setImage(const QImage &image);
@@ -99,13 +104,10 @@ public:
return m_childItem;
}
- qreal childScale() const
- {
- return m_scale;
- }
-
int type() const { return m_type; }
+ void childResized();
+
private:
QGraphicsProxyWidget *m_childItem;
int m_type;
@@ -118,6 +120,7 @@ class MazeScene : public QGraphicsScene
public:
MazeScene(const QVector<Light> &lights, const char *map, int width, int height);
+ void addProjectedItem(ProjectedItem *item);
void addEntity(Entity *entity);
void addWall(const QPointF &a, const QPointF &b, int type);
void drawBackground(QPainter *painter, const QRectF &rect);
@@ -151,6 +154,7 @@ private:
QVector<QPushButton *> m_buttons;
QVector<Entity *> m_entities;
QVector<Light> m_lights;
+ QVector<ProjectedItem *> m_projectedItems;
Camera m_camera;
diff --git a/model.cpp b/model.cpp
new file mode 100644
index 0000000..9831138
--- /dev/null
+++ b/model.cpp
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the Graphics Dojo project on Trolltech Labs.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://www.trolltech.com/products/qt/opensource.html
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://www.trolltech.com/products/qt/licensing.html or contact the
+** sales department at sales@trolltech.com.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#include "model.h"
+
+#include <QFile>
+#include <QTextStream>
+#include <QVarLengthArray>
+
+#include <QtOpenGL>
+
+Model::Model(const QString &filePath)
+ : m_fileName(QFileInfo(filePath).fileName())
+{
+ QFile file(filePath);
+ if (!file.open(QIODevice::ReadOnly))
+ return;
+
+ Point3d boundsMin( 1e9, 1e9, 1e9);
+ Point3d boundsMax(-1e9,-1e9,-1e9);
+
+ QTextStream in(&file);
+ while (!in.atEnd()) {
+ QString input = in.readLine();
+ if (input.isEmpty() || input[0] == '#')
+ continue;
+
+ QTextStream ts(&input);
+ QString id;
+ ts >> id;
+ if (id == "v") {
+ Point3d p;
+ for (int i = 0; i < 3; ++i) {
+ ts >> p[i];
+ boundsMin[i] = qMin(boundsMin[i], p[i]);
+ boundsMax[i] = qMax(boundsMax[i], p[i]);
+ }
+ m_points << p;
+ } else if (id == "f" || id == "fo") {
+ QVarLengthArray<int, 4> p;
+
+ while (!ts.atEnd()) {
+ QString vertex;
+ ts >> vertex;
+ const int vertexIndex = vertex.split('/').value(0).toInt();
+ if (vertexIndex)
+ p.append(vertexIndex > 0 ? vertexIndex - 1 : m_points.size() + vertexIndex);
+ }
+
+ for (int i = 0; i < p.size(); ++i) {
+ const int edgeA = p[i];
+ const int edgeB = p[(i + 1) % p.size()];
+
+ if (edgeA < edgeB)
+ m_edgeIndices << edgeA << edgeB;
+ }
+
+ for (int i = 0; i < 3; ++i)
+ m_pointIndices << p[i];
+
+ if (p.size() == 4)
+ for (int i = 0; i < 3; ++i)
+ m_pointIndices << p[(i + 2) % 4];
+ }
+ }
+
+ const Point3d bounds = boundsMax - boundsMin;
+ const qreal scale = 1 / qMax(bounds.x / 1, qMax(bounds.y, bounds.z / 1));
+ for (int i = 0; i < m_points.size(); ++i)
+ m_points[i] = (m_points[i] - (boundsMin + bounds * 0.5)) * scale;
+
+ m_size = bounds * scale;
+
+ m_normals.resize(m_points.size());
+ for (int i = 0; i < m_pointIndices.size(); i += 3) {
+ const Point3d a = m_points.at(m_pointIndices.at(i));
+ const Point3d b = m_points.at(m_pointIndices.at(i+1));
+ const Point3d c = m_points.at(m_pointIndices.at(i+2));
+
+ const Point3d normal = cross(b - a, c - a).normalize();
+
+ for (int j = 0; j < 3; ++j)
+ m_normals[m_pointIndices.at(i + j)] += normal;
+ }
+
+ for (int i = 0; i < m_normals.size(); ++i)
+ m_normals[i] = m_normals[i].normalize();
+}
+
+Point3d Model::size() const
+{
+ return m_size;
+}
+
+void Model::render(bool wireframe, bool normals) const
+{
+ glEnable(GL_DEPTH_TEST);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glDepthFunc(GL_GEQUAL);
+ glDepthMask(true);
+ glDisable(GL_TEXTURE_1D);
+ glDisable(GL_TEXTURE_2D);
+ if (wireframe) {
+ glVertexPointer(3, GL_FLOAT, 0, (float *)m_points.data());
+ glDrawElements(GL_LINES, m_edgeIndices.size(), GL_UNSIGNED_INT, m_edgeIndices.data());
+ } else {
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_COLOR_MATERIAL);
+ glShadeModel(GL_SMOOTH);
+
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 0, (float *)m_points.data());
+ glNormalPointer(GL_FLOAT, 0, (float *)m_normals.data());
+ glDrawElements(GL_TRIANGLES, m_pointIndices.size(), GL_UNSIGNED_INT, m_pointIndices.data());
+
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisable(GL_COLOR_MATERIAL);
+ glDisable(GL_LIGHT0);
+ glDisable(GL_LIGHTING);
+ }
+
+ if (normals) {
+ QVector<Point3d> normals;
+ for (int i = 0; i < m_normals.size(); ++i)
+ normals << m_points.at(i) << (m_points.at(i) + m_normals.at(i) * 0.02f);
+ glVertexPointer(3, GL_FLOAT, 0, (float *)normals.data());
+ glDrawArrays(GL_LINES, 0, normals.size());
+ }
+ glDisableClientState(GL_VERTEX_ARRAY);
+ glDisable(GL_DEPTH_TEST);
+}
+
+void Model::render(QPainter *painter, const Matrix4x4 &matrix, bool normals) const
+{
+ QVector<QLineF> lines;
+ for (int i = 0; i < m_edgeIndices.size(); i += 2)
+ lines << QLineF((matrix * m_points.at(m_edgeIndices.at(i))).toQPoint(),
+ (matrix * m_points.at(m_edgeIndices.at(i+1))).toQPoint());
+
+ if (normals) {
+ for (int i = 0; i < m_normals.size(); ++i)
+ lines << QLineF((matrix * m_points.at(i)).toQPoint(),
+ (matrix * (m_points.at(i) + m_normals.at(i) * 0.02f)).toQPoint());
+ }
+
+ painter->drawLines(lines);
+}
diff --git a/model.h b/model.h
new file mode 100644
index 0000000..e6f2a20
--- /dev/null
+++ b/model.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the Graphics Dojo project on Trolltech Labs.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://www.trolltech.com/products/qt/opensource.html
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://www.trolltech.com/products/qt/licensing.html or contact the
+** sales department at sales@trolltech.com.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#ifndef MODEL_H
+#define MODEL_H
+
+#include <QPainter>
+#include <QString>
+#include <QVector>
+
+#include <math.h>
+
+#include "point3d.h"
+#include "matrix4x4.h"
+
+class Model
+{
+public:
+ Model() {}
+ Model(const QString &filePath);
+
+ void render(bool wireframe = false, bool normals = false) const;
+ void render(QPainter *painter, const Matrix4x4 &matrix, bool normals = false) const;
+
+ QString fileName() const { return m_fileName; }
+ int faces() const { return m_pointIndices.size() / 3; }
+ int edges() const { return m_edgeIndices.size() / 2; }
+ int points() const { return m_points.size(); }
+
+ Point3d size() const;
+
+private:
+ QString m_fileName;
+ QVector<Point3d> m_points;
+ QVector<Point3d> m_normals;
+ QVector<int> m_edgeIndices;
+ QVector<int> m_pointIndices;
+ Point3d m_size;
+};
+
+#endif
diff --git a/modelitem.cpp b/modelitem.cpp
new file mode 100644
index 0000000..7f081e4
--- /dev/null
+++ b/modelitem.cpp
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the Graphics Dojo project on Trolltech Labs.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://www.trolltech.com/products/qt/opensource.html
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://www.trolltech.com/products/qt/licensing.html or contact the
+** sales department at sales@trolltech.com.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#include "modelitem.h"
+#include "model.h"
+
+#include <QtGui>
+#include <QtOpenGL>
+
+#include "mazescene.h"
+
+#ifndef GL_MULTISAMPLE
+#define GL_MULTISAMPLE 0x809D
+#endif
+
+void ModelItem::updateTransform(const Camera &camera, qreal time)
+{
+ ProjectedItem::updateTransform(camera, time);
+
+ setTransform(QTransform());
+ m_matrix = Matrix4x4::fromTranslation(3, 0, 7) * camera.matrix(time);
+}
+
+QRectF ModelItem::boundingRect() const
+{
+ return scene()->sceneRect();
+}
+
+void ModelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+{
+ if (!m_model)
+ return;
+
+ Matrix4x4 projectionMatrix = Matrix4x4::fromProjection(1);
+ projectionMatrix *= Matrix4x4::fromQTransform(painter->transform());
+
+ Matrix4x4 modelMatrix;
+ const int delta = m_time.elapsed() - m_lastTime;
+ m_rotation += m_angularMomentum * (delta / 1000.0);
+ m_lastTime += delta;
+
+ Point3d size = m_model->size();
+ float extent = qSqrt(2.0);
+ float scale = 1 / qMax(size.y, qMax(size.x / extent, size.z / extent));
+ modelMatrix *= Matrix4x4::fromScale(scale, -scale, scale);
+
+ modelMatrix *= Matrix4x4::fromRotation(m_rotation.z, Qt::ZAxis);
+ modelMatrix *= Matrix4x4::fromRotation(m_rotation.y, Qt::YAxis);
+ modelMatrix *= Matrix4x4::fromRotation(m_rotation.x, Qt::XAxis);
+
+ ProjectedItem::update();
+
+ if (painter->paintEngine()->type() != QPaintEngine::OpenGL) {
+ m_wireframe->setEnabled(false);
+ m_wireframe->setChecked(false);
+ m_wireframeEnabled = false;
+ painter->setTransform(QTransform());
+ painter->setPen(m_modelColor);
+ m_model->render(painter, modelMatrix * m_matrix * projectionMatrix, m_normalsEnabled);
+ return;
+ }
+
+ m_wireframe->setEnabled(true);
+
+ glClearDepth(0);
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho(0, painter->device()->width(), painter->device()->height(), 0, -1, 1);
+ glMultMatrixf(projectionMatrix.data());
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadMatrixf(m_matrix.data());
+
+ const float ambient[] = { 0.1, 0.1, 0.1, 1 };
+ const float pos[] = { 50, -500, 200 };
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT0, GL_POSITION, pos);
+
+ glMultMatrixf(modelMatrix.data());
+
+ glColor4f(m_modelColor.redF(), m_modelColor.greenF(), m_modelColor.blueF(), 1.0f);
+
+ glEnable(GL_MULTISAMPLE);
+ m_model->render(m_wireframeEnabled, m_normalsEnabled);
+ glDisable(GL_MULTISAMPLE);
+
+ glPopMatrix();
+
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+}
+
+
+ModelItem::ModelItem()
+ : ProjectedItem(QRectF(), false)
+ , m_wireframeEnabled(false)
+ , m_normalsEnabled(false)
+ , m_modelColor(153, 255, 0)
+ , m_model(0)
+ , m_lastTime(0)
+ , m_distance(1.4f)
+ , m_angularMomentum(0, 40, 0)
+{
+ QPointF pos(3, 7);
+ setPosition(pos, pos);
+ setLayout(new QVBoxLayout);
+
+ m_modelButton = new QPushButton(tr("Load model"));
+ connect(m_modelButton, SIGNAL(clicked()), this, SLOT(loadModel()));
+#ifndef QT_NO_CONCURRENT
+ connect(&m_modelLoader, SIGNAL(finished()), this, SLOT(modelLoaded()));
+#endif
+ layout()->addWidget(m_modelButton);
+
+ m_wireframe = new QCheckBox(tr("Render as wireframe"));
+ connect(m_wireframe, SIGNAL(toggled(bool)), this, SLOT(enableWireframe(bool)));
+ layout()->addWidget(m_wireframe);
+
+ QCheckBox *normals = new QCheckBox(tr("Display normals vectors"));
+ connect(normals, SIGNAL(toggled(bool)), this, SLOT(enableNormals(bool)));
+ layout()->addWidget(normals);
+
+ QPushButton *colorButton = new QPushButton(tr("Choose model color"));
+ connect(colorButton, SIGNAL(clicked()), this, SLOT(setModelColor()));
+ layout()->addWidget(colorButton);
+
+ loadModel(QLatin1String("qt.obj"));
+ m_time.start();
+}
+
+static Model *loadModel(const QString &filePath)
+{
+ return new Model(filePath);
+}
+
+void ModelItem::loadModel()
+{
+ loadModel(QFileDialog::getOpenFileName(0, tr("Choose model"), QString(), QLatin1String("*.obj")));
+}
+
+void ModelItem::loadModel(const QString &filePath)
+{
+ if (filePath.isEmpty())
+ return;
+
+ m_modelButton->setEnabled(false);
+ QApplication::setOverrideCursor(Qt::BusyCursor);
+#ifndef QT_NO_CONCURRENT
+ m_modelLoader.setFuture(QtConcurrent::run(::loadModel, filePath));
+#else
+ setModel(::loadModel(filePath));
+ modelLoaded();
+#endif
+}
+
+void ModelItem::modelLoaded()
+{
+#ifndef QT_NO_CONCURRENT
+ setModel(m_modelLoader.result());
+#endif
+ m_modelButton->setEnabled(true);
+ QApplication::restoreOverrideCursor();
+}
+
+void ModelItem::setModel(Model *model)
+{
+ delete m_model;
+ m_model = model;
+
+ ProjectedItem::update();
+}
+
+void ModelItem::enableWireframe(bool enabled)
+{
+ m_wireframeEnabled = enabled;
+ ProjectedItem::update();
+}
+
+void ModelItem::enableNormals(bool enabled)
+{
+ m_normalsEnabled = enabled;
+ ProjectedItem::update();
+}
+
+void ModelItem::setModelColor()
+{
+ const QColor color = QColorDialog::getColor(m_modelColor);
+ if (color.isValid()) {
+ m_modelColor = color;
+ ProjectedItem::update();
+ }
+}
diff --git a/modelitem.h b/modelitem.h
new file mode 100644
index 0000000..bd329ad
--- /dev/null
+++ b/modelitem.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the Graphics Dojo project on Trolltech Labs.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://www.trolltech.com/products/qt/opensource.html
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://www.trolltech.com/products/qt/licensing.html or contact the
+** sales department at sales@trolltech.com.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#ifndef OPENGLSCENE_H
+#define OPENGLSCENE_H
+
+#include "point3d.h"
+
+#include <QCheckBox>
+#include <QWidget>
+#include <QTime>
+
+#ifndef QT_NO_CONCURRENT
+#include <QFutureWatcher>
+#endif
+
+#include "mazescene.h"
+
+class Model;
+
+class ModelItem : public QWidget, public ProjectedItem
+{
+ Q_OBJECT
+
+public:
+ ModelItem();
+
+ void updateTransform(const Camera &camera, qreal time);
+
+ QRectF boundingRect() const;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+public slots:
+ void enableWireframe(bool enabled);
+ void enableNormals(bool enabled);
+ void setModelColor();
+ void loadModel();
+ void loadModel(const QString &filePath);
+ void modelLoaded();
+
+private:
+ void setModel(Model *model);
+
+ bool m_wireframeEnabled;
+ bool m_normalsEnabled;
+ bool m_useQPainter;
+
+ QColor m_modelColor;
+
+ Model *m_model;
+
+ QTime m_time;
+ int m_lastTime;
+ int m_mouseEventTime;
+
+ float m_distance;
+ Point3d m_rotation;
+ Point3d m_angularMomentum;
+ Point3d m_accumulatedMomentum;
+
+ QWidget *m_modelButton;
+ QCheckBox *m_wireframe;
+
+#ifndef QT_NO_CONCURRENT
+ QFutureWatcher<Model *> m_modelLoader;
+#endif
+ Matrix4x4 m_matrix;
+};
+
+#endif
diff --git a/point3d.h b/point3d.h
new file mode 100644
index 0000000..8b79ba4
--- /dev/null
+++ b/point3d.h
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the Graphics Dojo project on Trolltech Labs.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://www.trolltech.com/products/qt/opensource.html
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://www.trolltech.com/products/qt/licensing.html or contact the
+** sales department at sales@trolltech.com.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#ifndef POINT3D_H
+#define POINT3D_H
+
+#include "math.h"
+
+#include <qglobal.h>
+#include <qpoint.h>
+
+struct Point3d
+{
+ float x, y, z;
+
+ Point3d()
+ : x(0)
+ , y(0)
+ , z(0)
+ {
+ }
+
+ Point3d(float x_, float y_, float z_)
+ : x(x_)
+ , y(y_)
+ , z(z_)
+ {
+ }
+
+ Point3d operator+(const Point3d &p) const
+ {
+ return Point3d(*this) += p;
+ }
+
+ Point3d operator-(const Point3d &p) const
+ {
+ return Point3d(*this) -= p;
+ }
+
+ Point3d operator*(float f) const
+ {
+ return Point3d(*this) *= f;
+ }
+
+
+ Point3d &operator+=(const Point3d &p)
+ {
+ x += p.x;
+ y += p.y;
+ z += p.z;
+ return *this;
+ }
+
+ Point3d &operator-=(const Point3d &p)
+ {
+ x -= p.x;
+ y -= p.y;
+ z -= p.z;
+ return *this;
+ }
+
+ Point3d &operator*=(float f)
+ {
+ x *= f;
+ y *= f;
+ z *= f;
+ return *this;
+ }
+
+ Point3d normalize() const
+ {
+ float r = 1. / sqrt(x * x + y * y + z * z);
+ return Point3d(x * r, y * r, z * r);
+ }
+
+ float &operator[](unsigned int index) {
+ Q_ASSERT(index < 3);
+ return (&x)[index];
+ }
+
+ const float &operator[](unsigned int index) const {
+ Q_ASSERT(index < 3);
+ return (&x)[index];
+ }
+
+ QPointF toQPoint() const {
+ return QPointF(x, y);
+ }
+};
+
+inline float dot(const Point3d &a, const Point3d &b)
+{
+ return a.x * b.x + a.y * b.y + a.z * b.z;
+}
+
+inline Point3d cross(const Point3d &a, const Point3d &b)
+{
+ return Point3d(a.y * b.z - a.z * b.y,
+ a.z * b.x - a.x * b.z,
+ a.x * b.y - a.y * b.x);
+}
+
+#endif
diff --git a/qt.obj b/qt.obj
new file mode 100644
index 0000000..d78cd55
--- /dev/null
+++ b/qt.obj
@@ -0,0 +1,2456 @@
+v -0.140000 -0.060000 -0.050000
+v -0.060000 -0.140000 -0.050000
+v 0.140000 0.060000 -0.050000
+v 0.060000 0.140000 -0.050000
+v 0.060000 0.140000 0.050000
+v 0.140000 0.060000 0.050000
+v -0.060000 -0.140000 0.050000
+v -0.140000 -0.060000 0.050000
+v 0.000000 -0.080000 -0.050000
+v 0.220000 -0.300000 -0.050000
+v 0.300000 -0.220000 -0.050000
+v 0.080000 -0.000000 -0.050000
+v 0.080000 -0.000000 0.050000
+v 0.300000 -0.220000 0.050000
+v 0.220000 -0.300000 0.050000
+v 0.000000 -0.080000 0.050000
+v 0.009423 -0.299852 -0.050000
+v 0.006282 -0.199901 -0.050000
+v 0.000000 -0.200000 -0.050000
+v 0.000000 -0.300000 -0.050000
+v 0.000000 -0.300000 0.050000
+v 0.000000 -0.200000 0.050000
+v 0.006282 -0.199901 0.050000
+v 0.009423 -0.299852 0.050000
+v 0.018837 -0.299408 -0.050000
+v 0.012558 -0.199605 -0.050000
+v 0.012558 -0.199605 0.050000
+v 0.018837 -0.299408 0.050000
+v 0.028232 -0.298669 -0.050000
+v 0.018822 -0.199112 -0.050000
+v 0.018822 -0.199112 0.050000
+v 0.028232 -0.298669 0.050000
+v 0.037600 -0.297634 -0.050000
+v 0.025067 -0.198423 -0.050000
+v 0.025067 -0.198423 0.050000
+v 0.037600 -0.297634 0.050000
+v 0.046930 -0.296307 -0.050000
+v 0.031287 -0.197538 -0.050000
+v 0.031287 -0.197538 0.050000
+v 0.046930 -0.296307 0.050000
+v 0.056214 -0.294686 -0.050000
+v 0.037476 -0.196457 -0.050000
+v 0.037476 -0.196457 0.050000
+v 0.056214 -0.294686 0.050000
+v 0.065443 -0.292775 -0.050000
+v 0.043629 -0.195183 -0.050000
+v 0.043629 -0.195183 0.050000
+v 0.065443 -0.292775 0.050000
+v 0.074607 -0.290575 -0.050000
+v 0.049738 -0.193717 -0.050000
+v 0.049738 -0.193717 0.050000
+v 0.074607 -0.290575 0.050000
+v 0.083697 -0.288088 -0.050000
+v 0.055798 -0.192059 -0.050000
+v 0.055798 -0.192059 0.050000
+v 0.083697 -0.288088 0.050000
+v 0.092705 -0.285317 -0.050000
+v 0.061803 -0.190211 -0.050000
+v 0.061803 -0.190211 0.050000
+v 0.092705 -0.285317 0.050000
+v 0.101621 -0.282264 -0.050000
+v 0.067748 -0.188176 -0.050000
+v 0.067748 -0.188176 0.050000
+v 0.101621 -0.282264 0.050000
+v 0.110437 -0.278933 -0.050000
+v 0.073625 -0.185955 -0.050000
+v 0.073625 -0.185955 0.050000
+v 0.110437 -0.278933 0.050000
+v 0.119144 -0.275326 -0.050000
+v 0.079430 -0.183551 -0.050000
+v 0.079430 -0.183551 0.050000
+v 0.119144 -0.275326 0.050000
+v 0.127734 -0.271448 -0.050000
+v 0.085156 -0.180965 -0.050000
+v 0.085156 -0.180965 0.050000
+v 0.127734 -0.271448 0.050000
+v 0.136197 -0.267302 -0.050000
+v 0.090798 -0.178201 -0.050000
+v 0.090798 -0.178201 0.050000
+v 0.136197 -0.267302 0.050000
+v 0.144526 -0.262892 -0.050000
+v 0.096351 -0.175261 -0.050000
+v 0.096351 -0.175261 0.050000
+v 0.144526 -0.262892 0.050000
+v 0.152712 -0.258223 -0.050000
+v 0.101808 -0.172148 -0.050000
+v 0.101808 -0.172148 0.050000
+v 0.152712 -0.258223 0.050000
+v 0.160748 -0.253298 -0.050000
+v 0.107165 -0.168866 -0.050000
+v 0.107165 -0.168866 0.050000
+v 0.160748 -0.253298 0.050000
+v 0.168625 -0.248124 -0.050000
+v 0.112417 -0.165416 -0.050000
+v 0.112417 -0.165416 0.050000
+v 0.168625 -0.248124 0.050000
+v 0.176336 -0.242705 -0.050000
+v 0.117557 -0.161803 -0.050000
+v 0.117557 -0.161803 0.050000
+v 0.176336 -0.242705 0.050000
+v 0.183872 -0.237047 -0.050000
+v 0.122581 -0.158031 -0.050000
+v 0.122581 -0.158031 0.050000
+v 0.183872 -0.237047 0.050000
+v 0.191227 -0.231154 -0.050000
+v 0.127485 -0.154103 -0.050000
+v 0.127485 -0.154103 0.050000
+v 0.191227 -0.231154 0.050000
+v 0.198394 -0.225033 -0.050000
+v 0.132262 -0.150022 -0.050000
+v 0.132262 -0.150022 0.050000
+v 0.198394 -0.225033 0.050000
+v 0.205364 -0.218691 -0.050000
+v 0.136909 -0.145794 -0.050000
+v 0.136909 -0.145794 0.050000
+v 0.205364 -0.218691 0.050000
+v 0.212132 -0.212132 -0.050000
+v 0.141421 -0.141421 -0.050000
+v 0.141421 -0.141421 0.050000
+v 0.212132 -0.212132 0.050000
+v 0.218691 -0.205364 -0.050000
+v 0.145794 -0.136909 -0.050000
+v 0.145794 -0.136909 0.050000
+v 0.218691 -0.205364 0.050000
+v 0.225033 -0.198394 -0.050000
+v 0.150022 -0.132262 -0.050000
+v 0.150022 -0.132262 0.050000
+v 0.225033 -0.198394 0.050000
+v 0.231154 -0.191227 -0.050000
+v 0.154103 -0.127485 -0.050000
+v 0.154103 -0.127485 0.050000
+v 0.231154 -0.191227 0.050000
+v 0.237047 -0.183872 -0.050000
+v 0.158031 -0.122581 -0.050000
+v 0.158031 -0.122581 0.050000
+v 0.237047 -0.183872 0.050000
+v 0.242705 -0.176336 -0.050000
+v 0.161803 -0.117557 -0.050000
+v 0.161803 -0.117557 0.050000
+v 0.242705 -0.176336 0.050000
+v 0.248124 -0.168625 -0.050000
+v 0.165416 -0.112417 -0.050000
+v 0.165416 -0.112417 0.050000
+v 0.248124 -0.168625 0.050000
+v 0.253298 -0.160748 -0.050000
+v 0.168866 -0.107165 -0.050000
+v 0.168866 -0.107165 0.050000
+v 0.253298 -0.160748 0.050000
+v 0.258223 -0.152712 -0.050000
+v 0.172148 -0.101808 -0.050000
+v 0.172148 -0.101808 0.050000
+v 0.258223 -0.152712 0.050000
+v 0.262892 -0.144526 -0.050000
+v 0.175261 -0.096351 -0.050000
+v 0.175261 -0.096351 0.050000
+v 0.262892 -0.144526 0.050000
+v 0.267302 -0.136197 -0.050000
+v 0.178201 -0.090798 -0.050000
+v 0.178201 -0.090798 0.050000
+v 0.267302 -0.136197 0.050000
+v 0.271448 -0.127734 -0.050000
+v 0.180965 -0.085156 -0.050000
+v 0.180965 -0.085156 0.050000
+v 0.271448 -0.127734 0.050000
+v 0.275326 -0.119144 -0.050000
+v 0.183551 -0.079430 -0.050000
+v 0.183551 -0.079430 0.050000
+v 0.275326 -0.119144 0.050000
+v 0.278933 -0.110437 -0.050000
+v 0.185955 -0.073625 -0.050000
+v 0.185955 -0.073625 0.050000
+v 0.278933 -0.110437 0.050000
+v 0.282264 -0.101621 -0.050000
+v 0.188176 -0.067748 -0.050000
+v 0.188176 -0.067748 0.050000
+v 0.282264 -0.101621 0.050000
+v 0.285317 -0.092705 -0.050000
+v 0.190211 -0.061803 -0.050000
+v 0.190211 -0.061803 0.050000
+v 0.285317 -0.092705 0.050000
+v 0.288088 -0.083697 -0.050000
+v 0.192059 -0.055798 -0.050000
+v 0.192059 -0.055798 0.050000
+v 0.288088 -0.083697 0.050000
+v 0.290575 -0.074607 -0.050000
+v 0.193717 -0.049738 -0.050000
+v 0.193717 -0.049738 0.050000
+v 0.290575 -0.074607 0.050000
+v 0.292775 -0.065443 -0.050000
+v 0.195183 -0.043629 -0.050000
+v 0.195183 -0.043629 0.050000
+v 0.292775 -0.065443 0.050000
+v 0.294686 -0.056214 -0.050000
+v 0.196457 -0.037476 -0.050000
+v 0.196457 -0.037476 0.050000
+v 0.294686 -0.056214 0.050000
+v 0.296307 -0.046930 -0.050000
+v 0.197538 -0.031287 -0.050000
+v 0.197538 -0.031287 0.050000
+v 0.296307 -0.046930 0.050000
+v 0.297634 -0.037600 -0.050000
+v 0.198423 -0.025067 -0.050000
+v 0.198423 -0.025067 0.050000
+v 0.297634 -0.037600 0.050000
+v 0.298669 -0.028232 -0.050000
+v 0.199112 -0.018822 -0.050000
+v 0.199112 -0.018822 0.050000
+v 0.298669 -0.028232 0.050000
+v 0.299408 -0.018837 -0.050000
+v 0.199605 -0.012558 -0.050000
+v 0.199605 -0.012558 0.050000
+v 0.299408 -0.018837 0.050000
+v 0.299852 -0.009423 -0.050000
+v 0.199901 -0.006282 -0.050000
+v 0.199901 -0.006282 0.050000
+v 0.299852 -0.009423 0.050000
+v 0.300000 -0.000000 -0.050000
+v 0.200000 -0.000000 -0.050000
+v 0.200000 -0.000000 0.050000
+v 0.300000 -0.000000 0.050000
+v 0.299852 0.009423 -0.050000
+v 0.199901 0.006282 -0.050000
+v 0.199901 0.006282 0.050000
+v 0.299852 0.009423 0.050000
+v 0.299408 0.018837 -0.050000
+v 0.199605 0.012558 -0.050000
+v 0.199605 0.012558 0.050000
+v 0.299408 0.018837 0.050000
+v 0.298669 0.028232 -0.050000
+v 0.199112 0.018822 -0.050000
+v 0.199112 0.018822 0.050000
+v 0.298669 0.028232 0.050000
+v 0.297634 0.037600 -0.050000
+v 0.198423 0.025067 -0.050000
+v 0.198423 0.025067 0.050000
+v 0.297634 0.037600 0.050000
+v 0.296307 0.046930 -0.050000
+v 0.197538 0.031287 -0.050000
+v 0.197538 0.031287 0.050000
+v 0.296307 0.046930 0.050000
+v 0.294686 0.056214 -0.050000
+v 0.196457 0.037476 -0.050000
+v 0.196457 0.037476 0.050000
+v 0.294686 0.056214 0.050000
+v 0.292775 0.065443 -0.050000
+v 0.195183 0.043629 -0.050000
+v 0.195183 0.043629 0.050000
+v 0.292775 0.065443 0.050000
+v 0.290575 0.074607 -0.050000
+v 0.193717 0.049738 -0.050000
+v 0.193717 0.049738 0.050000
+v 0.290575 0.074607 0.050000
+v 0.288088 0.083697 -0.050000
+v 0.192059 0.055798 -0.050000
+v 0.192059 0.055798 0.050000
+v 0.288088 0.083697 0.050000
+v 0.285317 0.092705 -0.050000
+v 0.190211 0.061803 -0.050000
+v 0.190211 0.061803 0.050000
+v 0.285317 0.092705 0.050000
+v 0.282264 0.101621 -0.050000
+v 0.188176 0.067748 -0.050000
+v 0.188176 0.067748 0.050000
+v 0.282264 0.101621 0.050000
+v 0.278933 0.110437 -0.050000
+v 0.185955 0.073625 -0.050000
+v 0.185955 0.073625 0.050000
+v 0.278933 0.110437 0.050000
+v 0.275326 0.119144 -0.050000
+v 0.183551 0.079430 -0.050000
+v 0.183551 0.079430 0.050000
+v 0.275326 0.119144 0.050000
+v 0.271448 0.127734 -0.050000
+v 0.180965 0.085156 -0.050000
+v 0.180965 0.085156 0.050000
+v 0.271448 0.127734 0.050000
+v 0.267302 0.136197 -0.050000
+v 0.178201 0.090798 -0.050000
+v 0.178201 0.090798 0.050000
+v 0.267302 0.136197 0.050000
+v 0.262892 0.144526 -0.050000
+v 0.175261 0.096351 -0.050000
+v 0.175261 0.096351 0.050000
+v 0.262892 0.144526 0.050000
+v 0.258223 0.152712 -0.050000
+v 0.172148 0.101808 -0.050000
+v 0.172148 0.101808 0.050000
+v 0.258223 0.152712 0.050000
+v 0.253298 0.160748 -0.050000
+v 0.168866 0.107165 -0.050000
+v 0.168866 0.107165 0.050000
+v 0.253298 0.160748 0.050000
+v 0.248124 0.168625 -0.050000
+v 0.165416 0.112417 -0.050000
+v 0.165416 0.112417 0.050000
+v 0.248124 0.168625 0.050000
+v 0.242705 0.176336 -0.050000
+v 0.161803 0.117557 -0.050000
+v 0.161803 0.117557 0.050000
+v 0.242705 0.176336 0.050000
+v 0.237047 0.183872 -0.050000
+v 0.158031 0.122581 -0.050000
+v 0.158031 0.122581 0.050000
+v 0.237047 0.183872 0.050000
+v 0.231154 0.191227 -0.050000
+v 0.154103 0.127485 -0.050000
+v 0.154103 0.127485 0.050000
+v 0.231154 0.191227 0.050000
+v 0.225033 0.198394 -0.050000
+v 0.150022 0.132262 -0.050000
+v 0.150022 0.132262 0.050000
+v 0.225033 0.198394 0.050000
+v 0.218691 0.205364 -0.050000
+v 0.145794 0.136909 -0.050000
+v 0.145794 0.136909 0.050000
+v 0.218691 0.205364 0.050000
+v 0.212132 0.212132 -0.050000
+v 0.141421 0.141421 -0.050000
+v 0.141421 0.141421 0.050000
+v 0.212132 0.212132 0.050000
+v 0.205364 0.218691 -0.050000
+v 0.136909 0.145794 -0.050000
+v 0.136909 0.145794 0.050000
+v 0.205364 0.218691 0.050000
+v 0.198394 0.225033 -0.050000
+v 0.132262 0.150022 -0.050000
+v 0.132262 0.150022 0.050000
+v 0.198394 0.225033 0.050000
+v 0.191227 0.231154 -0.050000
+v 0.127485 0.154103 -0.050000
+v 0.127485 0.154103 0.050000
+v 0.191227 0.231154 0.050000
+v 0.183872 0.237047 -0.050000
+v 0.122581 0.158031 -0.050000
+v 0.122581 0.158031 0.050000
+v 0.183872 0.237047 0.050000
+v 0.176336 0.242705 -0.050000
+v 0.117557 0.161803 -0.050000
+v 0.117557 0.161803 0.050000
+v 0.176336 0.242705 0.050000
+v 0.168625 0.248124 -0.050000
+v 0.112417 0.165416 -0.050000
+v 0.112417 0.165416 0.050000
+v 0.168625 0.248124 0.050000
+v 0.160748 0.253298 -0.050000
+v 0.107165 0.168866 -0.050000
+v 0.107165 0.168866 0.050000
+v 0.160748 0.253298 0.050000
+v 0.152712 0.258223 -0.050000
+v 0.101808 0.172148 -0.050000
+v 0.101808 0.172148 0.050000
+v 0.152712 0.258223 0.050000
+v 0.144526 0.262892 -0.050000
+v 0.096351 0.175261 -0.050000
+v 0.096351 0.175261 0.050000
+v 0.144526 0.262892 0.050000
+v 0.136197 0.267302 -0.050000
+v 0.090798 0.178201 -0.050000
+v 0.090798 0.178201 0.050000
+v 0.136197 0.267302 0.050000
+v 0.127734 0.271448 -0.050000
+v 0.085156 0.180965 -0.050000
+v 0.085156 0.180965 0.050000
+v 0.127734 0.271448 0.050000
+v 0.119144 0.275326 -0.050000
+v 0.079430 0.183551 -0.050000
+v 0.079430 0.183551 0.050000
+v 0.119144 0.275326 0.050000
+v 0.110437 0.278933 -0.050000
+v 0.073625 0.185955 -0.050000
+v 0.073625 0.185955 0.050000
+v 0.110437 0.278933 0.050000
+v 0.101621 0.282264 -0.050000
+v 0.067748 0.188176 -0.050000
+v 0.067748 0.188176 0.050000
+v 0.101621 0.282264 0.050000
+v 0.092705 0.285317 -0.050000
+v 0.061803 0.190211 -0.050000
+v 0.061803 0.190211 0.050000
+v 0.092705 0.285317 0.050000
+v 0.083697 0.288088 -0.050000
+v 0.055798 0.192059 -0.050000
+v 0.055798 0.192059 0.050000
+v 0.083697 0.288088 0.050000
+v 0.074607 0.290575 -0.050000
+v 0.049738 0.193717 -0.050000
+v 0.049738 0.193717 0.050000
+v 0.074607 0.290575 0.050000
+v 0.065443 0.292775 -0.050000
+v 0.043629 0.195183 -0.050000
+v 0.043629 0.195183 0.050000
+v 0.065443 0.292775 0.050000
+v 0.056214 0.294686 -0.050000
+v 0.037476 0.196457 -0.050000
+v 0.037476 0.196457 0.050000
+v 0.056214 0.294686 0.050000
+v 0.046930 0.296307 -0.050000
+v 0.031287 0.197538 -0.050000
+v 0.031287 0.197538 0.050000
+v 0.046930 0.296307 0.050000
+v 0.037600 0.297634 -0.050000
+v 0.025067 0.198423 -0.050000
+v 0.025067 0.198423 0.050000
+v 0.037600 0.297634 0.050000
+v 0.028232 0.298669 -0.050000
+v 0.018822 0.199112 -0.050000
+v 0.018822 0.199112 0.050000
+v 0.028232 0.298669 0.050000
+v 0.018837 0.299408 -0.050000
+v 0.012558 0.199605 -0.050000
+v 0.012558 0.199605 0.050000
+v 0.018837 0.299408 0.050000
+v 0.009423 0.299852 -0.050000
+v 0.006282 0.199901 -0.050000
+v 0.006282 0.199901 0.050000
+v 0.009423 0.299852 0.050000
+v 0.000000 0.300000 -0.050000
+v 0.000000 0.200000 -0.050000
+v 0.000000 0.200000 0.050000
+v 0.000000 0.300000 0.050000
+v -0.009423 0.299852 -0.050000
+v -0.006282 0.199901 -0.050000
+v -0.006282 0.199901 0.050000
+v -0.009423 0.299852 0.050000
+v -0.018837 0.299408 -0.050000
+v -0.012558 0.199605 -0.050000
+v -0.012558 0.199605 0.050000
+v -0.018837 0.299408 0.050000
+v -0.028232 0.298669 -0.050000
+v -0.018822 0.199112 -0.050000
+v -0.018822 0.199112 0.050000
+v -0.028232 0.298669 0.050000
+v -0.037600 0.297634 -0.050000
+v -0.025067 0.198423 -0.050000
+v -0.025067 0.198423 0.050000
+v -0.037600 0.297634 0.050000
+v -0.046930 0.296307 -0.050000
+v -0.031287 0.197538 -0.050000
+v -0.031287 0.197538 0.050000
+v -0.046930 0.296307 0.050000
+v -0.056214 0.294686 -0.050000
+v -0.037476 0.196457 -0.050000
+v -0.037476 0.196457 0.050000
+v -0.056214 0.294686 0.050000
+v -0.065443 0.292775 -0.050000
+v -0.043629 0.195183 -0.050000
+v -0.043629 0.195183 0.050000
+v -0.065443 0.292775 0.050000
+v -0.074607 0.290575 -0.050000
+v -0.049738 0.193717 -0.050000
+v -0.049738 0.193717 0.050000
+v -0.074607 0.290575 0.050000
+v -0.083697 0.288088 -0.050000
+v -0.055798 0.192059 -0.050000
+v -0.055798 0.192059 0.050000
+v -0.083697 0.288088 0.050000
+v -0.092705 0.285317 -0.050000
+v -0.061803 0.190211 -0.050000
+v -0.061803 0.190211 0.050000
+v -0.092705 0.285317 0.050000
+v -0.101621 0.282264 -0.050000
+v -0.067748 0.188176 -0.050000
+v -0.067748 0.188176 0.050000
+v -0.101621 0.282264 0.050000
+v -0.110437 0.278933 -0.050000
+v -0.073625 0.185955 -0.050000
+v -0.073625 0.185955 0.050000
+v -0.110437 0.278933 0.050000
+v -0.119144 0.275326 -0.050000
+v -0.079430 0.183551 -0.050000
+v -0.079430 0.183551 0.050000
+v -0.119144 0.275326 0.050000
+v -0.127734 0.271448 -0.050000
+v -0.085156 0.180965 -0.050000
+v -0.085156 0.180965 0.050000
+v -0.127734 0.271448 0.050000
+v -0.136197 0.267302 -0.050000
+v -0.090798 0.178201 -0.050000
+v -0.090798 0.178201 0.050000
+v -0.136197 0.267302 0.050000
+v -0.144526 0.262892 -0.050000
+v -0.096351 0.175261 -0.050000
+v -0.096351 0.175261 0.050000
+v -0.144526 0.262892 0.050000
+v -0.152712 0.258223 -0.050000
+v -0.101808 0.172148 -0.050000
+v -0.101808 0.172148 0.050000
+v -0.152712 0.258223 0.050000
+v -0.160748 0.253298 -0.050000
+v -0.107165 0.168866 -0.050000
+v -0.107165 0.168866 0.050000
+v -0.160748 0.253298 0.050000
+v -0.168625 0.248124 -0.050000
+v -0.112417 0.165416 -0.050000
+v -0.112417 0.165416 0.050000
+v -0.168625 0.248124 0.050000
+v -0.176336 0.242705 -0.050000
+v -0.117557 0.161803 -0.050000
+v -0.117557 0.161803 0.050000
+v -0.176336 0.242705 0.050000
+v -0.183872 0.237047 -0.050000
+v -0.122581 0.158031 -0.050000
+v -0.122581 0.158031 0.050000
+v -0.183872 0.237047 0.050000
+v -0.191227 0.231154 -0.050000
+v -0.127485 0.154103 -0.050000
+v -0.127485 0.154103 0.050000
+v -0.191227 0.231154 0.050000
+v -0.198394 0.225033 -0.050000
+v -0.132262 0.150022 -0.050000
+v -0.132262 0.150022 0.050000
+v -0.198394 0.225033 0.050000
+v -0.205364 0.218691 -0.050000
+v -0.136909 0.145794 -0.050000
+v -0.136909 0.145794 0.050000
+v -0.205364 0.218691 0.050000
+v -0.212132 0.212132 -0.050000
+v -0.141421 0.141421 -0.050000
+v -0.141421 0.141421 0.050000
+v -0.212132 0.212132 0.050000
+v -0.218691 0.205364 -0.050000
+v -0.145794 0.136909 -0.050000
+v -0.145794 0.136909 0.050000
+v -0.218691 0.205364 0.050000
+v -0.225033 0.198394 -0.050000
+v -0.150022 0.132262 -0.050000
+v -0.150022 0.132262 0.050000
+v -0.225033 0.198394 0.050000
+v -0.231154 0.191227 -0.050000
+v -0.154103 0.127485 -0.050000
+v -0.154103 0.127485 0.050000
+v -0.231154 0.191227 0.050000
+v -0.237047 0.183872 -0.050000
+v -0.158031 0.122581 -0.050000
+v -0.158031 0.122581 0.050000
+v -0.237047 0.183872 0.050000
+v -0.242705 0.176336 -0.050000
+v -0.161803 0.117557 -0.050000
+v -0.161803 0.117557 0.050000
+v -0.242705 0.176336 0.050000
+v -0.248124 0.168625 -0.050000
+v -0.165416 0.112417 -0.050000
+v -0.165416 0.112417 0.050000
+v -0.248124 0.168625 0.050000
+v -0.253298 0.160748 -0.050000
+v -0.168866 0.107165 -0.050000
+v -0.168866 0.107165 0.050000
+v -0.253298 0.160748 0.050000
+v -0.258223 0.152712 -0.050000
+v -0.172148 0.101808 -0.050000
+v -0.172148 0.101808 0.050000
+v -0.258223 0.152712 0.050000
+v -0.262892 0.144526 -0.050000
+v -0.175261 0.096351 -0.050000
+v -0.175261 0.096351 0.050000
+v -0.262892 0.144526 0.050000
+v -0.267302 0.136197 -0.050000
+v -0.178201 0.090798 -0.050000
+v -0.178201 0.090798 0.050000
+v -0.267302 0.136197 0.050000
+v -0.271448 0.127734 -0.050000
+v -0.180965 0.085156 -0.050000
+v -0.180965 0.085156 0.050000
+v -0.271448 0.127734 0.050000
+v -0.275326 0.119144 -0.050000
+v -0.183551 0.079430 -0.050000
+v -0.183551 0.079430 0.050000
+v -0.275326 0.119144 0.050000
+v -0.278933 0.110437 -0.050000
+v -0.185955 0.073625 -0.050000
+v -0.185955 0.073625 0.050000
+v -0.278933 0.110437 0.050000
+v -0.282264 0.101621 -0.050000
+v -0.188176 0.067748 -0.050000
+v -0.188176 0.067748 0.050000
+v -0.282264 0.101621 0.050000
+v -0.285317 0.092705 -0.050000
+v -0.190211 0.061803 -0.050000
+v -0.190211 0.061803 0.050000
+v -0.285317 0.092705 0.050000
+v -0.288088 0.083697 -0.050000
+v -0.192059 0.055798 -0.050000
+v -0.192059 0.055798 0.050000
+v -0.288088 0.083697 0.050000
+v -0.290575 0.074607 -0.050000
+v -0.193717 0.049738 -0.050000
+v -0.193717 0.049738 0.050000
+v -0.290575 0.074607 0.050000
+v -0.292775 0.065443 -0.050000
+v -0.195183 0.043629 -0.050000
+v -0.195183 0.043629 0.050000
+v -0.292775 0.065443 0.050000
+v -0.294686 0.056214 -0.050000
+v -0.196457 0.037476 -0.050000
+v -0.196457 0.037476 0.050000
+v -0.294686 0.056214 0.050000
+v -0.296307 0.046930 -0.050000
+v -0.197538 0.031287 -0.050000
+v -0.197538 0.031287 0.050000
+v -0.296307 0.046930 0.050000
+v -0.297634 0.037600 -0.050000
+v -0.198423 0.025067 -0.050000
+v -0.198423 0.025067 0.050000
+v -0.297634 0.037600 0.050000
+v -0.298669 0.028232 -0.050000
+v -0.199112 0.018822 -0.050000
+v -0.199112 0.018822 0.050000
+v -0.298669 0.028232 0.050000
+v -0.299408 0.018837 -0.050000
+v -0.199605 0.012558 -0.050000
+v -0.199605 0.012558 0.050000
+v -0.299408 0.018837 0.050000
+v -0.299852 0.009423 -0.050000
+v -0.199901 0.006282 -0.050000
+v -0.199901 0.006282 0.050000
+v -0.299852 0.009423 0.050000
+v -0.300000 0.000000 -0.050000
+v -0.200000 0.000000 -0.050000
+v -0.200000 0.000000 0.050000
+v -0.300000 0.000000 0.050000
+v -0.299852 -0.009423 -0.050000
+v -0.199901 -0.006282 -0.050000
+v -0.199901 -0.006282 0.050000
+v -0.299852 -0.009423 0.050000
+v -0.299408 -0.018837 -0.050000
+v -0.199605 -0.012558 -0.050000
+v -0.199605 -0.012558 0.050000
+v -0.299408 -0.018837 0.050000
+v -0.298669 -0.028232 -0.050000
+v -0.199112 -0.018822 -0.050000
+v -0.199112 -0.018822 0.050000
+v -0.298669 -0.028232 0.050000
+v -0.297634 -0.037600 -0.050000
+v -0.198423 -0.025067 -0.050000
+v -0.198423 -0.025067 0.050000
+v -0.297634 -0.037600 0.050000
+v -0.296307 -0.046930 -0.050000
+v -0.197538 -0.031287 -0.050000
+v -0.197538 -0.031287 0.050000
+v -0.296307 -0.046930 0.050000
+v -0.294686 -0.056214 -0.050000
+v -0.196457 -0.037476 -0.050000
+v -0.196457 -0.037476 0.050000
+v -0.294686 -0.056214 0.050000
+v -0.292775 -0.065443 -0.050000
+v -0.195183 -0.043629 -0.050000
+v -0.195183 -0.043629 0.050000
+v -0.292775 -0.065443 0.050000
+v -0.290575 -0.074607 -0.050000
+v -0.193717 -0.049738 -0.050000
+v -0.193717 -0.049738 0.050000
+v -0.290575 -0.074607 0.050000
+v -0.288088 -0.083697 -0.050000
+v -0.192059 -0.055798 -0.050000
+v -0.192059 -0.055798 0.050000
+v -0.288088 -0.083697 0.050000
+v -0.285317 -0.092705 -0.050000
+v -0.190211 -0.061803 -0.050000
+v -0.190211 -0.061803 0.050000
+v -0.285317 -0.092705 0.050000
+v -0.282264 -0.101621 -0.050000
+v -0.188176 -0.067748 -0.050000
+v -0.188176 -0.067748 0.050000
+v -0.282264 -0.101621 0.050000
+v -0.278933 -0.110437 -0.050000
+v -0.185955 -0.073625 -0.050000
+v -0.185955 -0.073625 0.050000
+v -0.278933 -0.110437 0.050000
+v -0.275326 -0.119144 -0.050000
+v -0.183551 -0.079430 -0.050000
+v -0.183551 -0.079430 0.050000
+v -0.275326 -0.119144 0.050000
+v -0.271448 -0.127734 -0.050000
+v -0.180965 -0.085156 -0.050000
+v -0.180965 -0.085156 0.050000
+v -0.271448 -0.127734 0.050000
+v -0.267302 -0.136197 -0.050000
+v -0.178201 -0.090798 -0.050000
+v -0.178201 -0.090798 0.050000
+v -0.267302 -0.136197 0.050000
+v -0.262892 -0.144526 -0.050000
+v -0.175261 -0.096351 -0.050000
+v -0.175261 -0.096351 0.050000
+v -0.262892 -0.144526 0.050000
+v -0.258223 -0.152712 -0.050000
+v -0.172148 -0.101808 -0.050000
+v -0.172148 -0.101808 0.050000
+v -0.258223 -0.152712 0.050000
+v -0.253298 -0.160748 -0.050000
+v -0.168866 -0.107165 -0.050000
+v -0.168866 -0.107165 0.050000
+v -0.253298 -0.160748 0.050000
+v -0.248124 -0.168625 -0.050000
+v -0.165416 -0.112417 -0.050000
+v -0.165416 -0.112417 0.050000
+v -0.248124 -0.168625 0.050000
+v -0.242705 -0.176336 -0.050000
+v -0.161803 -0.117557 -0.050000
+v -0.161803 -0.117557 0.050000
+v -0.242705 -0.176336 0.050000
+v -0.237047 -0.183872 -0.050000
+v -0.158031 -0.122581 -0.050000
+v -0.158031 -0.122581 0.050000
+v -0.237047 -0.183872 0.050000
+v -0.231154 -0.191227 -0.050000
+v -0.154103 -0.127485 -0.050000
+v -0.154103 -0.127485 0.050000
+v -0.231154 -0.191227 0.050000
+v -0.225033 -0.198394 -0.050000
+v -0.150022 -0.132262 -0.050000
+v -0.150022 -0.132262 0.050000
+v -0.225033 -0.198394 0.050000
+v -0.218691 -0.205364 -0.050000
+v -0.145794 -0.136909 -0.050000
+v -0.145794 -0.136909 0.050000
+v -0.218691 -0.205364 0.050000
+v -0.212132 -0.212132 -0.050000
+v -0.141421 -0.141421 -0.050000
+v -0.141421 -0.141421 0.050000
+v -0.212132 -0.212132 0.050000
+v -0.205364 -0.218691 -0.050000
+v -0.136909 -0.145794 -0.050000
+v -0.136909 -0.145794 0.050000
+v -0.205364 -0.218691 0.050000
+v -0.198394 -0.225033 -0.050000
+v -0.132262 -0.150022 -0.050000
+v -0.132262 -0.150022 0.050000
+v -0.198394 -0.225033 0.050000
+v -0.191227 -0.231154 -0.050000
+v -0.127485 -0.154103 -0.050000
+v -0.127485 -0.154103 0.050000
+v -0.191227 -0.231154 0.050000
+v -0.183872 -0.237047 -0.050000
+v -0.122581 -0.158031 -0.050000
+v -0.122581 -0.158031 0.050000
+v -0.183872 -0.237047 0.050000
+v -0.176336 -0.242705 -0.050000
+v -0.117557 -0.161803 -0.050000
+v -0.117557 -0.161803 0.050000
+v -0.176336 -0.242705 0.050000
+v -0.168625 -0.248124 -0.050000
+v -0.112417 -0.165416 -0.050000
+v -0.112417 -0.165416 0.050000
+v -0.168625 -0.248124 0.050000
+v -0.160748 -0.253298 -0.050000
+v -0.107165 -0.168866 -0.050000
+v -0.107165 -0.168866 0.050000
+v -0.160748 -0.253298 0.050000
+v -0.152712 -0.258223 -0.050000
+v -0.101808 -0.172148 -0.050000
+v -0.101808 -0.172148 0.050000
+v -0.152712 -0.258223 0.050000
+v -0.144526 -0.262892 -0.050000
+v -0.096351 -0.175261 -0.050000
+v -0.096351 -0.175261 0.050000
+v -0.144526 -0.262892 0.050000
+v -0.136197 -0.267302 -0.050000
+v -0.090798 -0.178201 -0.050000
+v -0.090798 -0.178201 0.050000
+v -0.136197 -0.267302 0.050000
+v -0.127734 -0.271448 -0.050000
+v -0.085156 -0.180965 -0.050000
+v -0.085156 -0.180965 0.050000
+v -0.127734 -0.271448 0.050000
+v -0.119144 -0.275326 -0.050000
+v -0.079430 -0.183551 -0.050000
+v -0.079430 -0.183551 0.050000
+v -0.119144 -0.275326 0.050000
+v -0.110437 -0.278933 -0.050000
+v -0.073625 -0.185955 -0.050000
+v -0.073625 -0.185955 0.050000
+v -0.110437 -0.278933 0.050000
+v -0.101621 -0.282264 -0.050000
+v -0.067748 -0.188176 -0.050000
+v -0.067748 -0.188176 0.050000
+v -0.101621 -0.282264 0.050000
+v -0.092705 -0.285317 -0.050000
+v -0.061803 -0.190211 -0.050000
+v -0.061803 -0.190211 0.050000
+v -0.092705 -0.285317 0.050000
+v -0.083697 -0.288088 -0.050000
+v -0.055798 -0.192059 -0.050000
+v -0.055798 -0.192059 0.050000
+v -0.083697 -0.288088 0.050000
+v -0.074607 -0.290575 -0.050000
+v -0.049738 -0.193717 -0.050000
+v -0.049738 -0.193717 0.050000
+v -0.074607 -0.290575 0.050000
+v -0.065443 -0.292775 -0.050000
+v -0.043629 -0.195183 -0.050000
+v -0.043629 -0.195183 0.050000
+v -0.065443 -0.292775 0.050000
+v -0.056214 -0.294686 -0.050000
+v -0.037476 -0.196457 -0.050000
+v -0.037476 -0.196457 0.050000
+v -0.056214 -0.294686 0.050000
+v -0.046930 -0.296307 -0.050000
+v -0.031287 -0.197538 -0.050000
+v -0.031287 -0.197538 0.050000
+v -0.046930 -0.296307 0.050000
+v -0.037600 -0.297634 -0.050000
+v -0.025067 -0.198423 -0.050000
+v -0.025067 -0.198423 0.050000
+v -0.037600 -0.297634 0.050000
+v -0.028232 -0.298669 -0.050000
+v -0.018822 -0.199112 -0.050000
+v -0.018822 -0.199112 0.050000
+v -0.028232 -0.298669 0.050000
+v -0.018837 -0.299408 -0.050000
+v -0.012558 -0.199605 -0.050000
+v -0.012558 -0.199605 0.050000
+v -0.018837 -0.299408 0.050000
+v -0.009423 -0.299852 -0.050000
+v -0.006282 -0.199901 -0.050000
+v -0.006282 -0.199901 0.050000
+v -0.009423 -0.299852 0.050000
+v 0.060000 0.140000 0.050000
+v 0.140000 0.060000 0.050000
+v 0.140000 0.060000 -0.050000
+v 0.060000 0.140000 -0.050000
+v 0.140000 0.060000 0.050000
+v -0.060000 -0.140000 0.050000
+v -0.060000 -0.140000 -0.050000
+v 0.140000 0.060000 -0.050000
+v -0.060000 -0.140000 0.050000
+v -0.140000 -0.060000 0.050000
+v -0.140000 -0.060000 -0.050000
+v -0.060000 -0.140000 -0.050000
+v -0.140000 -0.060000 0.050000
+v 0.060000 0.140000 0.050000
+v 0.060000 0.140000 -0.050000
+v -0.140000 -0.060000 -0.050000
+v 0.080000 -0.000000 0.050000
+v 0.300000 -0.220000 0.050000
+v 0.300000 -0.220000 -0.050000
+v 0.080000 -0.000000 -0.050000
+v 0.300000 -0.220000 0.050000
+v 0.220000 -0.300000 0.050000
+v 0.220000 -0.300000 -0.050000
+v 0.300000 -0.220000 -0.050000
+v 0.220000 -0.300000 0.050000
+v 0.000000 -0.080000 0.050000
+v 0.000000 -0.080000 -0.050000
+v 0.220000 -0.300000 -0.050000
+v 0.000000 -0.200000 -0.050000
+v 0.006282 -0.199901 -0.050000
+v 0.006282 -0.199901 0.050000
+v 0.000000 -0.200000 0.050000
+v 0.009423 -0.299852 -0.050000
+v 0.000000 -0.300000 -0.050000
+v 0.000000 -0.300000 0.050000
+v 0.009423 -0.299852 0.050000
+v 0.012558 -0.199605 -0.050000
+v 0.012558 -0.199605 0.050000
+v 0.018837 -0.299408 -0.050000
+v 0.018837 -0.299408 0.050000
+v 0.018822 -0.199112 -0.050000
+v 0.018822 -0.199112 0.050000
+v 0.028232 -0.298669 -0.050000
+v 0.028232 -0.298669 0.050000
+v 0.025067 -0.198423 -0.050000
+v 0.025067 -0.198423 0.050000
+v 0.037600 -0.297634 -0.050000
+v 0.037600 -0.297634 0.050000
+v 0.031287 -0.197538 -0.050000
+v 0.031287 -0.197538 0.050000
+v 0.046930 -0.296307 -0.050000
+v 0.046930 -0.296307 0.050000
+v 0.037476 -0.196457 -0.050000
+v 0.037476 -0.196457 0.050000
+v 0.056214 -0.294686 -0.050000
+v 0.056214 -0.294686 0.050000
+v 0.043629 -0.195183 -0.050000
+v 0.043629 -0.195183 0.050000
+v 0.065443 -0.292775 -0.050000
+v 0.065443 -0.292775 0.050000
+v 0.049738 -0.193717 -0.050000
+v 0.049738 -0.193717 0.050000
+v 0.074607 -0.290575 -0.050000
+v 0.074607 -0.290575 0.050000
+v 0.055798 -0.192059 -0.050000
+v 0.055798 -0.192059 0.050000
+v 0.083697 -0.288088 -0.050000
+v 0.083697 -0.288088 0.050000
+v 0.061803 -0.190211 -0.050000
+v 0.061803 -0.190211 0.050000
+v 0.092705 -0.285317 -0.050000
+v 0.092705 -0.285317 0.050000
+v 0.067748 -0.188176 -0.050000
+v 0.067748 -0.188176 0.050000
+v 0.101621 -0.282264 -0.050000
+v 0.101621 -0.282264 0.050000
+v 0.073625 -0.185955 -0.050000
+v 0.073625 -0.185955 0.050000
+v 0.110437 -0.278933 -0.050000
+v 0.110437 -0.278933 0.050000
+v 0.079430 -0.183551 -0.050000
+v 0.079430 -0.183551 0.050000
+v 0.119144 -0.275326 -0.050000
+v 0.119144 -0.275326 0.050000
+v 0.085156 -0.180965 -0.050000
+v 0.085156 -0.180965 0.050000
+v 0.127734 -0.271448 -0.050000
+v 0.127734 -0.271448 0.050000
+v 0.090798 -0.178201 -0.050000
+v 0.090798 -0.178201 0.050000
+v 0.136197 -0.267302 -0.050000
+v 0.136197 -0.267302 0.050000
+v 0.096351 -0.175261 -0.050000
+v 0.096351 -0.175261 0.050000
+v 0.144526 -0.262892 -0.050000
+v 0.144526 -0.262892 0.050000
+v 0.101808 -0.172148 -0.050000
+v 0.101808 -0.172148 0.050000
+v 0.152712 -0.258223 -0.050000
+v 0.152712 -0.258223 0.050000
+v 0.107165 -0.168866 -0.050000
+v 0.107165 -0.168866 0.050000
+v 0.160748 -0.253298 -0.050000
+v 0.160748 -0.253298 0.050000
+v 0.112417 -0.165416 -0.050000
+v 0.112417 -0.165416 0.050000
+v 0.168625 -0.248124 -0.050000
+v 0.168625 -0.248124 0.050000
+v 0.117557 -0.161803 -0.050000
+v 0.117557 -0.161803 0.050000
+v 0.176336 -0.242705 -0.050000
+v 0.176336 -0.242705 0.050000
+v 0.122581 -0.158031 -0.050000
+v 0.122581 -0.158031 0.050000
+v 0.183872 -0.237047 -0.050000
+v 0.183872 -0.237047 0.050000
+v 0.127485 -0.154103 -0.050000
+v 0.127485 -0.154103 0.050000
+v 0.191227 -0.231154 -0.050000
+v 0.191227 -0.231154 0.050000
+v 0.132262 -0.150022 -0.050000
+v 0.132262 -0.150022 0.050000
+v 0.198394 -0.225033 -0.050000
+v 0.198394 -0.225033 0.050000
+v 0.136909 -0.145794 -0.050000
+v 0.136909 -0.145794 0.050000
+v 0.205364 -0.218691 -0.050000
+v 0.205364 -0.218691 0.050000
+v 0.141421 -0.141421 -0.050000
+v 0.141421 -0.141421 0.050000
+v 0.212132 -0.212132 -0.050000
+v 0.212132 -0.212132 0.050000
+v 0.145794 -0.136909 -0.050000
+v 0.145794 -0.136909 0.050000
+v 0.218691 -0.205364 -0.050000
+v 0.218691 -0.205364 0.050000
+v 0.150022 -0.132262 -0.050000
+v 0.150022 -0.132262 0.050000
+v 0.225033 -0.198394 -0.050000
+v 0.225033 -0.198394 0.050000
+v 0.154103 -0.127485 -0.050000
+v 0.154103 -0.127485 0.050000
+v 0.231154 -0.191227 -0.050000
+v 0.231154 -0.191227 0.050000
+v 0.158031 -0.122581 -0.050000
+v 0.158031 -0.122581 0.050000
+v 0.237047 -0.183872 -0.050000
+v 0.237047 -0.183872 0.050000
+v 0.161803 -0.117557 -0.050000
+v 0.161803 -0.117557 0.050000
+v 0.242705 -0.176336 -0.050000
+v 0.242705 -0.176336 0.050000
+v 0.165416 -0.112417 -0.050000
+v 0.165416 -0.112417 0.050000
+v 0.248124 -0.168625 -0.050000
+v 0.248124 -0.168625 0.050000
+v 0.168866 -0.107165 -0.050000
+v 0.168866 -0.107165 0.050000
+v 0.253298 -0.160748 -0.050000
+v 0.253298 -0.160748 0.050000
+v 0.172148 -0.101808 -0.050000
+v 0.172148 -0.101808 0.050000
+v 0.258223 -0.152712 -0.050000
+v 0.258223 -0.152712 0.050000
+v 0.175261 -0.096351 -0.050000
+v 0.175261 -0.096351 0.050000
+v 0.262892 -0.144526 -0.050000
+v 0.262892 -0.144526 0.050000
+v 0.178201 -0.090798 -0.050000
+v 0.178201 -0.090798 0.050000
+v 0.267302 -0.136197 -0.050000
+v 0.267302 -0.136197 0.050000
+v 0.180965 -0.085156 -0.050000
+v 0.180965 -0.085156 0.050000
+v 0.271448 -0.127734 -0.050000
+v 0.271448 -0.127734 0.050000
+v 0.183551 -0.079430 -0.050000
+v 0.183551 -0.079430 0.050000
+v 0.275326 -0.119144 -0.050000
+v 0.275326 -0.119144 0.050000
+v 0.185955 -0.073625 -0.050000
+v 0.185955 -0.073625 0.050000
+v 0.278933 -0.110437 -0.050000
+v 0.278933 -0.110437 0.050000
+v 0.188176 -0.067748 -0.050000
+v 0.188176 -0.067748 0.050000
+v 0.282264 -0.101621 -0.050000
+v 0.282264 -0.101621 0.050000
+v 0.190211 -0.061803 -0.050000
+v 0.190211 -0.061803 0.050000
+v 0.285317 -0.092705 -0.050000
+v 0.285317 -0.092705 0.050000
+v 0.192059 -0.055798 -0.050000
+v 0.192059 -0.055798 0.050000
+v 0.288088 -0.083697 -0.050000
+v 0.288088 -0.083697 0.050000
+v 0.193717 -0.049738 -0.050000
+v 0.193717 -0.049738 0.050000
+v 0.290575 -0.074607 -0.050000
+v 0.290575 -0.074607 0.050000
+v 0.195183 -0.043629 -0.050000
+v 0.195183 -0.043629 0.050000
+v 0.292775 -0.065443 -0.050000
+v 0.292775 -0.065443 0.050000
+v 0.196457 -0.037476 -0.050000
+v 0.196457 -0.037476 0.050000
+v 0.294686 -0.056214 -0.050000
+v 0.294686 -0.056214 0.050000
+v 0.197538 -0.031287 -0.050000
+v 0.197538 -0.031287 0.050000
+v 0.296307 -0.046930 -0.050000
+v 0.296307 -0.046930 0.050000
+v 0.198423 -0.025067 -0.050000
+v 0.198423 -0.025067 0.050000
+v 0.297634 -0.037600 -0.050000
+v 0.297634 -0.037600 0.050000
+v 0.199112 -0.018822 -0.050000
+v 0.199112 -0.018822 0.050000
+v 0.298669 -0.028232 -0.050000
+v 0.298669 -0.028232 0.050000
+v 0.199605 -0.012558 -0.050000
+v 0.199605 -0.012558 0.050000
+v 0.299408 -0.018837 -0.050000
+v 0.299408 -0.018837 0.050000
+v 0.199901 -0.006282 -0.050000
+v 0.199901 -0.006282 0.050000
+v 0.299852 -0.009423 -0.050000
+v 0.299852 -0.009423 0.050000
+v 0.200000 -0.000000 -0.050000
+v 0.200000 -0.000000 0.050000
+v 0.300000 -0.000000 -0.050000
+v 0.300000 -0.000000 0.050000
+v 0.199901 0.006282 -0.050000
+v 0.199901 0.006282 0.050000
+v 0.299852 0.009423 -0.050000
+v 0.299852 0.009423 0.050000
+v 0.199605 0.012558 -0.050000
+v 0.199605 0.012558 0.050000
+v 0.299408 0.018837 -0.050000
+v 0.299408 0.018837 0.050000
+v 0.199112 0.018822 -0.050000
+v 0.199112 0.018822 0.050000
+v 0.298669 0.028232 -0.050000
+v 0.298669 0.028232 0.050000
+v 0.198423 0.025067 -0.050000
+v 0.198423 0.025067 0.050000
+v 0.297634 0.037600 -0.050000
+v 0.297634 0.037600 0.050000
+v 0.197538 0.031287 -0.050000
+v 0.197538 0.031287 0.050000
+v 0.296307 0.046930 -0.050000
+v 0.296307 0.046930 0.050000
+v 0.196457 0.037476 -0.050000
+v 0.196457 0.037476 0.050000
+v 0.294686 0.056214 -0.050000
+v 0.294686 0.056214 0.050000
+v 0.195183 0.043629 -0.050000
+v 0.195183 0.043629 0.050000
+v 0.292775 0.065443 -0.050000
+v 0.292775 0.065443 0.050000
+v 0.193717 0.049738 -0.050000
+v 0.193717 0.049738 0.050000
+v 0.290575 0.074607 -0.050000
+v 0.290575 0.074607 0.050000
+v 0.192059 0.055798 -0.050000
+v 0.192059 0.055798 0.050000
+v 0.288088 0.083697 -0.050000
+v 0.288088 0.083697 0.050000
+v 0.190211 0.061803 -0.050000
+v 0.190211 0.061803 0.050000
+v 0.285317 0.092705 -0.050000
+v 0.285317 0.092705 0.050000
+v 0.188176 0.067748 -0.050000
+v 0.188176 0.067748 0.050000
+v 0.282264 0.101621 -0.050000
+v 0.282264 0.101621 0.050000
+v 0.185955 0.073625 -0.050000
+v 0.185955 0.073625 0.050000
+v 0.278933 0.110437 -0.050000
+v 0.278933 0.110437 0.050000
+v 0.183551 0.079430 -0.050000
+v 0.183551 0.079430 0.050000
+v 0.275326 0.119144 -0.050000
+v 0.275326 0.119144 0.050000
+v 0.180965 0.085156 -0.050000
+v 0.180965 0.085156 0.050000
+v 0.271448 0.127734 -0.050000
+v 0.271448 0.127734 0.050000
+v 0.178201 0.090798 -0.050000
+v 0.178201 0.090798 0.050000
+v 0.267302 0.136197 -0.050000
+v 0.267302 0.136197 0.050000
+v 0.175261 0.096351 -0.050000
+v 0.175261 0.096351 0.050000
+v 0.262892 0.144526 -0.050000
+v 0.262892 0.144526 0.050000
+v 0.172148 0.101808 -0.050000
+v 0.172148 0.101808 0.050000
+v 0.258223 0.152712 -0.050000
+v 0.258223 0.152712 0.050000
+v 0.168866 0.107165 -0.050000
+v 0.168866 0.107165 0.050000
+v 0.253298 0.160748 -0.050000
+v 0.253298 0.160748 0.050000
+v 0.165416 0.112417 -0.050000
+v 0.165416 0.112417 0.050000
+v 0.248124 0.168625 -0.050000
+v 0.248124 0.168625 0.050000
+v 0.161803 0.117557 -0.050000
+v 0.161803 0.117557 0.050000
+v 0.242705 0.176336 -0.050000
+v 0.242705 0.176336 0.050000
+v 0.158031 0.122581 -0.050000
+v 0.158031 0.122581 0.050000
+v 0.237047 0.183872 -0.050000
+v 0.237047 0.183872 0.050000
+v 0.154103 0.127485 -0.050000
+v 0.154103 0.127485 0.050000
+v 0.231154 0.191227 -0.050000
+v 0.231154 0.191227 0.050000
+v 0.150022 0.132262 -0.050000
+v 0.150022 0.132262 0.050000
+v 0.225033 0.198394 -0.050000
+v 0.225033 0.198394 0.050000
+v 0.145794 0.136909 -0.050000
+v 0.145794 0.136909 0.050000
+v 0.218691 0.205364 -0.050000
+v 0.218691 0.205364 0.050000
+v 0.141421 0.141421 -0.050000
+v 0.141421 0.141421 0.050000
+v 0.212132 0.212132 -0.050000
+v 0.212132 0.212132 0.050000
+v 0.136909 0.145794 -0.050000
+v 0.136909 0.145794 0.050000
+v 0.205364 0.218691 -0.050000
+v 0.205364 0.218691 0.050000
+v 0.132262 0.150022 -0.050000
+v 0.132262 0.150022 0.050000
+v 0.198394 0.225033 -0.050000
+v 0.198394 0.225033 0.050000
+v 0.127485 0.154103 -0.050000
+v 0.127485 0.154103 0.050000
+v 0.191227 0.231154 -0.050000
+v 0.191227 0.231154 0.050000
+v 0.122581 0.158031 -0.050000
+v 0.122581 0.158031 0.050000
+v 0.183872 0.237047 -0.050000
+v 0.183872 0.237047 0.050000
+v 0.117557 0.161803 -0.050000
+v 0.117557 0.161803 0.050000
+v 0.176336 0.242705 -0.050000
+v 0.176336 0.242705 0.050000
+v 0.112417 0.165416 -0.050000
+v 0.112417 0.165416 0.050000
+v 0.168625 0.248124 -0.050000
+v 0.168625 0.248124 0.050000
+v 0.107165 0.168866 -0.050000
+v 0.107165 0.168866 0.050000
+v 0.160748 0.253298 -0.050000
+v 0.160748 0.253298 0.050000
+v 0.101808 0.172148 -0.050000
+v 0.101808 0.172148 0.050000
+v 0.152712 0.258223 -0.050000
+v 0.152712 0.258223 0.050000
+v 0.096351 0.175261 -0.050000
+v 0.096351 0.175261 0.050000
+v 0.144526 0.262892 -0.050000
+v 0.144526 0.262892 0.050000
+v 0.090798 0.178201 -0.050000
+v 0.090798 0.178201 0.050000
+v 0.136197 0.267302 -0.050000
+v 0.136197 0.267302 0.050000
+v 0.085156 0.180965 -0.050000
+v 0.085156 0.180965 0.050000
+v 0.127734 0.271448 -0.050000
+v 0.127734 0.271448 0.050000
+v 0.079430 0.183551 -0.050000
+v 0.079430 0.183551 0.050000
+v 0.119144 0.275326 -0.050000
+v 0.119144 0.275326 0.050000
+v 0.073625 0.185955 -0.050000
+v 0.073625 0.185955 0.050000
+v 0.110437 0.278933 -0.050000
+v 0.110437 0.278933 0.050000
+v 0.067748 0.188176 -0.050000
+v 0.067748 0.188176 0.050000
+v 0.101621 0.282264 -0.050000
+v 0.101621 0.282264 0.050000
+v 0.061803 0.190211 -0.050000
+v 0.061803 0.190211 0.050000
+v 0.092705 0.285317 -0.050000
+v 0.092705 0.285317 0.050000
+v 0.055798 0.192059 -0.050000
+v 0.055798 0.192059 0.050000
+v 0.083697 0.288088 -0.050000
+v 0.083697 0.288088 0.050000
+v 0.049738 0.193717 -0.050000
+v 0.049738 0.193717 0.050000
+v 0.074607 0.290575 -0.050000
+v 0.074607 0.290575 0.050000
+v 0.043629 0.195183 -0.050000
+v 0.043629 0.195183 0.050000
+v 0.065443 0.292775 -0.050000
+v 0.065443 0.292775 0.050000
+v 0.037476 0.196457 -0.050000
+v 0.037476 0.196457 0.050000
+v 0.056214 0.294686 -0.050000
+v 0.056214 0.294686 0.050000
+v 0.031287 0.197538 -0.050000
+v 0.031287 0.197538 0.050000
+v 0.046930 0.296307 -0.050000
+v 0.046930 0.296307 0.050000
+v 0.025067 0.198423 -0.050000
+v 0.025067 0.198423 0.050000
+v 0.037600 0.297634 -0.050000
+v 0.037600 0.297634 0.050000
+v 0.018822 0.199112 -0.050000
+v 0.018822 0.199112 0.050000
+v 0.028232 0.298669 -0.050000
+v 0.028232 0.298669 0.050000
+v 0.012558 0.199605 -0.050000
+v 0.012558 0.199605 0.050000
+v 0.018837 0.299408 -0.050000
+v 0.018837 0.299408 0.050000
+v 0.006282 0.199901 -0.050000
+v 0.006282 0.199901 0.050000
+v 0.009423 0.299852 -0.050000
+v 0.009423 0.299852 0.050000
+v 0.000000 0.200000 -0.050000
+v 0.000000 0.200000 0.050000
+v 0.000000 0.300000 -0.050000
+v 0.000000 0.300000 0.050000
+v -0.006282 0.199901 -0.050000
+v -0.006282 0.199901 0.050000
+v -0.009423 0.299852 -0.050000
+v -0.009423 0.299852 0.050000
+v -0.012558 0.199605 -0.050000
+v -0.012558 0.199605 0.050000
+v -0.018837 0.299408 -0.050000
+v -0.018837 0.299408 0.050000
+v -0.018822 0.199112 -0.050000
+v -0.018822 0.199112 0.050000
+v -0.028232 0.298669 -0.050000
+v -0.028232 0.298669 0.050000
+v -0.025067 0.198423 -0.050000
+v -0.025067 0.198423 0.050000
+v -0.037600 0.297634 -0.050000
+v -0.037600 0.297634 0.050000
+v -0.031287 0.197538 -0.050000
+v -0.031287 0.197538 0.050000
+v -0.046930 0.296307 -0.050000
+v -0.046930 0.296307 0.050000
+v -0.037476 0.196457 -0.050000
+v -0.037476 0.196457 0.050000
+v -0.056214 0.294686 -0.050000
+v -0.056214 0.294686 0.050000
+v -0.043629 0.195183 -0.050000
+v -0.043629 0.195183 0.050000
+v -0.065443 0.292775 -0.050000
+v -0.065443 0.292775 0.050000
+v -0.049738 0.193717 -0.050000
+v -0.049738 0.193717 0.050000
+v -0.074607 0.290575 -0.050000
+v -0.074607 0.290575 0.050000
+v -0.055798 0.192059 -0.050000
+v -0.055798 0.192059 0.050000
+v -0.083697 0.288088 -0.050000
+v -0.083697 0.288088 0.050000
+v -0.061803 0.190211 -0.050000
+v -0.061803 0.190211 0.050000
+v -0.092705 0.285317 -0.050000
+v -0.092705 0.285317 0.050000
+v -0.067748 0.188176 -0.050000
+v -0.067748 0.188176 0.050000
+v -0.101621 0.282264 -0.050000
+v -0.101621 0.282264 0.050000
+v -0.073625 0.185955 -0.050000
+v -0.073625 0.185955 0.050000
+v -0.110437 0.278933 -0.050000
+v -0.110437 0.278933 0.050000
+v -0.079430 0.183551 -0.050000
+v -0.079430 0.183551 0.050000
+v -0.119144 0.275326 -0.050000
+v -0.119144 0.275326 0.050000
+v -0.085156 0.180965 -0.050000
+v -0.085156 0.180965 0.050000
+v -0.127734 0.271448 -0.050000
+v -0.127734 0.271448 0.050000
+v -0.090798 0.178201 -0.050000
+v -0.090798 0.178201 0.050000
+v -0.136197 0.267302 -0.050000
+v -0.136197 0.267302 0.050000
+v -0.096351 0.175261 -0.050000
+v -0.096351 0.175261 0.050000
+v -0.144526 0.262892 -0.050000
+v -0.144526 0.262892 0.050000
+v -0.101808 0.172148 -0.050000
+v -0.101808 0.172148 0.050000
+v -0.152712 0.258223 -0.050000
+v -0.152712 0.258223 0.050000
+v -0.107165 0.168866 -0.050000
+v -0.107165 0.168866 0.050000
+v -0.160748 0.253298 -0.050000
+v -0.160748 0.253298 0.050000
+v -0.112417 0.165416 -0.050000
+v -0.112417 0.165416 0.050000
+v -0.168625 0.248124 -0.050000
+v -0.168625 0.248124 0.050000
+v -0.117557 0.161803 -0.050000
+v -0.117557 0.161803 0.050000
+v -0.176336 0.242705 -0.050000
+v -0.176336 0.242705 0.050000
+v -0.122581 0.158031 -0.050000
+v -0.122581 0.158031 0.050000
+v -0.183872 0.237047 -0.050000
+v -0.183872 0.237047 0.050000
+v -0.127485 0.154103 -0.050000
+v -0.127485 0.154103 0.050000
+v -0.191227 0.231154 -0.050000
+v -0.191227 0.231154 0.050000
+v -0.132262 0.150022 -0.050000
+v -0.132262 0.150022 0.050000
+v -0.198394 0.225033 -0.050000
+v -0.198394 0.225033 0.050000
+v -0.136909 0.145794 -0.050000
+v -0.136909 0.145794 0.050000
+v -0.205364 0.218691 -0.050000
+v -0.205364 0.218691 0.050000
+v -0.141421 0.141421 -0.050000
+v -0.141421 0.141421 0.050000
+v -0.212132 0.212132 -0.050000
+v -0.212132 0.212132 0.050000
+v -0.145794 0.136909 -0.050000
+v -0.145794 0.136909 0.050000
+v -0.218691 0.205364 -0.050000
+v -0.218691 0.205364 0.050000
+v -0.150022 0.132262 -0.050000
+v -0.150022 0.132262 0.050000
+v -0.225033 0.198394 -0.050000
+v -0.225033 0.198394 0.050000
+v -0.154103 0.127485 -0.050000
+v -0.154103 0.127485 0.050000
+v -0.231154 0.191227 -0.050000
+v -0.231154 0.191227 0.050000
+v -0.158031 0.122581 -0.050000
+v -0.158031 0.122581 0.050000
+v -0.237047 0.183872 -0.050000
+v -0.237047 0.183872 0.050000
+v -0.161803 0.117557 -0.050000
+v -0.161803 0.117557 0.050000
+v -0.242705 0.176336 -0.050000
+v -0.242705 0.176336 0.050000
+v -0.165416 0.112417 -0.050000
+v -0.165416 0.112417 0.050000
+v -0.248124 0.168625 -0.050000
+v -0.248124 0.168625 0.050000
+v -0.168866 0.107165 -0.050000
+v -0.168866 0.107165 0.050000
+v -0.253298 0.160748 -0.050000
+v -0.253298 0.160748 0.050000
+v -0.172148 0.101808 -0.050000
+v -0.172148 0.101808 0.050000
+v -0.258223 0.152712 -0.050000
+v -0.258223 0.152712 0.050000
+v -0.175261 0.096351 -0.050000
+v -0.175261 0.096351 0.050000
+v -0.262892 0.144526 -0.050000
+v -0.262892 0.144526 0.050000
+v -0.178201 0.090798 -0.050000
+v -0.178201 0.090798 0.050000
+v -0.267302 0.136197 -0.050000
+v -0.267302 0.136197 0.050000
+v -0.180965 0.085156 -0.050000
+v -0.180965 0.085156 0.050000
+v -0.271448 0.127734 -0.050000
+v -0.271448 0.127734 0.050000
+v -0.183551 0.079430 -0.050000
+v -0.183551 0.079430 0.050000
+v -0.275326 0.119144 -0.050000
+v -0.275326 0.119144 0.050000
+v -0.185955 0.073625 -0.050000
+v -0.185955 0.073625 0.050000
+v -0.278933 0.110437 -0.050000
+v -0.278933 0.110437 0.050000
+v -0.188176 0.067748 -0.050000
+v -0.188176 0.067748 0.050000
+v -0.282264 0.101621 -0.050000
+v -0.282264 0.101621 0.050000
+v -0.190211 0.061803 -0.050000
+v -0.190211 0.061803 0.050000
+v -0.285317 0.092705 -0.050000
+v -0.285317 0.092705 0.050000
+v -0.192059 0.055798 -0.050000
+v -0.192059 0.055798 0.050000
+v -0.288088 0.083697 -0.050000
+v -0.288088 0.083697 0.050000
+v -0.193717 0.049738 -0.050000
+v -0.193717 0.049738 0.050000
+v -0.290575 0.074607 -0.050000
+v -0.290575 0.074607 0.050000
+v -0.195183 0.043629 -0.050000
+v -0.195183 0.043629 0.050000
+v -0.292775 0.065443 -0.050000
+v -0.292775 0.065443 0.050000
+v -0.196457 0.037476 -0.050000
+v -0.196457 0.037476 0.050000
+v -0.294686 0.056214 -0.050000
+v -0.294686 0.056214 0.050000
+v -0.197538 0.031287 -0.050000
+v -0.197538 0.031287 0.050000
+v -0.296307 0.046930 -0.050000
+v -0.296307 0.046930 0.050000
+v -0.198423 0.025067 -0.050000
+v -0.198423 0.025067 0.050000
+v -0.297634 0.037600 -0.050000
+v -0.297634 0.037600 0.050000
+v -0.199112 0.018822 -0.050000
+v -0.199112 0.018822 0.050000
+v -0.298669 0.028232 -0.050000
+v -0.298669 0.028232 0.050000
+v -0.199605 0.012558 -0.050000
+v -0.199605 0.012558 0.050000
+v -0.299408 0.018837 -0.050000
+v -0.299408 0.018837 0.050000
+v -0.199901 0.006282 -0.050000
+v -0.199901 0.006282 0.050000
+v -0.299852 0.009423 -0.050000
+v -0.299852 0.009423 0.050000
+v -0.200000 0.000000 -0.050000
+v -0.200000 0.000000 0.050000
+v -0.300000 0.000000 -0.050000
+v -0.300000 0.000000 0.050000
+v -0.199901 -0.006282 -0.050000
+v -0.199901 -0.006282 0.050000
+v -0.299852 -0.009423 -0.050000
+v -0.299852 -0.009423 0.050000
+v -0.199605 -0.012558 -0.050000
+v -0.199605 -0.012558 0.050000
+v -0.299408 -0.018837 -0.050000
+v -0.299408 -0.018837 0.050000
+v -0.199112 -0.018822 -0.050000
+v -0.199112 -0.018822 0.050000
+v -0.298669 -0.028232 -0.050000
+v -0.298669 -0.028232 0.050000
+v -0.198423 -0.025067 -0.050000
+v -0.198423 -0.025067 0.050000
+v -0.297634 -0.037600 -0.050000
+v -0.297634 -0.037600 0.050000
+v -0.197538 -0.031287 -0.050000
+v -0.197538 -0.031287 0.050000
+v -0.296307 -0.046930 -0.050000
+v -0.296307 -0.046930 0.050000
+v -0.196457 -0.037476 -0.050000
+v -0.196457 -0.037476 0.050000
+v -0.294686 -0.056214 -0.050000
+v -0.294686 -0.056214 0.050000
+v -0.195183 -0.043629 -0.050000
+v -0.195183 -0.043629 0.050000
+v -0.292775 -0.065443 -0.050000
+v -0.292775 -0.065443 0.050000
+v -0.193717 -0.049738 -0.050000
+v -0.193717 -0.049738 0.050000
+v -0.290575 -0.074607 -0.050000
+v -0.290575 -0.074607 0.050000
+v -0.192059 -0.055798 -0.050000
+v -0.192059 -0.055798 0.050000
+v -0.288088 -0.083697 -0.050000
+v -0.288088 -0.083697 0.050000
+v -0.190211 -0.061803 -0.050000
+v -0.190211 -0.061803 0.050000
+v -0.285317 -0.092705 -0.050000
+v -0.285317 -0.092705 0.050000
+v -0.188176 -0.067748 -0.050000
+v -0.188176 -0.067748 0.050000
+v -0.282264 -0.101621 -0.050000
+v -0.282264 -0.101621 0.050000
+v -0.185955 -0.073625 -0.050000
+v -0.185955 -0.073625 0.050000
+v -0.278933 -0.110437 -0.050000
+v -0.278933 -0.110437 0.050000
+v -0.183551 -0.079430 -0.050000
+v -0.183551 -0.079430 0.050000
+v -0.275326 -0.119144 -0.050000
+v -0.275326 -0.119144 0.050000
+v -0.180965 -0.085156 -0.050000
+v -0.180965 -0.085156 0.050000
+v -0.271448 -0.127734 -0.050000
+v -0.271448 -0.127734 0.050000
+v -0.178201 -0.090798 -0.050000
+v -0.178201 -0.090798 0.050000
+v -0.267302 -0.136197 -0.050000
+v -0.267302 -0.136197 0.050000
+v -0.175261 -0.096351 -0.050000
+v -0.175261 -0.096351 0.050000
+v -0.262892 -0.144526 -0.050000
+v -0.262892 -0.144526 0.050000
+v -0.172148 -0.101808 -0.050000
+v -0.172148 -0.101808 0.050000
+v -0.258223 -0.152712 -0.050000
+v -0.258223 -0.152712 0.050000
+v -0.168866 -0.107165 -0.050000
+v -0.168866 -0.107165 0.050000
+v -0.253298 -0.160748 -0.050000
+v -0.253298 -0.160748 0.050000
+v -0.165416 -0.112417 -0.050000
+v -0.165416 -0.112417 0.050000
+v -0.248124 -0.168625 -0.050000
+v -0.248124 -0.168625 0.050000
+v -0.161803 -0.117557 -0.050000
+v -0.161803 -0.117557 0.050000
+v -0.242705 -0.176336 -0.050000
+v -0.242705 -0.176336 0.050000
+v -0.158031 -0.122581 -0.050000
+v -0.158031 -0.122581 0.050000
+v -0.237047 -0.183872 -0.050000
+v -0.237047 -0.183872 0.050000
+v -0.154103 -0.127485 -0.050000
+v -0.154103 -0.127485 0.050000
+v -0.231154 -0.191227 -0.050000
+v -0.231154 -0.191227 0.050000
+v -0.150022 -0.132262 -0.050000
+v -0.150022 -0.132262 0.050000
+v -0.225033 -0.198394 -0.050000
+v -0.225033 -0.198394 0.050000
+v -0.145794 -0.136909 -0.050000
+v -0.145794 -0.136909 0.050000
+v -0.218691 -0.205364 -0.050000
+v -0.218691 -0.205364 0.050000
+v -0.141421 -0.141421 -0.050000
+v -0.141421 -0.141421 0.050000
+v -0.212132 -0.212132 -0.050000
+v -0.212132 -0.212132 0.050000
+v -0.136909 -0.145794 -0.050000
+v -0.136909 -0.145794 0.050000
+v -0.205364 -0.218691 -0.050000
+v -0.205364 -0.218691 0.050000
+v -0.132262 -0.150022 -0.050000
+v -0.132262 -0.150022 0.050000
+v -0.198394 -0.225033 -0.050000
+v -0.198394 -0.225033 0.050000
+v -0.127485 -0.154103 -0.050000
+v -0.127485 -0.154103 0.050000
+v -0.191227 -0.231154 -0.050000
+v -0.191227 -0.231154 0.050000
+v -0.122581 -0.158031 -0.050000
+v -0.122581 -0.158031 0.050000
+v -0.183872 -0.237047 -0.050000
+v -0.183872 -0.237047 0.050000
+v -0.117557 -0.161803 -0.050000
+v -0.117557 -0.161803 0.050000
+v -0.176336 -0.242705 -0.050000
+v -0.176336 -0.242705 0.050000
+v -0.112417 -0.165416 -0.050000
+v -0.112417 -0.165416 0.050000
+v -0.168625 -0.248124 -0.050000
+v -0.168625 -0.248124 0.050000
+v -0.107165 -0.168866 -0.050000
+v -0.107165 -0.168866 0.050000
+v -0.160748 -0.253298 -0.050000
+v -0.160748 -0.253298 0.050000
+v -0.101808 -0.172148 -0.050000
+v -0.101808 -0.172148 0.050000
+v -0.152712 -0.258223 -0.050000
+v -0.152712 -0.258223 0.050000
+v -0.096351 -0.175261 -0.050000
+v -0.096351 -0.175261 0.050000
+v -0.144526 -0.262892 -0.050000
+v -0.144526 -0.262892 0.050000
+v -0.090798 -0.178201 -0.050000
+v -0.090798 -0.178201 0.050000
+v -0.136197 -0.267302 -0.050000
+v -0.136197 -0.267302 0.050000
+v -0.085156 -0.180965 -0.050000
+v -0.085156 -0.180965 0.050000
+v -0.127734 -0.271448 -0.050000
+v -0.127734 -0.271448 0.050000
+v -0.079430 -0.183551 -0.050000
+v -0.079430 -0.183551 0.050000
+v -0.119144 -0.275326 -0.050000
+v -0.119144 -0.275326 0.050000
+v -0.073625 -0.185955 -0.050000
+v -0.073625 -0.185955 0.050000
+v -0.110437 -0.278933 -0.050000
+v -0.110437 -0.278933 0.050000
+v -0.067748 -0.188176 -0.050000
+v -0.067748 -0.188176 0.050000
+v -0.101621 -0.282264 -0.050000
+v -0.101621 -0.282264 0.050000
+v -0.061803 -0.190211 -0.050000
+v -0.061803 -0.190211 0.050000
+v -0.092705 -0.285317 -0.050000
+v -0.092705 -0.285317 0.050000
+v -0.055798 -0.192059 -0.050000
+v -0.055798 -0.192059 0.050000
+v -0.083697 -0.288088 -0.050000
+v -0.083697 -0.288088 0.050000
+v -0.049738 -0.193717 -0.050000
+v -0.049738 -0.193717 0.050000
+v -0.074607 -0.290575 -0.050000
+v -0.074607 -0.290575 0.050000
+v -0.043629 -0.195183 -0.050000
+v -0.043629 -0.195183 0.050000
+v -0.065443 -0.292775 -0.050000
+v -0.065443 -0.292775 0.050000
+v -0.037476 -0.196457 -0.050000
+v -0.037476 -0.196457 0.050000
+v -0.056214 -0.294686 -0.050000
+v -0.056214 -0.294686 0.050000
+v -0.031287 -0.197538 -0.050000
+v -0.031287 -0.197538 0.050000
+v -0.046930 -0.296307 -0.050000
+v -0.046930 -0.296307 0.050000
+v -0.025067 -0.198423 -0.050000
+v -0.025067 -0.198423 0.050000
+v -0.037600 -0.297634 -0.050000
+v -0.037600 -0.297634 0.050000
+v -0.018822 -0.199112 -0.050000
+v -0.018822 -0.199112 0.050000
+v -0.028232 -0.298669 -0.050000
+v -0.028232 -0.298669 0.050000
+v -0.012558 -0.199605 -0.050000
+v -0.012558 -0.199605 0.050000
+v -0.018837 -0.299408 -0.050000
+v -0.018837 -0.299408 0.050000
+v -0.006282 -0.199901 -0.050000
+v -0.006282 -0.199901 0.050000
+v -0.009423 -0.299852 -0.050000
+v -0.009423 -0.299852 0.050000
+
+f 4 3 2 1
+f 8 7 6 5
+f 12 11 10 9
+f 16 15 14 13
+f 20 19 18 17
+f 24 23 22 21
+f 17 18 26 25
+f 28 27 23 24
+f 25 26 30 29
+f 32 31 27 28
+f 29 30 34 33
+f 36 35 31 32
+f 33 34 38 37
+f 40 39 35 36
+f 37 38 42 41
+f 44 43 39 40
+f 41 42 46 45
+f 48 47 43 44
+f 45 46 50 49
+f 52 51 47 48
+f 49 50 54 53
+f 56 55 51 52
+f 53 54 58 57
+f 60 59 55 56
+f 57 58 62 61
+f 64 63 59 60
+f 61 62 66 65
+f 68 67 63 64
+f 65 66 70 69
+f 72 71 67 68
+f 69 70 74 73
+f 76 75 71 72
+f 73 74 78 77
+f 80 79 75 76
+f 77 78 82 81
+f 84 83 79 80
+f 81 82 86 85
+f 88 87 83 84
+f 85 86 90 89
+f 92 91 87 88
+f 89 90 94 93
+f 96 95 91 92
+f 93 94 98 97
+f 100 99 95 96
+f 97 98 102 101
+f 104 103 99 100
+f 101 102 106 105
+f 108 107 103 104
+f 105 106 110 109
+f 112 111 107 108
+f 109 110 114 113
+f 116 115 111 112
+f 113 114 118 117
+f 120 119 115 116
+f 117 118 122 121
+f 124 123 119 120
+f 121 122 126 125
+f 128 127 123 124
+f 125 126 130 129
+f 132 131 127 128
+f 129 130 134 133
+f 136 135 131 132
+f 133 134 138 137
+f 140 139 135 136
+f 137 138 142 141
+f 144 143 139 140
+f 141 142 146 145
+f 148 147 143 144
+f 145 146 150 149
+f 152 151 147 148
+f 149 150 154 153
+f 156 155 151 152
+f 153 154 158 157
+f 160 159 155 156
+f 157 158 162 161
+f 164 163 159 160
+f 161 162 166 165
+f 168 167 163 164
+f 165 166 170 169
+f 172 171 167 168
+f 169 170 174 173
+f 176 175 171 172
+f 173 174 178 177
+f 180 179 175 176
+f 177 178 182 181
+f 184 183 179 180
+f 181 182 186 185
+f 188 187 183 184
+f 185 186 190 189
+f 192 191 187 188
+f 189 190 194 193
+f 196 195 191 192
+f 193 194 198 197
+f 200 199 195 196
+f 197 198 202 201
+f 204 203 199 200
+f 201 202 206 205
+f 208 207 203 204
+f 205 206 210 209
+f 212 211 207 208
+f 209 210 214 213
+f 216 215 211 212
+f 213 214 218 217
+f 220 219 215 216
+f 217 218 222 221
+f 224 223 219 220
+f 221 222 226 225
+f 228 227 223 224
+f 225 226 230 229
+f 232 231 227 228
+f 229 230 234 233
+f 236 235 231 232
+f 233 234 238 237
+f 240 239 235 236
+f 237 238 242 241
+f 244 243 239 240
+f 241 242 246 245
+f 248 247 243 244
+f 245 246 250 249
+f 252 251 247 248
+f 249 250 254 253
+f 256 255 251 252
+f 253 254 258 257
+f 260 259 255 256
+f 257 258 262 261
+f 264 263 259 260
+f 261 262 266 265
+f 268 267 263 264
+f 265 266 270 269
+f 272 271 267 268
+f 269 270 274 273
+f 276 275 271 272
+f 273 274 278 277
+f 280 279 275 276
+f 277 278 282 281
+f 284 283 279 280
+f 281 282 286 285
+f 288 287 283 284
+f 285 286 290 289
+f 292 291 287 288
+f 289 290 294 293
+f 296 295 291 292
+f 293 294 298 297
+f 300 299 295 296
+f 297 298 302 301
+f 304 303 299 300
+f 301 302 306 305
+f 308 307 303 304
+f 305 306 310 309
+f 312 311 307 308
+f 309 310 314 313
+f 316 315 311 312
+f 313 314 318 317
+f 320 319 315 316
+f 317 318 322 321
+f 324 323 319 320
+f 321 322 326 325
+f 328 327 323 324
+f 325 326 330 329
+f 332 331 327 328
+f 329 330 334 333
+f 336 335 331 332
+f 333 334 338 337
+f 340 339 335 336
+f 337 338 342 341
+f 344 343 339 340
+f 341 342 346 345
+f 348 347 343 344
+f 345 346 350 349
+f 352 351 347 348
+f 349 350 354 353
+f 356 355 351 352
+f 353 354 358 357
+f 360 359 355 356
+f 357 358 362 361
+f 364 363 359 360
+f 361 362 366 365
+f 368 367 363 364
+f 365 366 370 369
+f 372 371 367 368
+f 369 370 374 373
+f 376 375 371 372
+f 373 374 378 377
+f 380 379 375 376
+f 377 378 382 381
+f 384 383 379 380
+f 381 382 386 385
+f 388 387 383 384
+f 385 386 390 389
+f 392 391 387 388
+f 389 390 394 393
+f 396 395 391 392
+f 393 394 398 397
+f 400 399 395 396
+f 397 398 402 401
+f 404 403 399 400
+f 401 402 406 405
+f 408 407 403 404
+f 405 406 410 409
+f 412 411 407 408
+f 409 410 414 413
+f 416 415 411 412
+f 413 414 418 417
+f 420 419 415 416
+f 417 418 422 421
+f 424 423 419 420
+f 421 422 426 425
+f 428 427 423 424
+f 425 426 430 429
+f 432 431 427 428
+f 429 430 434 433
+f 436 435 431 432
+f 433 434 438 437
+f 440 439 435 436
+f 437 438 442 441
+f 444 443 439 440
+f 441 442 446 445
+f 448 447 443 444
+f 445 446 450 449
+f 452 451 447 448
+f 449 450 454 453
+f 456 455 451 452
+f 453 454 458 457
+f 460 459 455 456
+f 457 458 462 461
+f 464 463 459 460
+f 461 462 466 465
+f 468 467 463 464
+f 465 466 470 469
+f 472 471 467 468
+f 469 470 474 473
+f 476 475 471 472
+f 473 474 478 477
+f 480 479 475 476
+f 477 478 482 481
+f 484 483 479 480
+f 481 482 486 485
+f 488 487 483 484
+f 485 486 490 489
+f 492 491 487 488
+f 489 490 494 493
+f 496 495 491 492
+f 493 494 498 497
+f 500 499 495 496
+f 497 498 502 501
+f 504 503 499 500
+f 501 502 506 505
+f 508 507 503 504
+f 505 506 510 509
+f 512 511 507 508
+f 509 510 514 513
+f 516 515 511 512
+f 513 514 518 517
+f 520 519 515 516
+f 517 518 522 521
+f 524 523 519 520
+f 521 522 526 525
+f 528 527 523 524
+f 525 526 530 529
+f 532 531 527 528
+f 529 530 534 533
+f 536 535 531 532
+f 533 534 538 537
+f 540 539 535 536
+f 537 538 542 541
+f 544 543 539 540
+f 541 542 546 545
+f 548 547 543 544
+f 545 546 550 549
+f 552 551 547 548
+f 549 550 554 553
+f 556 555 551 552
+f 553 554 558 557
+f 560 559 555 556
+f 557 558 562 561
+f 564 563 559 560
+f 561 562 566 565
+f 568 567 563 564
+f 565 566 570 569
+f 572 571 567 568
+f 569 570 574 573
+f 576 575 571 572
+f 573 574 578 577
+f 580 579 575 576
+f 577 578 582 581
+f 584 583 579 580
+f 581 582 586 585
+f 588 587 583 584
+f 585 586 590 589
+f 592 591 587 588
+f 589 590 594 593
+f 596 595 591 592
+f 593 594 598 597
+f 600 599 595 596
+f 597 598 602 601
+f 604 603 599 600
+f 601 602 606 605
+f 608 607 603 604
+f 605 606 610 609
+f 612 611 607 608
+f 609 610 614 613
+f 616 615 611 612
+f 613 614 618 617
+f 620 619 615 616
+f 617 618 622 621
+f 624 623 619 620
+f 621 622 626 625
+f 628 627 623 624
+f 625 626 630 629
+f 632 631 627 628
+f 629 630 634 633
+f 636 635 631 632
+f 633 634 638 637
+f 640 639 635 636
+f 637 638 642 641
+f 644 643 639 640
+f 641 642 646 645
+f 648 647 643 644
+f 645 646 650 649
+f 652 651 647 648
+f 649 650 654 653
+f 656 655 651 652
+f 653 654 658 657
+f 660 659 655 656
+f 657 658 662 661
+f 664 663 659 660
+f 661 662 666 665
+f 668 667 663 664
+f 665 666 670 669
+f 672 671 667 668
+f 669 670 674 673
+f 676 675 671 672
+f 673 674 678 677
+f 680 679 675 676
+f 677 678 682 681
+f 684 683 679 680
+f 681 682 686 685
+f 688 687 683 684
+f 685 686 690 689
+f 692 691 687 688
+f 689 690 694 693
+f 696 695 691 692
+f 693 694 698 697
+f 700 699 695 696
+f 697 698 702 701
+f 704 703 699 700
+f 701 702 706 705
+f 708 707 703 704
+f 705 706 710 709
+f 712 711 707 708
+f 709 710 714 713
+f 716 715 711 712
+f 713 714 718 717
+f 720 719 715 716
+f 717 718 722 721
+f 724 723 719 720
+f 721 722 726 725
+f 728 727 723 724
+f 725 726 730 729
+f 732 731 727 728
+f 729 730 734 733
+f 736 735 731 732
+f 733 734 738 737
+f 740 739 735 736
+f 737 738 742 741
+f 744 743 739 740
+f 741 742 746 745
+f 748 747 743 744
+f 745 746 750 749
+f 752 751 747 748
+f 749 750 754 753
+f 756 755 751 752
+f 753 754 758 757
+f 760 759 755 756
+f 757 758 762 761
+f 764 763 759 760
+f 761 762 766 765
+f 768 767 763 764
+f 765 766 770 769
+f 772 771 767 768
+f 769 770 774 773
+f 776 775 771 772
+f 773 774 778 777
+f 780 779 775 776
+f 777 778 782 781
+f 784 783 779 780
+f 781 782 786 785
+f 788 787 783 784
+f 785 786 790 789
+f 792 791 787 788
+f 789 790 794 793
+f 796 795 791 792
+f 793 794 798 797
+f 800 799 795 796
+f 797 798 802 801
+f 804 803 799 800
+f 801 802 806 805
+f 808 807 803 804
+f 805 806 810 809
+f 812 811 807 808
+f 809 810 814 813
+f 816 815 811 812
+f 813 814 19 20
+f 21 22 815 816
+f 817 818 819 820
+f 821 822 823 824
+f 825 826 827 828
+f 829 830 831 832
+f 833 834 835 836
+f 837 838 839 840
+f 841 842 843 844
+f 848 847 846 845
+f 852 851 850 849
+f 847 854 853 846
+f 856 852 849 855
+f 854 858 857 853
+f 860 856 855 859
+f 858 862 861 857
+f 864 860 859 863
+f 862 866 865 861
+f 868 864 863 867
+f 866 870 869 865
+f 872 868 867 871
+f 870 874 873 869
+f 876 872 871 875
+f 874 878 877 873
+f 880 876 875 879
+f 878 882 881 877
+f 884 880 879 883
+f 882 886 885 881
+f 888 884 883 887
+f 886 890 889 885
+f 892 888 887 891
+f 890 894 893 889
+f 896 892 891 895
+f 894 898 897 893
+f 900 896 895 899
+f 898 902 901 897
+f 904 900 899 903
+f 902 906 905 901
+f 908 904 903 907
+f 906 910 909 905
+f 912 908 907 911
+f 910 914 913 909
+f 916 912 911 915
+f 914 918 917 913
+f 920 916 915 919
+f 918 922 921 917
+f 924 920 919 923
+f 922 926 925 921
+f 928 924 923 927
+f 926 930 929 925
+f 932 928 927 931
+f 930 934 933 929
+f 936 932 931 935
+f 934 938 937 933
+f 940 936 935 939
+f 938 942 941 937
+f 944 940 939 943
+f 942 946 945 941
+f 948 944 943 947
+f 946 950 949 945
+f 952 948 947 951
+f 950 954 953 949
+f 956 952 951 955
+f 954 958 957 953
+f 960 956 955 959
+f 958 962 961 957
+f 964 960 959 963
+f 962 966 965 961
+f 968 964 963 967
+f 966 970 969 965
+f 972 968 967 971
+f 970 974 973 969
+f 976 972 971 975
+f 974 978 977 973
+f 980 976 975 979
+f 978 982 981 977
+f 984 980 979 983
+f 982 986 985 981
+f 988 984 983 987
+f 986 990 989 985
+f 992 988 987 991
+f 990 994 993 989
+f 996 992 991 995
+f 994 998 997 993
+f 1000 996 995 999
+f 998 1002 1001 997
+f 1004 1000 999 1003
+f 1002 1006 1005 1001
+f 1008 1004 1003 1007
+f 1006 1010 1009 1005
+f 1012 1008 1007 1011
+f 1010 1014 1013 1009
+f 1016 1012 1011 1015
+f 1014 1018 1017 1013
+f 1020 1016 1015 1019
+f 1018 1022 1021 1017
+f 1024 1020 1019 1023
+f 1022 1026 1025 1021
+f 1028 1024 1023 1027
+f 1026 1030 1029 1025
+f 1032 1028 1027 1031
+f 1030 1034 1033 1029
+f 1036 1032 1031 1035
+f 1034 1038 1037 1033
+f 1040 1036 1035 1039
+f 1038 1042 1041 1037
+f 1044 1040 1039 1043
+f 1042 1046 1045 1041
+f 1048 1044 1043 1047
+f 1046 1050 1049 1045
+f 1052 1048 1047 1051
+f 1050 1054 1053 1049
+f 1056 1052 1051 1055
+f 1054 1058 1057 1053
+f 1060 1056 1055 1059
+f 1058 1062 1061 1057
+f 1064 1060 1059 1063
+f 1062 1066 1065 1061
+f 1068 1064 1063 1067
+f 1066 1070 1069 1065
+f 1072 1068 1067 1071
+f 1070 1074 1073 1069
+f 1076 1072 1071 1075
+f 1074 1078 1077 1073
+f 1080 1076 1075 1079
+f 1078 1082 1081 1077
+f 1084 1080 1079 1083
+f 1082 1086 1085 1081
+f 1088 1084 1083 1087
+f 1086 1090 1089 1085
+f 1092 1088 1087 1091
+f 1090 1094 1093 1089
+f 1096 1092 1091 1095
+f 1094 1098 1097 1093
+f 1100 1096 1095 1099
+f 1098 1102 1101 1097
+f 1104 1100 1099 1103
+f 1102 1106 1105 1101
+f 1108 1104 1103 1107
+f 1106 1110 1109 1105
+f 1112 1108 1107 1111
+f 1110 1114 1113 1109
+f 1116 1112 1111 1115
+f 1114 1118 1117 1113
+f 1120 1116 1115 1119
+f 1118 1122 1121 1117
+f 1124 1120 1119 1123
+f 1122 1126 1125 1121
+f 1128 1124 1123 1127
+f 1126 1130 1129 1125
+f 1132 1128 1127 1131
+f 1130 1134 1133 1129
+f 1136 1132 1131 1135
+f 1134 1138 1137 1133
+f 1140 1136 1135 1139
+f 1138 1142 1141 1137
+f 1144 1140 1139 1143
+f 1142 1146 1145 1141
+f 1148 1144 1143 1147
+f 1146 1150 1149 1145
+f 1152 1148 1147 1151
+f 1150 1154 1153 1149
+f 1156 1152 1151 1155
+f 1154 1158 1157 1153
+f 1160 1156 1155 1159
+f 1158 1162 1161 1157
+f 1164 1160 1159 1163
+f 1162 1166 1165 1161
+f 1168 1164 1163 1167
+f 1166 1170 1169 1165
+f 1172 1168 1167 1171
+f 1170 1174 1173 1169
+f 1176 1172 1171 1175
+f 1174 1178 1177 1173
+f 1180 1176 1175 1179
+f 1178 1182 1181 1177
+f 1184 1180 1179 1183
+f 1182 1186 1185 1181
+f 1188 1184 1183 1187
+f 1186 1190 1189 1185
+f 1192 1188 1187 1191
+f 1190 1194 1193 1189
+f 1196 1192 1191 1195
+f 1194 1198 1197 1193
+f 1200 1196 1195 1199
+f 1198 1202 1201 1197
+f 1204 1200 1199 1203
+f 1202 1206 1205 1201
+f 1208 1204 1203 1207
+f 1206 1210 1209 1205
+f 1212 1208 1207 1211
+f 1210 1214 1213 1209
+f 1216 1212 1211 1215
+f 1214 1218 1217 1213
+f 1220 1216 1215 1219
+f 1218 1222 1221 1217
+f 1224 1220 1219 1223
+f 1222 1226 1225 1221
+f 1228 1224 1223 1227
+f 1226 1230 1229 1225
+f 1232 1228 1227 1231
+f 1230 1234 1233 1229
+f 1236 1232 1231 1235
+f 1234 1238 1237 1233
+f 1240 1236 1235 1239
+f 1238 1242 1241 1237
+f 1244 1240 1239 1243
+f 1242 1246 1245 1241
+f 1248 1244 1243 1247
+f 1246 1250 1249 1245
+f 1252 1248 1247 1251
+f 1250 1254 1253 1249
+f 1256 1252 1251 1255
+f 1254 1258 1257 1253
+f 1260 1256 1255 1259
+f 1258 1262 1261 1257
+f 1264 1260 1259 1263
+f 1262 1266 1265 1261
+f 1268 1264 1263 1267
+f 1266 1270 1269 1265
+f 1272 1268 1267 1271
+f 1270 1274 1273 1269
+f 1276 1272 1271 1275
+f 1274 1278 1277 1273
+f 1280 1276 1275 1279
+f 1278 1282 1281 1277
+f 1284 1280 1279 1283
+f 1282 1286 1285 1281
+f 1288 1284 1283 1287
+f 1286 1290 1289 1285
+f 1292 1288 1287 1291
+f 1290 1294 1293 1289
+f 1296 1292 1291 1295
+f 1294 1298 1297 1293
+f 1300 1296 1295 1299
+f 1298 1302 1301 1297
+f 1304 1300 1299 1303
+f 1302 1306 1305 1301
+f 1308 1304 1303 1307
+f 1306 1310 1309 1305
+f 1312 1308 1307 1311
+f 1310 1314 1313 1309
+f 1316 1312 1311 1315
+f 1314 1318 1317 1313
+f 1320 1316 1315 1319
+f 1318 1322 1321 1317
+f 1324 1320 1319 1323
+f 1322 1326 1325 1321
+f 1328 1324 1323 1327
+f 1326 1330 1329 1325
+f 1332 1328 1327 1331
+f 1330 1334 1333 1329
+f 1336 1332 1331 1335
+f 1334 1338 1337 1333
+f 1340 1336 1335 1339
+f 1338 1342 1341 1337
+f 1344 1340 1339 1343
+f 1342 1346 1345 1341
+f 1348 1344 1343 1347
+f 1346 1350 1349 1345
+f 1352 1348 1347 1351
+f 1350 1354 1353 1349
+f 1356 1352 1351 1355
+f 1354 1358 1357 1353
+f 1360 1356 1355 1359
+f 1358 1362 1361 1357
+f 1364 1360 1359 1363
+f 1362 1366 1365 1361
+f 1368 1364 1363 1367
+f 1366 1370 1369 1365
+f 1372 1368 1367 1371
+f 1370 1374 1373 1369
+f 1376 1372 1371 1375
+f 1374 1378 1377 1373
+f 1380 1376 1375 1379
+f 1378 1382 1381 1377
+f 1384 1380 1379 1383
+f 1382 1386 1385 1381
+f 1388 1384 1383 1387
+f 1386 1390 1389 1385
+f 1392 1388 1387 1391
+f 1390 1394 1393 1389
+f 1396 1392 1391 1395
+f 1394 1398 1397 1393
+f 1400 1396 1395 1399
+f 1398 1402 1401 1397
+f 1404 1400 1399 1403
+f 1402 1406 1405 1401
+f 1408 1404 1403 1407
+f 1406 1410 1409 1405
+f 1412 1408 1407 1411
+f 1410 1414 1413 1409
+f 1416 1412 1411 1415
+f 1414 1418 1417 1413
+f 1420 1416 1415 1419
+f 1418 1422 1421 1417
+f 1424 1420 1419 1423
+f 1422 1426 1425 1421
+f 1428 1424 1423 1427
+f 1426 1430 1429 1425
+f 1432 1428 1427 1431
+f 1430 1434 1433 1429
+f 1436 1432 1431 1435
+f 1434 1438 1437 1433
+f 1440 1436 1435 1439
+f 1438 1442 1441 1437
+f 1444 1440 1439 1443
+f 1442 1446 1445 1441
+f 1448 1444 1443 1447
+f 1446 1450 1449 1445
+f 1452 1448 1447 1451
+f 1450 1454 1453 1449
+f 1456 1452 1451 1455
+f 1454 1458 1457 1453
+f 1460 1456 1455 1459
+f 1458 1462 1461 1457
+f 1464 1460 1459 1463
+f 1462 1466 1465 1461
+f 1468 1464 1463 1467
+f 1466 1470 1469 1465
+f 1472 1468 1467 1471
+f 1470 1474 1473 1469
+f 1476 1472 1471 1475
+f 1474 1478 1477 1473
+f 1480 1476 1475 1479
+f 1478 1482 1481 1477
+f 1484 1480 1479 1483
+f 1482 1486 1485 1481
+f 1488 1484 1483 1487
+f 1486 1490 1489 1485
+f 1492 1488 1487 1491
+f 1490 1494 1493 1489
+f 1496 1492 1491 1495
+f 1494 1498 1497 1493
+f 1500 1496 1495 1499
+f 1498 1502 1501 1497
+f 1504 1500 1499 1503
+f 1502 1506 1505 1501
+f 1508 1504 1503 1507
+f 1506 1510 1509 1505
+f 1512 1508 1507 1511
+f 1510 1514 1513 1509
+f 1516 1512 1511 1515
+f 1514 1518 1517 1513
+f 1520 1516 1515 1519
+f 1518 1522 1521 1517
+f 1524 1520 1519 1523
+f 1522 1526 1525 1521
+f 1528 1524 1523 1527
+f 1526 1530 1529 1525
+f 1532 1528 1527 1531
+f 1530 1534 1533 1529
+f 1536 1532 1531 1535
+f 1534 1538 1537 1533
+f 1540 1536 1535 1539
+f 1538 1542 1541 1537
+f 1544 1540 1539 1543
+f 1542 1546 1545 1541
+f 1548 1544 1543 1547
+f 1546 1550 1549 1545
+f 1552 1548 1547 1551
+f 1550 1554 1553 1549
+f 1556 1552 1551 1555
+f 1554 1558 1557 1553
+f 1560 1556 1555 1559
+f 1558 1562 1561 1557
+f 1564 1560 1559 1563
+f 1562 1566 1565 1561
+f 1568 1564 1563 1567
+f 1566 1570 1569 1565
+f 1572 1568 1567 1571
+f 1570 1574 1573 1569
+f 1576 1572 1571 1575
+f 1574 1578 1577 1573
+f 1580 1576 1575 1579
+f 1578 1582 1581 1577
+f 1584 1580 1579 1583
+f 1582 1586 1585 1581
+f 1588 1584 1583 1587
+f 1586 1590 1589 1585
+f 1592 1588 1587 1591
+f 1590 1594 1593 1589
+f 1596 1592 1591 1595
+f 1594 1598 1597 1593
+f 1600 1596 1595 1599
+f 1598 1602 1601 1597
+f 1604 1600 1599 1603
+f 1602 1606 1605 1601
+f 1608 1604 1603 1607
+f 1606 1610 1609 1605
+f 1612 1608 1607 1611
+f 1610 1614 1613 1609
+f 1616 1612 1611 1615
+f 1614 1618 1617 1613
+f 1620 1616 1615 1619
+f 1618 1622 1621 1617
+f 1624 1620 1619 1623
+f 1622 1626 1625 1621
+f 1628 1624 1623 1627
+f 1626 1630 1629 1625
+f 1632 1628 1627 1631
+f 1630 1634 1633 1629
+f 1636 1632 1631 1635
+f 1634 1638 1637 1633
+f 1640 1636 1635 1639
+f 1638 1642 1641 1637
+f 1644 1640 1639 1643
+f 1642 848 845 1641
+f 851 1644 1643 850
diff --git a/qt3d.pro b/qt3d.pro
index 18b3cc5..bd2c9e8 100644
--- a/qt3d.pro
+++ b/qt3d.pro
@@ -7,6 +7,8 @@ TARGET =
DEPENDPATH += .
INCLUDEPATH += .
+QMAKE_CXXFLAGS += -g
+
QT += webkit opengl script
contains(QT_CONFIG, phonon):{
@@ -31,3 +33,7 @@ DEPLOYMENT_PLUGIN += phonon_ds9 phonon_waveout
# Input
HEADERS += entity.h mazescene.h matrix4x4.h scriptwidget.h
SOURCES += main.cpp entity.cpp mazescene.cpp matrix4x4.cpp scriptwidget.cpp
+
+# From modelviewer
+HEADERS += modelitem.h point3d.h model.h
+SOURCES += model.cpp modelitem.cpp