Qt 3D: Exemple simple de matériau personnalisé en QML
Illustre la création d’un matériau personnalisé dans Qt 3D.

Cet exemple montre comment créer un matériau personnalisé simple.
Exécution de l'exemple
Vous pouvez exécuter l'exemple à partir de :
- Qt Creator
Ouvrez le mode « Welcome » et sélectionnez l'exemple dans « Examples ». Pour plus d'informations, consultez Qt Creator: Tutoriel : Compiler et exécuter.
- Qt Extension for Visual Studio Code
Exécutez la commande « Qt: Open Qt examples » à partir de Command Palette, puis sélectionnez l’exemple dans la liste. Pour plus d’informations, consultez Qt Extension for Visual Studio Code: Tutoriel : Compiler et exécuter.
Spécification de la scène
L'exemple utilise Scene3D pour rendre une scène qui utilisera le matériau personnalisé. La scène contient un modèle de plan qui utilise le matériau personnalisé.
Entity {
id: root
components: [transform, mesh, material]
SimpleMaterial {
id: material
maincolor: "red"
}
Transform {
id: transform
rotationX: 45
}
PlaneMesh {
id: mesh
width: 1.0
height: 1.0
meshResolution: Qt.size(2, 2)
}
}Spécification du matériau
Le matériau est défini dans simplecustommaterial/SimpleMaterial.qml à l’aide du type « Material ». Le matériau spécifie d’abord des paramètres, qui sont mappés aux uniformes correspondants dans les shaders afin de pouvoir être modifiés depuis le fichier QML.
property color maincolor: Qt.rgba(0.0, 0.0, 0.0, 1.0)
parameters: [
Parameter {
name: "maincolor"
value: Qt.vector3d(root.maincolor.r, root.maincolor.g, root.maincolor.b)
}
]Ensuite, nous spécifions quels shaders sont chargés. Des versions distinctes des shaders sont fournies pour les moteurs de rendu OpenGL ES 2 et OpenGL.
property string vertex: "qrc:/shaders/gl3/simpleColor.vert"
property string fragment: "qrc:/shaders/gl3/simpleColor.frag"
property string vertexRHI: "qrc:/shaders/gl45/simpleColor.vert"
property string fragmentRHI: "qrc:/shaders/gl45/simpleColor.frag"
property string vertexES: "qrc:/shaders/es2/simpleColor.vert"
property string fragmentES: "qrc:/shaders/es2/simpleColor.frag"Dans le shader de sommets, nous nous contentons de transformer la position à l’aide des matrices de transformation.
void main()
{
// Transform position, normal, and tangent to world coords
worldPosition = vec3(modelMatrix * vec4(vertexPosition, 1.0));
// Calculate vertex position in clip coordinates
gl_Position = mvp * vec4(worldPosition, 1.0);
}Dans le shader de fragment, nous définissons simplement la couleur du fragment comme étant la couleur principale spécifiée dans le matériau.
uniform vec3 maincolor;
void main()
{
//output color from material
fragColor = vec4(maincolor,1.0);
}Ensuite, nous créons des « ShaderPrograms » à partir des shaders.
ShaderProgram {
id: gl3Shader
vertexShaderCode: loadSource(parent.vertex)
fragmentShaderCode: loadSource(parent.fragment)
}
ShaderProgram {
id: es2Shader
vertexShaderCode: loadSource(parent.vertexES)
fragmentShaderCode: loadSource(parent.fragmentES)
}
ShaderProgram {
id: rhiShader
vertexShaderCode: loadSource(parent.vertexRHI)
fragmentShaderCode: loadSource(parent.fragmentRHI)
}Enfin, les programmes de shaders sont utilisés dans les techniques correspondant à un profil API spécifique.
// OpenGL 3.1
Technique {
filterKeys: [forward]
graphicsApiFilter {
api: GraphicsApiFilter.OpenGL
profile: GraphicsApiFilter.CoreProfile
majorVersion: 3
minorVersion: 1
}
renderPasses: RenderPass {
shaderProgram: gl3Shader
}
},© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.