summaryrefslogtreecommitdiffstats
path: root/examples/qt3d/geometry/geometry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/qt3d/geometry/geometry.cpp')
-rw-r--r--examples/qt3d/geometry/geometry.cpp210
1 files changed, 0 insertions, 210 deletions
diff --git a/examples/qt3d/geometry/geometry.cpp b/examples/qt3d/geometry/geometry.cpp
deleted file mode 100644
index 870d68d5..00000000
--- a/examples/qt3d/geometry/geometry.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "geometry.h"
-#include "qgltexture2d.h"
-#include "qglmaterialcollection.h"
-#include "qtriangle3d.h"
-
-#include <QImage>
-#include <QPainter>
-
-// icosahedron is defined by phi, derived from the golden section
-// http://en.wikipedia.org/wiki/Icosahedron#Cartesian_coordinates
-const qreal phi = 1.618033988749894848f;
-
-Geometry::Geometry(QObject *parent, QGLMaterialCollection *materials)
- : QGLSceneNode(parent)
-{
- setPalette(materials);
-
- float ico[12][3] = {
- { 0.0f, 1.0f, phi }, // A - 0
- { 0.0f, 1.0f, -phi }, // B - 1
- { 0.0f, -1.0f, phi }, // C - 2
- { 0.0f, -1.0f, -phi }, // D - 3
- { 1.0f, phi, 0.0f }, // E - 4
- { 1.0f, -phi, 0.0f }, // F - 5
- { -1.0f, phi, 0.0f }, // G - 6
- { -1.0f, -phi, 0.0f }, // H - 7
- { phi, 0.0f, 1.0f }, // I - 8
- { phi, 0.0f, -1.0f }, // J - 9
- { -phi, 0.0f, 1.0f }, // K - 10
- { -phi, 0.0f, -1.0f } // L - 11
- };
-
- int face[20][3] = {
- { 4, 0, 8 }, // E-A-I
- { 6, 0, 4 }, // G-A-E
- { 6, 10, 0 }, // G-K-A
- { 11, 10, 6 }, // L-K-G
- { 0, 2, 8 }, // A-C-I
- { 10, 2, 0 }, // K-C-A
- { 10, 7, 2 }, // K-H-C
- { 11, 7, 10 }, // L-H-K
- { 2, 5, 8 }, // C-F-I
- { 7, 5, 2 }, // H-F-C
- { 7, 3, 5 }, // H-D-F
- { 11, 3, 7 }, // L-D-H
- { 5, 9, 8 }, // F-J-I
- { 3, 9, 5 }, // D-J-F
- { 3, 1, 9 }, // D-B-J
- { 11, 1, 3 }, // L-B-D
- { 9, 4, 8 }, // J-E-I
- { 1, 4, 9 }, // B-E-J
- { 1, 6, 4 }, // B-G-E
- { 11, 6, 1 } // L-G-B
- };
-
- const float u0 = 0.0f;
- const float u1 = 0.173205081f;
- const float u2 = 0.346410162f;
- const float u3 = 0.519615242f;
- const float u4 = 0.692820323f;
- const float u5 = 0.866025402f;
- const float v0 = 0.0f;
- const float v1 = 0.111111111f;
- const float v2 = 0.222222222f;
- const float v3 = 0.333333333f;
- const float v4 = 0.444444444f;
- const float v5 = 0.555555555f;
- const float v6 = 0.666666666f;
- const float v7 = 0.777777777f;
- const float v8 = 0.888888888f;
- const float v9 = 1.0f;
-
- float tex[20][3][2] = {
- { { u0, v1 }, { u1, v2 }, { u1, v0 } }, // E-A-I
- { { u0, v3 }, { u1, v2 }, { u0, v1 } }, // G-A-E
- { { u0, v3 }, { u1, v4 }, { u1, v2 } }, // G-K-A
- { { u0, v5 }, { u1, v4 }, { u0, v3 } }, // L-K-G
- { { u1, v2 }, { u2, v3 }, { u2, v1 } }, // A-C-I
- { { u1, v4 }, { u2, v3 }, { u1, v2 } }, // K-C-A
- { { u1, v4 }, { u2, v5 }, { u2, v3 } }, // K-H-C
- { { u1, v6 }, { u2, v5 }, { u1, v4 } }, // L-H-K
- { { u2, v3 }, { u3, v4 }, { u3, v2 } }, // C-F-I
- { { u2, v5 }, { u3, v4 }, { u2, v3 } }, // H-F-C
- { { u2, v5 }, { u3, v6 }, { u3, v4 } }, // H-D-F
- { { u2, v7 }, { u3, v6 }, { u2, v5 } }, // L-D-H
- { { u3, v4 }, { u4, v5 }, { u4, v3 } }, // F-J-I
- { { u3, v6 }, { u4, v5 }, { u3, v4 } }, // D-J-F
- { { u3, v6 }, { u4, v7 }, { u4, v5 } }, // D-B-J
- { { u3, v8 }, { u4, v7 }, { u3, v6 } }, // L-B-D
- { { u4, v5 }, { u5, v6 }, { u5, v4 } }, // J-E-I
- { { u4, v7 }, { u5, v6 }, { u4, v5 } }, // B-E-J
- { { u4, v7 }, { u5, v8 }, { u5, v6 } }, // B-G-E
- { { u4, v9 }, { u5, v8 }, { u4, v7 } } // L-G-B
- };
-
-#ifdef Q_OS_SYMBIAN
- const int imgSize = 256;
- const int txtSize = 6;
-#else
- const int imgSize = 1024;
- const int txtSize = 36;
-#endif
-
- QImage uv(imgSize, imgSize, QImage::Format_ARGB32);
- uv.fill(qRgba(196, 196, 196, 196));
- QPainter painter;
- painter.begin(&uv);
- painter.setRenderHint(QPainter::Antialiasing);
- QPen pen = painter.pen();
- pen.setWidth(2.0);
- painter.setPen(pen);
- QFont font = painter.font();
- font.setPointSize(txtSize);
- painter.setFont(font);
- QFontMetrics metrics = painter.fontMetrics();
-
- QGLBuilder b;
- b.newSection();
- b.currentNode()->setEffect(QGL::LitDecalTexture2D);
- for (int ix = 0; ix < 20; ++ix)
- {
- QVector3D v0(ico[face[ix][0]][0], ico[face[ix][0]][1], ico[face[ix][0]][2]);
- QVector3D v1(ico[face[ix][1]][0], ico[face[ix][1]][1], ico[face[ix][1]][2]);
- QVector3D v2(ico[face[ix][2]][0], ico[face[ix][2]][1], ico[face[ix][2]][2]);
-
- QVector2D t0(tex[ix][0][0], tex[ix][0][1]);
- QVector2D t1(tex[ix][1][0], tex[ix][1][1]);
- QVector2D t2(tex[ix][2][0], tex[ix][2][1]);
-
- // scale up and flip to draw the texture
- QVector2D tv0 = t0 * static_cast<float>(imgSize);
- QVector2D tv1 = t1 * static_cast<float>(imgSize);
- QVector2D tv2 = t2 * static_cast<float>(imgSize);
-
- painter.setPen(QColor("darkblue"));
- painter.drawLine(tv0.toPointF(), tv1.toPointF());
- painter.drawLine(tv1.toPointF(), tv2.toPointF());
- painter.drawLine(tv2.toPointF(), tv0.toPointF());
- QTriangle3D tri(tv0, tv1, tv2);
- QVector3D cen = tri.center();
- QString n = QString::number(ix+1);
-
- painter.setPen(QColor("darkgreen"));
- painter.drawText(QPointF(cen.x() - metrics.width(n) / 2.0, cen.y() + 3.0), n);
-
- // Qt's coordinate system is upside down. I'm ok with that.
- t0.setY(1.0f - t0.y());
- t1.setY(1.0f - t1.y());
- t2.setY(1.0f - t2.y());
-
- QGeometryData op;
- op.appendVertex(v0, v1, v2);
- op.appendTexCoord(t0, t1, t2);
- b.addTriangles(op);
- }
-
- painter.end();
-
- QGLMaterial *mat = new QGLMaterial;
- mat->setAmbientColor(QColor(32, 64, 196));
- mat->setDiffuseColor(QColor(32, 32, 32));
-
- QGLTexture2D *texture = new QGLTexture2D(mat);
- texture->setImage(uv);
- mat->setTexture(texture);
-
- setMaterial(mat);
- QGLSceneNode *n = b.finalizedSceneNode();
- addNode(n);
-}