2017-05 http://blog.qt.io/blog/2017/05/24/qt3d/ Qt3D future 5.9 Use Qt Quick or QPainter to render into a texture Embed Qt Quick into Qt3D, including input handling Level of Detail support for meshes Text support - 2D and 3D Additional materials such as PBR materials others Generating and filling buffers out of QAbstractItemModels Billboards - camera facing entities Particle systems VR support new aspects: 碰撞检测 动画:关键帧动画;骨骼动画;Morph target animation; Removes animation workload from main thread 物理:刚体/柔体物理模拟 AI: 三维位置音效:如喇叭,越近越响 工具 设计时工具:场景设计器 Qt 3D Studio 编译时工具:资产状态监控 More 贴图控制 可yizhi算法(OpenGL) 各种3d模型的加载 2d ui嵌入到 3d里面用Scene2D Scene2D { id: qmlTexture output: RenderTargetOutput { attachmentPoint: RenderTargetOutput.Color0 texture: Texture2D { id: offscreenTexture } } entities: [ cube ] Item { id: customQtQuickStuff } } 纹理加载器 TextureLoader { source: "qrc:/assets/textures/pbr-default/pbr-default-metallic.png" minificationFilter: Texture.LinearMipMapLinear magnificationFilter: Texture.Linear wrapMode { x: WrapMode.ClampToEdge y: WrapMode.ClampToEdge } generateMipMaps: true } 新增材质 粗糙金属材质 MetalRoughMaterial 粗糙金属纹理材质 TexturedMetalRoughMaterial { baseColor: TextureLoader { format: Texture.SRGB8_Alpha8 source: "qrc:/assets/powerup/basecolor.png" } metalness: TextureLoader { source: "qrc:/assets/powerup/metalness.png" } roughness: TextureLoader { source: "qrc:/assets/powerup/roughness.png" } normal: TextureLoader { source: "qrc:/assets/powerup/normal.png" } ambientOcclusion: TextureLoader { source: "qrc:/assets/powerup/ambientocclusion.png" } } 新增环境光 EnvironmentLight { id: envLight irradiance: TextureLoader { source: "qrc:/assets/envmaps/wobbly-bridge/wobbly_bridge_4k" + _envmapFormat + "_cube_irradiance.dds" minificationFilter: Texture.LinearMipMapLinear magnificationFilter: Texture.Linear wrapMode { x: WrapMode.ClampToEdge y: WrapMode.ClampToEdge } generateMipMaps: false } specular: TextureLoader { source: "qrc:/assets/envmaps/wobbly-bridge/wobbly_bridge_4k" + _envmapFormat + "_cube_specular.dds" minificationFilter: Texture.LinearMipMapLinear magnificationFilter: Texture.Linear wrapMode { x: WrapMode.ClampToEdge y: WrapMode.ClampToEdge } generateMipMaps: false } } 天空盒实体 SkyboxEntity { baseName: "qrc:/assets/envmaps/wobbly-bridge/wobbly_bridge_4k" + _envmapFormat + "_cube_radiance" extension: ".dds" gammaCorrect: true } 相机增加曝光度属性 Camera { id: mainCamera position: Qt.vector3d(-10, 0, 0) viewCenter: Qt.vector3d(0, 0, 0) exposure: 1.4 // 曝光度 } 加载预设的动画 import Qt3D.Animation 2.9 ClipAnimator { id: animator loops: 3 clip: AnimationClipLoader { source: "qrc:/jumpinganimation.json" } channelMapper: ChannelMapper { mappings: [ ChannelMapping { channelName: "Location"; target: cubeTransform; property: "translation" }, ChannelMapping { channelName: "Rotation"; target: cubeTransform; property: "rotation" }, ChannelMapping { channelName: "Scale"; target: cubeTransform; property: "scale3D" } ] } } 对象选择器 ObjectPicker { onClicked: animator.running = true;} 根据远近来动态调整场景(volumeOverride) LevelOfDetail Entity { components: [ CylinderMesh { radius: 1 length: 3 rings: 2 slices: sliceValues[lod.currentIndex] property var sliceValues: [20, 10, 6, 4] }, Transform { rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45) }, PhongMaterial { diffuse: "lightgreen" }, LevelOfDetail { id: lod camera: camera thresholds: [1000, 600, 300, 180] thresholdType: LevelOfDetail.ProjectedScreenPixelSizeThreshold volumeOverride: lod.createBoundingSphere(Qt.vector3d(0, 0, 0), 2.0) } ] } LevelOfDetailSwitch Entity { components: [ LevelOfDetailSwitch { camera: camera thresholds: [20, 35, 50] thresholdType: LevelOfDetail.DistanceToCameraThreshold } ] HighDetailEntity { enabled: false } MediumDetailEntity { enabled: false } LowDetailEntity { enabled: false } } LevelOfDetailLoader LevelOfDetailLoader { id: lodLoader camera: camera thresholds: [20, 35, 50] thresholdType: LevelOfDetail.DistanceToCameraThreshold volumeOverride: lodLoader.createBoundingSphere(Qt.vector3d(0, 0, 0), -1) sources: ["qrc:/HighDetailEntity.qml", "qrc:/MediumDetailEntity.qml", "qrc:/LowDetailEntity.qml"] } 渲染文本 Text2DEntity Text2DEntity { id: text text: "Hello World" 20 height: 10 } ExtrudedTextMesh auto *text = new Qt3DCore::QEntity(root); auto *textTransform = new Qt3DCore::QTransform(); auto *textMesh = new Qt3DExtras::QExtrudedTextMesh(); textMesh->setDepth(.45f); QFont font(family, 32, -1, false); textMesh->setFont(font); textMesh->setText(QString(family)); auto *textMaterial = new Qt3DExtras::QPhongMaterial(root); textMaterial->setDiffuse(QColor(111, 150, 255)); text->addComponent(textTransform); text->addComponent(textMesh); text->addComponent(textMaterial);