Qml 3D学习笔记(一)

本文介绍了如何在QtQuick应用中利用View3D组件展示3D场景,包括设置相机、光照、材质和交互功能,展示了3D物体的渲染与动态效果的实现过程。
摘要由CSDN通过智能技术生成

一般理解成一个摄影棚,人在里面用照相机给物体拍照,拍的照片显示在画面中。
import QtQuick.Window
import QtQuick3D
import QtQuick
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
    View3D {//显示3D的舞台(摄影棚)
        id: _view
        anchors.fill: parent

        environment: SceneEnvironment {//environment设置渲染场景
            //SceneEnvironment为场景的渲染方式定义了一组全局属性。
            clearColor: "red"//环境颜色
            backgroundMode: SceneEnvironment.Color
            antialiasingMode: SceneEnvironment.MSAA
            antialiasingQuality: SceneEnvironment.High
        }
        camera: camera
        PerspectiveCamera {//定义用于查看三维场景内容的透视摄影机(摄像机)。
            id: camera
            position: Qt.vector3d(0, -900, 800)//摄像机位置
            eulerRotation.x: 45//x轴旋转45度
        }

        MouseArea {
            anchors.fill: parent
            onClicked: (mouse)=> {
                let ret = _view.pick(mouse.x, mouse.y)
                if(ret.objectHit !== null)
                    ret.objectHit.materials[0].diffuseColor =
                           Qt.rgba(Math.random(),Math.random(), Math.random(), 1.0)

            }
        }

        DirectionalLight {//场景灯光
           eulerRotation: Qt.vector3d(1, 0, 0)
           castsShadow: true
           brightness: 3
        }

        Model {//物体(拍照对象)
            id: _sphere
            source: "#Sphere"//球
            z: 300
            pickable: true
            scale: Qt.vector3d(2, 2, 2)
            materials: DefaultMaterial {//定义三维材质材质
                diffuseColor: Qt.rgba(0.6, 0.5, 0.2, 1.0)//着色
                 diffuseLightWrap:0//
            }
        }


        Model {
            source: "#Rectangle"
            pickable: true
            scale: Qt.vector3d(10, 10, 1)
            materials: DefaultMaterial {
                diffuseColor: Qt.rgba(0.7, 0.2, 0.2, 1.0)
            }
        }
    }

}

 

在QML中,View3D是用于展示和演示3D场景的组件,它是QtQuick3D部分的一部分。View3D允许开发者在Qt Quick应用程序中嵌入和渲染3D物体和场景。

View3D的作用包括但不限于以下几个方面:

1. 3D场景展示:View3D用于展示3D场景,将渲染的结果显示在窗口或其他绘图表面上。开发者可以通过设置各种属性来控制场景的呈现,如相机视角、背景色、清除模式等。

2. 相机控制:View3D提供了用于控制相机位置和视角的属性和方法。开发者可以通过设置相机的位置、方向、缩放等属性来调整视角,并可以使用动画或交互操作来实现相机的平移、旋转、缩放等动作。

3. 光照与阴影:View3D支持设置光照和阴影的属性以实现逼真的渲染效果。开发者可以设置灯光的位置、颜色、强度等属性,选择光照模型(如兰伯特、漫反射、镜面反射等),以及开启或关闭阴影效果。

4. 材质与纹理:View3D支持设置物体的材质和纹理属性。开发者可以设置物体的颜色、反射、透明度等材质属性,以及为物体添加各种纹理(如贴图、法线贴图、环境贴图等),以实现更真实的外观效果。

5. 动画与交互:View3D支持通过动画和交互来控制和展示3D物体的动态效果。开发者可以使用QML的动画系统来创建物体的平移、旋转、缩放等动画效果,也可以通过交互操作(如鼠标事件、触摸事件等)来实现用户与3D场景的交互。

View3D的属性包括但不限于以下几个常用属性:

1. scene: 设置View3D所使用的3D场景的根实体(Entity)。

2. camera: 设置相机与其参数,包括位置、方向、视场角等。

3. backgroundColor: 设置背景颜色。

4. clearColor: 设置颜色用于清除屏幕帧缓冲。

5. renderTarget: 设置要渲染的目标表面。

6. shadowsEnabled: 设置是否启用阴影效果。

7. shadowMapSize: 设置阴影贴图的大小。

8. environment: 设置场景环境(SceneEnvironment),用于配置光照、雾效等渲染参数。

总结来说,View3D是用于展示和渲染3D场景的组件,可以通过设置属性来控制相机、背景色、材质、光照等,用于实现功能丰富的360度观察和交互式呈现的3D界面。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QML 3D 中,可以通过修改 3D 模型的 `transform` 属性来移动模型。`transform` 属性是一个 `Qt3DCore::QTransform` 类型的对象,它定义了模型在 3D 空间中的位置、旋转和缩放等属性。 以下是一个简单的 QML 3D 代码示例,演示如何移动一个 3D 模型: ``` import Qt3D.Core 2.12 import Qt3D.Render 2.12 import Qt3D.Extras 2.12 import QtQuick.Controls 2.12 import QtQuick.Scene3D 2.12 Scene3D { width: 640 height: 480 // 相机 Camera { id: camera projectionType: CameraLens.PerspectiveProjection fieldOfView: 45 aspectRatio: scene3d.width / scene3d.height nearPlane : 0.1 farPlane : 1000.0 position: Qt.vector3d(0.0, 0.0, 40.0) upVector: Qt.vector3d(0.0, 1.0, 0.0) viewCenter: Qt.vector3d(0.0, 0.0, 0.0) } // 3D 模型 Entity { id: model Mesh { source: "qrc:/myModel.obj" } Material { effect: StandardEffect { diffuse: Qt.rgba(1.0, 1.0, 1.0, 1.0) specular: Qt.rgba(0.5, 0.5, 0.5, 1.0) shininess: 50.0 } } transform: Translate { x: 0.0; y: 0.0; z: 0.0 } } // 场景根节点 Entity { id: rootNode components: [ camera, model ] } // 控制移动的按钮 Button { text: "Move" onClicked: { model.transform.translation = Qt.vector3d(10.0, 0.0, 0.0) } } } ``` 在上面的代码中,我们创建了一个 `Scene3D` 组件,添加了一个相机和一个 3D 模型,并将它们作为子组件添加到场景根节点中。我们还添加了一个 `Button` 组件,用于控制模型的移动。 在按钮的 `onClicked` 信号处理函数中,我们通过修改 `model.transform.translation` 属性来移动模型。`translation` 属性可以用来设置模型在 3D 空间中的位置,它是一个 `Qt.vector3d` 类型的对象,包含了模型在 x、y、z 轴上的坐标。在这个例子中,我们将模型沿着 x 轴正方向移动了 10 个单位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值