/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example advancedcustommaterial
    \title Qt 3D: Advanced Custom Material QML Example
    \ingroup qt3d-examples-qml
    \brief Demonstrates creating advanced materials in Qt3D.

    \image advanced-custom-material.jpg

    \e This example demonstrates creating advanced custom materials.

    \include examples-run.qdocinc

    \section1 Description

    Advanced custom material example shows more complex shaders, and demonstrates controlling your
    shader properties with QtQuick user interface and Animation. Water is a 3D mesh, that is
    modeled and uv mapped inside Blender, and then brought into Scene 3D as an \c {.obj} file.
    Shader properties that user can control, are defined in \c {advancedcustommaterial/WaterMaterial.qml}.

    \section1 Controls
    \section2 Texture scale slider

    Multiplies texture coordinates inside the vertex shader. Controls the size of the textures
    on water surface.

    \section2 Texture speed slider

    Offsets values for texture coordinates which are animated in
    \c {advancedcustommaterial/Water.qml} and then passed to vertex shader.
    Creates the effect of textures scrolling over the surface.

    \section2 Specularity

    Multiplies specular texture values inside fragment shader. Makes the water reflective.

    \section2 Distortion

    Multiplies the offset in red and blue channels of wave texture in fragment shader.
    Makes the surface textures animate more randomly.

    \section2 Normal amount

    Multiplies the normal map values inside fragment shader. Controls the visibility of
    smaller waves on the water surface.

    \section2 Wave speed

    Modifies the frequency of the sine wave inside vertex shader. Controls the speed of the waves.

    \section2 Wave height

    Multiplies the vertex \c {Y} position inside vertex shader. Controls the height of the waves.

    \section2 Mesh rotation

    Rotates the water mesh in \c {advancedcustommaterial/Water.qml}.
*/
