En esta página

Cambios en Qt Quick 3D

Qt 6 es el resultado del esfuerzo consciente por hacer el framework más eficiente y fácil de usar.

Intentamos mantener la compatibilidad binaria y de código fuente de todas las API públicas en cada versión. Pero algunos cambios eran inevitables en un esfuerzo por hacer de Qt un framework mejor. Algunas partes de la API 3D de Qt Quick se han modificado sustancialmente.

En este tema resumimos esos cambios en Qt Quick 3D, y proporcionamos una guía para manejarlos.

RHI

Desde Qt 6.0 en adelante, la adaptación por defecto de Qt Quick siempre renderiza a través de una capa de abstracción gráfica, la Qt Rendering Hardware Interface (RHI), proporcionada por el módulo QtGui. Esto significa que, a diferencia de Qt 5, el gráfico de escena no realiza llamadas directas a OpenGL. En su lugar, registra los recursos y los comandos de dibujo utilizando las API RHI, que luego traducen el flujo de comandos en llamadas OpenGL, Vulkan, Metal o Direct 3D. El manejo de los sombreadores también se unifica escribiendo el código de sombreado una vez, compilándolo a SPIR-V y traduciéndolo después al lenguaje apropiado para las distintas API gráficas.

Para Qt Quick 3D el mayor cambio en Qt 6.0 es la migración a la interfaz común de hardware de renderizado, que permite a Qt Quick 3D ejecutarse en Direct3D, Metal y Vulkan además de OpenGL y OpenGL ES.

Qt Quick y Qt Quick 3D están ahora totalmente unificadas en este sentido. Cualquier ajuste de configuración relacionado con la RHI, por ejemplo, qué API gráfica elegir para renderizar, es aplicable a ambas.

Consulta Qt Quick 3D Graphics Requirements para más detalles.

Otros cambios en la API

Versión de importación de QML

A partir de Qt 6.0, el número de versión para las sentencias de importación QML es el mismo que el número de versión de Qt. Ahora también es posible importar un módulo sin especificar la versión: se importará la última versión del módulo.

Iluminación

Light brightness representa ahora un multiplicador de energía por defecto de 1,0, mientras que Qt 5 utilizaría un valor porcentual por defecto de 100. En la práctica, esto significa que todos los valores de brightness deben dividirse por 100.

SceneEnvironment.probeBrightness pasa a llamarse probeExposure y también se redefine para ser un multiplicador con un valor predeterminado de 1,0. Es decir, todos los valores de probeBrightness deben renombrarse a probeExposure y dividirse por 100.

AreaLight se ha eliminado por motivos de rendimiento. En muchos casos puede sustituirse por SpotLight, que se añadió en Qt Quick 3D 5.15.

Materiales personalizados

La API de materiales personalizados ha sido completamente rediseñada en la versión 6.0. Esto significa que cualquier material personalizado existente tendrá que ser reescrito sustancialmente. Consulte la documentación de CustomMaterial para obtener más información sobre la nueva API.

Efectos de posprocesamiento

Effect se ha mejorado para permitir un código de sombreado muy similar al que admite CustomMaterial, siguiendo los mismos patrones en cuanto a estructura y palabras clave incorporadas. Esto significa que los efectos existentes que impliquen código de sombreado personalizado tendrán que ser migrados antes de que puedan funcionar en Qt 6.0. Consulte la documentación de Effect para más detalles.

Material basado en principios

El tipo QML PrincipledMaterial se ha mejorado mucho en Qt Quick 6.0, y ahora sigue más de cerca los principios de la renderización basada en la física. Los modelos importados ahora deberían renderizarse correctamente sin cambiar las propiedades de los materiales. Los materiales existentes tendrán que ser cambiados para deshacer cualquier compensación por imprecisiones anteriores.

Algunas propiedades cambian sus valores por defecto:

Material por defecto

Algunas propiedades cambian sus valores por defecto:

Materiales predefinidos

En QtQuick3D 6.0 no se incluyen materiales predefinidos. Cualquier material que se añada en futuras versiones probablemente no será compatible con los antiguos. La importación de materiales no existe. (El tipo CustomMaterial se traslada a la importación base QtQuick3D.)

Estos son los tipos QML de materiales que se han eliminado en Qt 6.0:

  • AluminumAnodizedEmissiveMaterial
  • AluminumAnodizedMaterial
  • AluminumBrushedMaterial
  • AluminumEmissiveMaterial
  • AluminumMaterial
  • MaterialCobre
  • Vidrio esmerilado
  • VidrioEsmeriladoMaterialSinglePass
  • VidrioMaterial
  • VidrioMaterialRefractivo
  • PapelMaterialArtistic
  • PapelMaterialOficina
  • PlasticoEstructuradoRojoEmisivoMaterial
  • PlasticoEstructuradoRojoMaterial
  • SteelMilledConcentricMaterial

Teselación y mapas de desplazamiento

El modo de teselación de modelos ha desaparecido debido a la mayor atención prestada a la compatibilidad con hardware integrado. Además, como resultado, se ha eliminado de los materiales la compatibilidad con mapas de desplazamiento. Se pueden conseguir efectos similares con custom material.

Qt Quick Items como hijos de 3D Nodes

Aunque sintácticamente son idénticos, la forma en que se manejan internamente los elementos 2D hijos es bastante diferente. En Qt 6.0 no hay un paso implícito de renderizado a textura. En su lugar, el contenido 2D de Qt Quick se renderiza en línea, con la proyección de perspectiva adecuada, en el mismo paso de renderizado, lo que proporciona un mejor rendimiento, un menor uso de recursos y, en algunos casos, una fidelidad visual potencialmente mejorada (con Text, por ejemplo). Véase Qt Quick Escenas 3D con contenido 2D para una visión general.

Si atravesar una textura es importante por alguna razón (recorte, opacidad), haga del subárbol 2D Item una capa explícitamente configurando layer.enabled: true. De esta forma el comportamiento es más cercano al que proporcionaba Qt 5.15.

El contenido 2D ya no está centrado en el origen del Nodo padre. En su lugar, es la esquina superior izquierda del Elemento 2D de nivel superior la que se sitúa en el origen del Nodo 3D. Por lo tanto, el Elemento 2D de nivel superior a menudo querrá especificar un ancla, como, anchors.centerIn: parent, para obtener resultados que coincidan con Qt 5.15.

© 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.