Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Classes principales  ·  Annotées  ·  Classes groupées  ·  Modules  ·  Fonctions  · 

Basket Example

Basket in QML

The QML version of the basket example is very similar in structure to the C++ version above, but much simpler. We start by defining a viewport with a specific camera position:

 import QtQuick 2.0
 import Qt3D 1.0

 Viewport {
     width: parent.width; height: parent.height
     fillColor: "#000000"

     camera: Camera {
         eye: Qt.vector3d(0, 4, 10)
     }

We then add an Item3D object to load the basket model and apply the desired texture to it:

     Item3D {
         mesh: Mesh { source: "meshes/basket.bez" }
         effect: Effect { texture: "basket.jpg" }

And then we apply an animation to the rotation component of the item's transform property:

         transform: [
             Scale3D { scale: 1.5 },
             Rotation3D {
                 axis: Qt.vector3d(0, 1, 0)
                 NumberAnimation on angle {
                     running: true
                     loops: Animation.Infinite
                     from: 0
                     to: 360
                     duration: 2000
                 }
             }
         ]
     }
 }

Basket in Qt3D

The Basket example shows how Qt3D can be used to draw an animated object covered in a texture. The basic application shell is similar to the Hello Teapot example. In this case, we create the basket object and add a texture to it as follows:

     QGLBuilder builder;
     builder << BasketPatches();
     basket = builder.finalizedSceneNode();

     QGLMaterial *mat = new QGLMaterial;
     QUrl url;
     url.setPath(QLatin1String(":/basket.jpg"));
     url.setScheme(QLatin1String("file"));
     mat->setTextureUrl(url);
     basket->setMaterial(mat);
     basket->setEffect(QGL::LitModulateTexture2D);

For this animation, we want to spin the basket around its Y axis, once every 2 seconds. We first declare an angle property in the class declaration (calling update() will force the view to redraw whenever the angle changes):

 class BasketView : public QGLView
 {
     Q_OBJECT
     Q_PROPERTY(qreal angle READ angle WRITE setAngle)
 public:
     qreal angle() const { return m_angle; }
     void setAngle(qreal angle) { m_angle = angle; update(); }

Then we create a QPropertyAnimation object that will update angle every time through the event loop with a new value between 0 and 360 degrees:

     QPropertyAnimation *animation;
     animation = new QPropertyAnimation(this, "angle", this);
     animation->setStartValue(0.0f);
     animation->setEndValue(360.0f);
     animation->setDuration(2000);
     animation->setLoopCount(-1);
     animation->start();

Now all we have to do is draw the basket using the angle property every time paintGL() is called:

 void BasketView::paintGL(QGLPainter *painter)
 {
     painter->modelViewMatrix().rotate(angle(), 0, 1, 0);
     painter->modelViewMatrix().scale(1.5f);
     basket->draw(painter);
 }

Return to Examples.

Files:

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 5.0-snapshot
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web