Revision control
Copy as Markdown
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example customshaders
\ingroup quick3d-examples
\title Qt Quick 3D - Custom Shaders Example
\examplecategory {3D}
\brief Demonstrates the use of custom vertex and fragment shaders.
This example demonstrates using a material with completely custom vertex
and fragment shader code.
\image customshaders-example.jpg
{Rainbow-colored sphere with wave deformation and shader settings}
This example is the counterpart to the \l{Qt Quick 3D - Custom Materials
Example}{custommaterials} example, which demonstrates the other group of
custom materials: \c shaded materials where the shader code snippet
augments a PrincipledMaterial, rather than replacing it.
\section1 Implementing a custom material
In this example, a mesh is deformed by the vertex shader according to a
sine function. The end result is controlled by two sliders corresponding to
the time and amplitude values of the sine function.
The fragment shader is used to color the mesh according to the position
values of the vertices. There are two fragment shaders included: one with
and without texturing. The textured version samples a texture that is
source from either an image file, or from a live Qt Quick layer.
The material does not participate in the default lighting or shadowing
system, and therefore has its \l{CustomMaterial::shadingMode}{shadingMode}
property set to \c CustomMaterial.Unshaded.
See \l CustomMaterial for a detailed description of custom material
capabilities.
\snippet customshaders/ExampleMaterial.qml implementation
\section1 Using a custom material
A custom material using custom shaders is used the same way as any other
material. The uniforms in the shader can be easily updated through QML
property bindings.
\snippet customshaders/main.qml use
*/