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  · 

QGLAbstractMaterial Class

The QGLAbstractMaterial class provides a standard interface for rendering surface materials with GL. More...

 #include <QGLAbstractMaterial>

Inherits: QObject.

Inherited by: QGLColorMaterial, QGLMaterial, and QGLTwoSidedMaterial.

This class was introduced in Qt 4.8.

Public Functions

QGLAbstractMaterial(QObject * parent = 0)
~QGLAbstractMaterial()
virtual QGLMaterial * back() const
virtual void bind(QGLPainter * painter) = 0
virtual QGLMaterial * front() const
virtual bool isTransparent() const = 0
virtual void prepareToDraw(QGLPainter * painter, const QGLAttributeSet & attributes)
virtual void release(QGLPainter * painter, QGLAbstractMaterial * next) = 0
  • 31 public functions inherited from QObject

Signals

void materialChanged()

Additional Inherited Members

  • 1 property inherited from QObject
  • 1 public slot inherited from QObject
  • 11 static public members inherited from QObject
  • 9 protected functions inherited from QObject

Detailed Description

The QGLAbstractMaterial class provides a standard interface for rendering surface materials with GL.

Materials are the primary method to specify the surface appearance of an object, as distinct from the geometry for the object. Materials have an almost endless variety of parameters:

  • Properties of the material under various lighting conditions; i.e., the traditional parameters for ambient, diffuse, specular, etc.
  • Textures in multiple layers, with different combination modes; decal, modulate, replace, etc.
  • Environmental conditions such as fogging.
  • Alpha values for opacity and blending.
  • Interpolation factors for animated surface effects.
  • etc

QGLAbstractMaterial is the base class for all such materials. It provides a very simple API to bind() a material to a QGLPainter when the material needs to be rendered, to release() a material from a QGLPainter when the material is no longer needed, and to prepareToDraw().

Subclasses of QGLAbstractMaterial implement specific materials. QGLMaterial provides the traditional ambient, diffuse, specular, etc parameters for lighting properties.

Materials are distinct from effects, which have the base class QGLAbstractEffect. Effects are typically shader programs that are used to render a specific type of material. The material's bind() function will use QGLPainter::setStandardEffect() or QGLPainter::setUserEffect() to select the exact effect that is needed to render the material.

It is possible that the same material may be rendered with different effects depending upon the material parameters. For example, a lit material may select a simpler and more efficient shader program effect if the material has the default spotlight properties, or if the QGLPainter only has a single light source specified.

See also QGLMaterial and QGLAbstractEffect.

Member Function Documentation

QGLAbstractMaterial::QGLAbstractMaterial(QObject * parent = 0)

Constructs a new material and attaches it to parent.

QGLAbstractMaterial::~QGLAbstractMaterial()

Destroys this material.

QGLMaterial * QGLAbstractMaterial::back() const [virtual]

Returns the material lighting parameters for rendering the back faces of fragments with this abstract material. The default implementation returns null, which indicates that front() is also used to render back faces.

See also front() and QGLMaterial.

void QGLAbstractMaterial::bind(QGLPainter * painter) [pure virtual]

Binds resources to painter that are needed to render this material; textures, shader programs, blending modes, etc.

In the following example, lit material parameters and a texture are bound to the painter, for rendering with the standard QGL::LitModulateTexture2D effect:

 void TexturedLitMaterial::bind(QGLPainter *painter)
 {
     painter->setStandardEffect(QGL::LitModulateTexture2D);
     painter->setFaceMaterial(QGL::AllFaces, material);
     painter->glActiveTexture(GL_TEXTURE0);
     texture->bind();
 }

Normally the effect is bound to painter during the bind() function. However, some materials may need to use different effects depending upon which attributes are present in the geometry. For example, a per-vertex color effect instead of a uniform color effect if the geometry has the QGL::Color attribute. The prepareToDraw() function can be overridden to alter the effect once the specific set of geometry attributes are known.

See also release() and prepareToDraw().

QGLMaterial * QGLAbstractMaterial::front() const [virtual]

Returns the material lighting parameters for rendering the front faces of fragments with this abstract material. The default implementation returns null.

This function is provided as a convenience for applications that wish to alter the lighting parameters or textures of a material, without regard to any wrapping that has been performed to add blending or other options.

See also back() and QGLMaterial.

bool QGLAbstractMaterial::isTransparent() const [pure virtual]

Returns true if this material is transparent and will therefore require the GL_BLEND mode to be enabled to render the material. Returns false if the material is fully opaque.

void QGLAbstractMaterial::materialChanged() [signal]

Signal that is emitted when an object that is using this material should be redrawn because some property on the material has changed.

void QGLAbstractMaterial::prepareToDraw(QGLPainter * painter, const QGLAttributeSet & attributes) [virtual]

Prepares to draw geometry to painter that has the specified set of vertex attributes. The default implementation does nothing.

Multiple effects may be used to render some materials depending upon the available vertex attributes. For example, if QGL::Color is present in attributes, then a per-vertex color should be used instead of a single uniform color.

This function is provided for such materials to have one last chance during QGLPainter::draw() to alter the QGLPainter::effect() to something that is tuned for the specific geometry. It can be assumed that bind() has already been called on this material.

See also bind() and release().

void QGLAbstractMaterial::release(QGLPainter * painter, QGLAbstractMaterial * next) [pure virtual]

Releases resources from painter that were used to render this material. The QGLPainter::effect() can be left bound to painter, but other resources such as textures and blending modes should be disabled.

If next is not null, then it indicates the next material that will be bound to painter. If next is the same type of material as this material, then this function can choose not to release resources that would be immediately re-bound to painter in the next call to bind().

In the following example, texture unit 0 is unbound if painter is about to switch to another effect that is not an instance of TexturedLitMaterial:

 void TexturedLitMaterial::release(QGLPainter *painter, QGLAbstractMaterial *next)
 {
     if (!qobject_cast<TexturedLitMaterial *>(next)) {
         painter->glActiveTexture(GL_TEXTURE0);
         glBindTexture(GL_TEXTURE_2D, 0);
     }
 }

See also bind() and prepareToDraw().

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