【发布时间】:2019-03-05 06:50:07
【问题描述】:
我正在尝试创建一个基本的 QML 应用程序,该应用程序将从 .obj 文件加载 3D 模型并将其显示在屏幕上,并能够在运行时沿其轴旋转它。我浏览了一些 Qt 示例并提出了以下代码——其中大部分是从工作示例中借来的。但是当我运行它时,模型没有正确渲染。
实际模型如下:
目前我的应用显示为
.
这是 QML 代码 -
import Qt3D.Core 2.12
import Qt3D.Render 2.12
import Qt3D.Extras 2.12
Entity {
id: sceneRoot
Camera {
id: camera
projectionType: CameraLens.PerspectiveProjection
fieldOfView: 45
aspectRatio: 1820 / 1080
nearPlane: 0.1
farPlane: 1000.0
position: Qt.vector3d(0.014, 0.956, 2.178)
upVector: Qt.vector3d(0.0, 1.0, 0.0)
viewCenter: Qt.vector3d(0.0, 0.7, 0.0)
}
Entity {
components: [
DirectionalLight {
intensity: 0.9
worldDirection: Qt.vector3d(0, 0.6, -1)
}
]
}
RenderSettings {
id: external_forward_renderer
activeFrameGraph: ForwardRenderer {
camera: camera
clearColor: "transparent"
}
}
Mesh {
id: roboMesh
source: "images/robo-obj-pose4/source/d2f0cff60afc40f5afe79156ec7db657.obj"
}
Entity {
id: circleEntity
property Material roboMaterial: PhongAlphaMaterial {
alpha: 0.4
ambient: "black"
diffuse: "black"
specular: "black"
shininess: 10000
}
components: [roboMesh, roboMaterial]
}
}
我在这里缺少什么?很抱歉提出一个非常愚蠢的问题,但我对 Qt3D 完全陌生,并且对我的代码中还需要添加什么感到困惑。
【问题讨论】:
-
obj文件不存储与材质或纹理相关的数据。它们只存储几何数据。.mtl文件中定义了对网格不同部分的材质的引用。您应该提供 .obj、.mtl 和所有纹理文件。 -
纹理(一堆 png 文件)已经存在于同一文件夹路径 - images/robo-obj-pose4/textures 中。我是否也需要在 QML 代码中的某处添加此路径?此外,在我的情况下,我没有看到任何 .mtl 文件。它只是 obj 和纹理。
-
我不确定 Qt3D 是否会自动加载 mtl 中提供的材料。无论如何,我认为您应该在 qml 代码中提供 mtl 文件或定义自定义材料实体。