本页内容

WavefrontMesh QML Type

WavefrontMesh 提供基于 Wavefront .obj 文件的网格。更多内容...

Import Statement: import Qt.labs.wavefrontmesh 1.12

属性

详细说明

WavefrontMesh 从 Wavefront .obj 文件中读取几何信息,并据此生成二维的geometry 。如果 .obj 文件包含三维形状,则该形状将被正交投影到一个平面上。 如果已定义,则由projectionPlaneV 和projectionPlaneW 确定。否则,将使用数据中遇到的第一个面来确定投影平面。

如果文件包含纹理坐标,这些坐标也将被使用。否则,将对对象的顶点进行归一化处理后使用。

该网格可在ShaderEffect 中用于定义带着色效果的几何体。该几何体在使用前会进行归一化处理,因此输入对象的位置和缩放比例不会影响结果。

注意:某些 Wavefront 导出器会在导出前更改源场景的坐标系。这可能会导致 Qt 应用投影时出现意外结果。如果视觉效果与预期不符,请检查导出参数和编辑器工具的文档,以确认是否存在此情况。

例如,以下示例使用一个包含标准环面的 .obj 文件,并可视化自动生成的纹理坐标。

具有渐变纹理坐标的环面形状

import QtQuick 2.\1
import Qt.labs.wavefrontmesh 1.\1

ShaderEffect {
    width: 200
    height: 200
    mesh: WavefrontMesh {
        source: "torus.obj"
        projectionPlaneV: Qt.vector3d(0, 1, 0)
        projectionPlaneW: Qt.vector3d(1, 0, 0)
    }
    vertexShader: "
            uniform highp mat4 qt_Matrix;
            attribute highp vec4 qt_Vertex;
            attribute highp vec2 qt_MultiTexCoord0;
            varying highp vec2 coord;
            void main() {
                coord = qt_MultiTexCoord0;
                gl_Position = qt_Matrix * qt_Vertex;
            }"
    fragmentShader: "
            varying highp vec2 coord;
            uniform lowp float qt_Opacity;
            void main() {
                gl_FragColor = vec4(coord.x, coord.y, 0.0, 1.0);
            }"

}

注意:由于 输入对象是 3D 环面,我们需要定义投影平面。若使用 2D 形状作为输入,则无需此步骤。在此示例中,鉴于输入对象的朝向,我们使用 XY 平面。

属性文档

lastError : enumeration

该属性保存解析源数据或构建网格时发生的最后一个错误(如有)。

  • WavefrontMesh.NoError 未发生任何错误。
  • WavefrontMesh.InvalidSourceError 源文件未被识别为有效的 .obj 文件。
  • WavefrontMesh.UnsupportedFaceShapeError 源中的面类型不受支持。WavefrontMesh 仅支持三角形和凸四边形。
  • WavefrontMesh.UnsupportedIndexSizeError 源形状过大。仅支持 16 位索引。
  • WavefrontMesh.FileNotFoundError 未找到源文件。
  • WavefrontMesh.MissingPositionAttributeError 着色器中缺少“qt_Vertex”属性。
  • WavefrontMesh.MissingTextureCoordinateAttributeError 着色器中的纹理坐标属性命名错误。请使用 'qt_MultiTexCoord0'。
  • WavefrontMesh.MissingPositionAndTextureCoordinateAttributesError 着色器中同时缺少 'qt_Vertex' 和 'qt_MultiTexCoord0' 属性。
  • WavefrontMesh.TooManyAttributesError 着色器期望的属性过多(最多两个:位置 'qt_Vertex' 和纹理坐标 'qt_MultiTexCoord0')。
  • WavefrontMesh.无效平面定义错误 平面中的 V 和 W 向量不能为空,也不能彼此平行。

projectionPlaneV : vector3d

由于 Wavefront .obj 格式描述的是三维空间中的对象,因此必须先将坐标投影到二维平面,才能在Qt Quick 中显示。

在WavefrontMesh 中,这将通过将坐标正交投影到适当的平面上来实现。

projectionPlaneV 是三维空间中该平面上的两个向量之一。如果该向量或projectionPlaneW 被设置为 (0, 0, 0)(默认值),则将根据数据集中遇到的第一个面来检测该平面。

注意:`projectionPlaneV ` 和 `projectionPlaneW ` 不能是平行向量。

projectionPlaneW : vector3d

由于 Wavefront .obj 格式描述的是三维空间中的物体,因此在Qt Quick 中显示之前,必须将坐标投影到二维平面。

在WavefrontMesh 中,这将通过将坐标正交投影到一个合适的平面上来实现。

projectionPlaneW 是三维空间中该平面上的两个向量之一。如果该向量或projectionPlaneV 被设置为 (0, 0, 0)(默认值),则将根据数据集中遇到的第一个面来检测该平面。

注意: projectionPlaneV 和 projectionPlaneW 不能是平行向量。

source : url

该属性存储源文件的 URL。该文件必须是本地文件或位于 qrc 中。源文件将被读取为 Wavefront .obj 文件,并更新几何体。

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