QtMobility Reference Documentation

material.cpp Example File

sensors/cubehouse/material.cpp
 /****************************************************************************
 **
 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/legal
 **
 ** This file is part of the examples of the Qt Mobility Components.
 **
 ** $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 Digia Plc 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 "material.h"

 /*!
     \class Material
     \brief The Material class describes material properties for OpenGL drawing.
     \since 4.7
     \ingroup qt3d
     \ingroup qt3d::painting
 */

 class MaterialPrivate
 {
 public:
     explicit MaterialPrivate();

     QColor basicColor;
     QColor ambientColor;
     QColor diffuseColor;
     QColor specularColor;
     QColor emittedLight;
     qreal shininess;
 };

 MaterialPrivate::MaterialPrivate()
     : basicColor(255, 255, 255, 255),
       specularColor(0, 0, 0, 255),
       emittedLight(0, 0, 0, 255),
       shininess(0)
 {
     ambientColor.setRgbF(0.2f, 0.2f, 0.2f, 1.0f);
     diffuseColor.setRgbF(0.8f, 0.8f, 0.8f, 1.0f);
 }

 /*!
     Constructs a Material object with its default values,
     and attaches it to \a parent.
 */
 Material::Material(QObject *parent)
     : QObject(parent), d_ptr(new MaterialPrivate)
 {
 }

 /*!
     Destroys this Material object.
 */
 Material::~Material()
 {
 }

 /*!
     \property Material::basicColor
     \brief the basic color of the material.  The default value
     is (1.0, 1.0, 1.0, 1.0).

     The basic color is used by effects that don't implement
     material-based lighting.  It is ignored by material-based
     lighting effects.

     \sa ambientColor(), diffuseColor(), basicColorChanged(), setColor()
 */
 QColor Material::basicColor() const
 {
     Q_D(const Material);
     return d->basicColor;
 }

 void Material::setBasicColor(const QColor& value)
 {
     Q_D(Material);
     if (d->basicColor != value) {
         d->basicColor = value;
         emit basicColorChanged();
         emit materialChanged();
     }
 }

 /*!
     \property Material::ambientColor
     \brief the ambient color of the material.  The default value
     is (0.2, 0.2, 0.2, 1.0).

     \sa diffuseColor(), specularColor(), ambientColorChanged()
 */
 QColor Material::ambientColor() const
 {
     Q_D(const Material);
     return d->ambientColor;
 }

 void Material::setAmbientColor(const QColor& value)
 {
     Q_D(Material);
     if (d->ambientColor != value) {
         d->ambientColor = value;
         emit ambientColorChanged();
         emit materialChanged();
     }
 }

 /*!
     \property Material::diffuseColor
     \brief the diffuse color of the material.  The default value
     is (0.8, 0.8, 0.8, 1.0).

     \sa ambientColor(), specularColor(), diffuseColorChanged()
 */
 QColor Material::diffuseColor() const
 {
     Q_D(const Material);
     return d->diffuseColor;
 }

 void Material::setDiffuseColor(const QColor& value)
 {
     Q_D(Material);
     if (d->diffuseColor != value) {
         d->diffuseColor = value;
         emit diffuseColorChanged();
         emit materialChanged();
     }
 }

 /*!
     \property Material::specularColor
     \brief the specular color of the material.  The default value
     is (0, 0, 0, 1).

     \sa ambientColor(), diffuseColor(), specularColorChanged()
 */
 QColor Material::specularColor() const
 {
     Q_D(const Material);
     return d->specularColor;
 }

 void Material::setSpecularColor(const QColor& value)
 {
     Q_D(Material);
     if (d->specularColor != value) {
         d->specularColor = value;
         emit specularColorChanged();
         emit materialChanged();
     }
 }

 /*!
     \property Material::emittedLight
     \brief the emitted light intensity of the material.
     The default value is (0.0, 0.0, 0.0, 1.0), which indicates
     that the material does not emit any light.

     \sa emittedLightChanged()
 */
 QColor Material::emittedLight() const
 {
     Q_D(const Material);
     return d->emittedLight;
 }

 void Material::setEmittedLight(const QColor& value)
 {
     Q_D(Material);
     if (d->emittedLight != value) {
         d->emittedLight = value;
         emit emittedLightChanged();
         emit materialChanged();
     }
 }

 /*!
     \property Material::color
     \brief the overall color of the material.  The default value
     is (1.0, 1.0, 1.0, 1.0).

     This is a convenience property.  When read it returns basicColor().
     When written, it sets basicColor() to the value, ambientColor()
     to 20% of the value, and diffuseColor() to 80% of the value.
     The result is that regardless of whether lighting is used or not,
     the material will appear to have a similar color.

     \sa basicColor(), ambientColor(), diffuseColor()
 */
 QColor Material::color() const
 {
     Q_D(const Material);
     return d->basicColor;
 }

 void Material::setColor(const QColor& value)
 {
     Q_D(Material);
     d->basicColor = value;
     d->ambientColor.setRgbF
         (value.redF() * 0.2f, value.greenF() * 0.2f,
          value.blueF() * 0.2f, value.alphaF());
     d->diffuseColor.setRgbF
         (value.redF() * 0.8f, value.greenF() * 0.8f,
          value.blueF() * 0.8f, value.alphaF());
     emit basicColorChanged();
     emit ambientColorChanged();
     emit diffuseColorChanged();
     emit materialChanged();
 }

 /*!
     \property Material::shininess
     \brief the specular exponent of the material, or how shiny it is.
     Must be between 0 and 128.  The default value is 0.  A value outside
     this range will be clamped to the range when the property is set.

     \sa shininessChanged()
 */
 qreal Material::shininess() const
 {
     Q_D(const Material);
     return d->shininess;
 }

 void Material::setShininess(qreal value)
 {
     Q_D(Material);
     if (value < 0)
         value = 0;
     else if (value > 128)
         value = 128;
     if (d->shininess != value) {
         d->shininess = value;
         emit shininessChanged();
         emit materialChanged();
     }
 }

 /*!
     \fn void Material::basicColorChanged()

     This signal is emitted when basicColor() changes.

     \sa basicColor(), setBasicColor(), materialChanged()
 */

 /*!
     \fn void Material::ambientColorChanged()

     This signal is emitted when ambientColor() changes.

     \sa ambientColor(), setAmbientColor(), materialChanged()
 */

 /*!
     \fn void Material::diffuseColorChanged()

     This signal is emitted when diffuseColor() changes.

     \sa diffuseColor(), setDiffuseColor(), materialChanged()
 */

 /*!
     \fn void Material::specularColorChanged()

     This signal is emitted when specularColor() changes.

     \sa specularColor(), setSpecularColor(), materialChanged()
 */

 /*!
     \fn void Material::emittedLightChanged()

     This signal is emitted when emittedLight() changes.

     \sa emittedLight(), setEmittedLight(), materialChanged()
 */

 /*!
     \fn void Material::shininessChanged()

     This signal is emitted when shininess() changes.

     \sa shininess(), setShininess(), materialChanged()
 */

 /*!
     \fn void Material::materialChanged()

     This signal is emitted when one of basicColor(), ambientColor(),
     diffuseColor(), specularColor(), emittedLight(), shiniess(),
     or texture() changes.

     \sa basicColorChanged(), ambientColorChanged(), diffuseColorChanged()
     \sa specularColorChanged(), emittedLightChanged(), shininessChanged()
     \sa texturesChanged()
 */
X

Thank you for giving your feedback.

Make sure it is related to this specific page. For more general bugs and requests, please use the Qt Bug Tracker.