diff options
Diffstat (limited to 'demos/qt3d/teaservice/teaservice.cpp')
-rw-r--r-- | demos/qt3d/teaservice/teaservice.cpp | 386 |
1 files changed, 0 insertions, 386 deletions
diff --git a/demos/qt3d/teaservice/teaservice.cpp b/demos/qt3d/teaservice/teaservice.cpp deleted file mode 100644 index 3423916e..00000000 --- a/demos/qt3d/teaservice/teaservice.cpp +++ /dev/null @@ -1,386 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtQuick3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.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 the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QApplication> -#include <QMainWindow> -#include <QMenu> -#include <QMenuBar> -#include <QKeyEvent> -#include <QAction> -#include <QDebug> -#include "qglview.h" -#include "meshobject.h" -#include "sceneobject.h" -#include "qglteapot.h" -#include "qglbuilder.h" -#include "perpixeleffect.h" - -enum { - ObjTeapot, - ObjTeacup1, - ObjTeacup2, - ObjTeaspoon1, - ObjTeaspoon2 -}; - -class Teapot : public MeshObject -{ - Q_OBJECT -public: - Teapot(QObject *parent=0); - ~Teapot() {} -}; - -static QGLSceneNode *createTeapot(QObject *parent) -{ - QGLBuilder builder; - builder << QGLTeapot(); - QGLSceneNode *n = builder.finalizedSceneNode(); - n->setParent(parent); - return n; -} - -Teapot::Teapot(QObject *parent) - : MeshObject(createTeapot(parent), parent) -{ -} - -class Teacup : public MeshObject -{ - Q_OBJECT -public: - Teacup(QObject *parent=0); - ~Teacup() {} -}; - -static QGLAbstractScene *loadBezier(const QString& fileName) -{ - QGLAbstractScene *scene; - scene = QGLAbstractScene::loadScene(fileName, QLatin1String("bezier")); - if (!scene) - qFatal("Could not load %s, probably plugin could not be found", - fileName.toLatin1().constData()); - return scene; -} - -Teacup::Teacup(QObject *parent) - : MeshObject(loadBezier(QLatin1String(":/teacup.txt")), parent) -{ -} - -class Teaspoon : public MeshObject -{ - Q_OBJECT -public: - Teaspoon(QObject *parent=0); - ~Teaspoon() {} -}; - -Teaspoon::Teaspoon(QObject *parent) - : MeshObject(loadBezier(QLatin1String(":/teaspoon.txt")), parent) -{ -} - -class TeaService : public QObject -{ - Q_OBJECT -public: - TeaService(QObject *parent=0); - ~TeaService(); - - SceneObject *service; - - Teapot *teapot; - Teacup *teacup1; - Teacup *teacup2; - Teaspoon *teaspoon1; - Teaspoon *teaspoon2; - PerPixelEffect *lighting; - - void changeMaterials(bool perPixel); - -signals: - void changed(); - -private slots: - void teapotClicked(); - void teacup1Clicked(); - void teacup2Clicked(); - void teaspoon1Clicked(); - void teaspoon2Clicked(); - -private: - QGLMaterial *china; - QGLMaterial *chinaHighlight; - QGLMaterial *metal; - QGLMaterial *metalHighlight; -}; - -TeaService::TeaService(QObject *parent) - : QObject(parent) -{ - china = new QGLMaterial(this); - china->setAmbientColor(QColor(192, 150, 128)); - china->setSpecularColor(QColor(60, 60, 60)); - china->setShininess(128); - - chinaHighlight = new QGLMaterial(this); - chinaHighlight->setAmbientColor(QColor(255, 192, 0)); - chinaHighlight->setSpecularColor(QColor(60, 60, 0)); - chinaHighlight->setShininess(128); - - metal = new QGLMaterial(this); - metal->setAmbientColor(QColor(255, 255, 255)); - metal->setDiffuseColor(QColor(150, 150, 150)); - metal->setSpecularColor(QColor(255, 255, 255)); - metal->setShininess(128); - - metalHighlight = new QGLMaterial(this); - metalHighlight->setAmbientColor(QColor(255, 255, 96)); - metalHighlight->setDiffuseColor(QColor(150, 150, 96)); - metalHighlight->setSpecularColor(QColor(255, 255, 255)); - metalHighlight->setShininess(128); - - service = new SceneObject(this); - teapot = new Teapot(service); - teacup1 = new Teacup(service); - teacup2 = new Teacup(service); - teacup1->setPosition(QVector3D(-2.3f, -0.75f, 0.0f)); - teacup2->setRotationAngle(180); - teacup2->setRotationVector(QVector3D(0, 1, 0)); - teacup2->setPosition(QVector3D(2.3f, -0.75f, 0.0f)); - teaspoon1 = new Teaspoon(service); - teaspoon2 = new Teaspoon(service); - teaspoon1->setRotationAngle(275); - teaspoon1->setRotationVector(QVector3D(1, 0, 0)); - teaspoon1->setPosition(QVector3D(-1.7f, -0.58f, 0.0f)); - teaspoon2->setRotationAngle(275); - teaspoon2->setRotationVector(QVector3D(1, 0, 0)); - teaspoon2->setPosition(QVector3D(1.7f, -0.58f, 0.0f)); - - teapot->setObjectId(ObjTeapot); - teacup1->setObjectId(ObjTeacup1); - teacup2->setObjectId(ObjTeacup2); - teaspoon1->setObjectId(ObjTeaspoon1); - teaspoon2->setObjectId(ObjTeaspoon2); - - lighting = new PerPixelEffect(); - changeMaterials(false); - - connect(teapot, SIGNAL(hoverChanged()), this, SIGNAL(changed())); - connect(teacup1, SIGNAL(hoverChanged()), this, SIGNAL(changed())); - connect(teacup2, SIGNAL(hoverChanged()), this, SIGNAL(changed())); - connect(teaspoon1, SIGNAL(hoverChanged()), this, SIGNAL(changed())); - connect(teaspoon2, SIGNAL(hoverChanged()), this, SIGNAL(changed())); - - connect(teapot, SIGNAL(clicked()), this, SLOT(teapotClicked())); - connect(teacup1, SIGNAL(clicked()), this, SLOT(teacup1Clicked())); - connect(teacup2, SIGNAL(clicked()), this, SLOT(teacup2Clicked())); - connect(teaspoon1, SIGNAL(clicked()), this, SLOT(teaspoon1Clicked())); - connect(teaspoon2, SIGNAL(clicked()), this, SLOT(teaspoon2Clicked())); -} - -TeaService::~TeaService() -{ - delete lighting; -} - -void TeaService::changeMaterials(bool perPixel) -{ - teapot->setMaterial(china); - teapot->setHoverMaterial(chinaHighlight); - teacup1->setMaterial(china); - teacup1->setHoverMaterial(chinaHighlight); - teacup2->setMaterial(china); - teacup2->setHoverMaterial(chinaHighlight); - if (perPixel) { - teapot->setEffect(lighting); - teacup1->setEffect(lighting); - teacup2->setEffect(lighting); - } else - { - teapot->setEffect(0); - teacup1->setEffect(0); - teacup2->setEffect(0); - } - - teaspoon1->setMaterial(metal); - teaspoon1->setHoverMaterial(metalHighlight); - teaspoon2->setMaterial(metal); - teaspoon2->setHoverMaterial(metalHighlight); - if (perPixel) { - teaspoon1->setEffect(lighting); - teaspoon2->setEffect(lighting); - } else - { - teaspoon1->setEffect(0); - teaspoon2->setEffect(0); - } -} - -void TeaService::teapotClicked() -{ - qDebug("teapot clicked"); -} - -void TeaService::teacup1Clicked() -{ - qDebug("teacup1 clicked"); -} - -void TeaService::teacup2Clicked() -{ - qDebug("teacup2 clicked"); -} - -void TeaService::teaspoon1Clicked() -{ - qDebug("teaspoon1 clicked"); -} - -void TeaService::teaspoon2Clicked() -{ - qDebug("teaspoon2 clicked"); -} - -class TeaServiceView : public QGLView -{ - Q_OBJECT -public: - TeaServiceView(QWidget *parent=0); - -public slots: - void standardLighting(); - void perPixelLighting(); - -protected: - void initializeGL(QGLPainter *painter); - void paintGL(QGLPainter *painter); - void keyPressEvent(QKeyEvent *e); - -private: - TeaService *teaService; -}; - -TeaServiceView::TeaServiceView(QWidget *parent) - : QGLView(parent) -{ - teaService = new TeaService(this); - - setOption(QGLView::ObjectPicking, true); - - connect(teaService, SIGNAL(changed()), this, SLOT(updateGL())); -} - -void TeaServiceView::initializeGL(QGLPainter *painter) -{ - teaService->service->initialize(this, painter); -} - -void TeaServiceView::paintGL(QGLPainter *painter) -{ - teaService->service->draw(painter); -} - -void TeaServiceView::standardLighting() -{ - teaService->changeMaterials(false); - updateGL(); -} - -void TeaServiceView::perPixelLighting() -{ - teaService->changeMaterials(true); - updateGL(); -} - -void TeaServiceView::keyPressEvent(QKeyEvent *e) -{ - if (e->key() == Qt::Key_Tab) { - // The Tab key turns the ShowPicking option on and off, - // which helps show what the pick buffer looks like. - setOption(QGLView::ShowPicking, ((options() & QGLView::ShowPicking) == 0)); - updateGL(); - } - QGLView::keyPressEvent(e); -} - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - QMainWindow mainw; - mainw.setMinimumSize(850, 480); - mainw.setWindowTitle(QLatin1String("Tea Service")); - - TeaServiceView view; - mainw.setCentralWidget(&view); - view.setFocus(); - - view.camera()->setEye(QVector3D(0, 3, 10)); - - QMenu *menu = mainw.menuBar()->addMenu(QLatin1String("Effects")); - - QAction *standardLighting = new QAction(QLatin1String("Standard lighting"), &mainw); - menu->addAction(standardLighting); - QObject::connect(standardLighting, SIGNAL(triggered()), &view, SLOT(standardLighting())); - - QAction *perPixelLighting = new QAction(QLatin1String("Per-pixel lighting"), &mainw); - menu->addAction(perPixelLighting); - QObject::connect(perPixelLighting, SIGNAL(triggered()), &view, SLOT(perPixelLighting())); - - menu->addSeparator(); - - QAction *exitAction = new QAction(QLatin1String("E&xit"), &mainw); - menu->addAction(exitAction); - QObject::connect(exitAction, SIGNAL(triggered()), &app, SLOT(quit())); - -#ifdef Q_OS_SYMBIAN - mainw.setAttribute(Qt::WA_LockLandscapeOrientation, true); - mainw.showFullScreen(); -#endif - - view.updateGL(); - mainw.update(); - mainw.show(); - return app.exec(); -} - -#include "teaservice.moc" |