Qt Quick3D中画线段

Qt Quick3D中画线段

主代码结构

Window {

width: 640

height: 480

visible: true

title: qsTr("Hello World")

View3D {

id: view3D

anchors.fill: parent

environment: SceneEnvironment {

clearColor: "skyblue"

backgroundMode: SceneEnvironment.Color

}

PerspectiveCamera {

id: camera

position: Qt.vector3d(0, 200, 300)

eulerRotation.x: -30

eulerRotation.y: 0

}

WasdController {

id: wasd_control

controlledObject: camera

}

DirectionalLight {

eulerRotation.x: -30

eulerRotation.y: -70

}

Model {

id: plate

position: Qt.vector3d(0, -200, 0)

source: "#Cylinder"

scale: Qt.vector3d(4, 0.1, 1)

materials: [ DefaultMaterial {

diffuseColor: "red"

}

]

}

}

}

View3D加载3D场景,将其转换为2D在屏幕上显示

environment:设置环境样式,如下:

clearColor: "skyblue"

backgroundMode: SceneEnvironment.Color//可展示天蓝色背景

SceneEnvironment.Transparent//透视模型后边的内容

SceneEnvironment.SkyBox//???

antialiasingQuality :SceneEnvironment.Medium//抗锯齿质量

设置相机,如下:

PerspectiveCamera:设置透视相机(近大远小),可以设置位置和旋转角度(欧拉角)。

OrthographicCamera:设置正交相机(远近等大)。

还可设置相机移动,wsad和上下左右,以及鼠标拖动改变方向,但滚轮没有前进后退效果

WasdController {

id: wasd_control

//指定受控对象,通常受控节点是相机

controlledObject: cameraId //cameraId是相机的id

}

设置灯光,如下:

DirectionalLight:平行光,默认从z轴的正方向向负方向照射,不可设置光源位置,但可设置旋转角度。

PointLight:点光源,设置位置、强度等。

SpotLight:聚光灯,设置位置角度强度等。

以上设置好,即可放置模型并显示。

放置模型

一般用Model设置一个模型,多个模型的组合可以由Node包裹多个Model。Node在3D场景中可用作锚点。

Node {

id: xyz

Model {

id: model1

source: "#Cylinder"

scale: Qt.vector3d(1000,0.01,0.01)

eulerRotation: Qt.vector3d(-90,0,0)

materials: DefaultMaterial {

diffuseColor: "blue"

}

}

Model{

id: model2

source: "#Cylinder"

scale: Qt.vector3d(0.01,1000,0.01)

materials: DefaultMaterial {

diffuseColor: "blue"

}

}

}

放置2D组件

在Quick3D中放置2D组件,可以用Node进行包裹,设置其3D属性,即可将其中的2D组件进行相应的三维操作。

//在3维场景中的一个平面上,画线

View3D {

id: view3D

Node{//放在模型的地面上

eulerRotation.x: -90

Rectangle {

anchors.horizontalCenter: parent.horizontalCenter

color: "orange"

width: 110

height: 110

Canvas{

id: canvas

anchors.fill: parent

onPaint: {

var ctx = getContext("2d")

ctx.strokeStyle = "blue"

ctx.lineWidth = 2

// 起点坐标

var startX = 0

var startY = 10

// 终点坐标

var endX = 50

var endY = 50

// 绘制线条

ctx.beginPath()

ctx.moveTo(startX, startY)

ctx.lineTo(endX, endY)

ctx.stroke()

}

}

}

}

}

用Canvas画线。

使用 Canvas 组件来创建一个 400x400 的矩形,并在其中添加了一个 onPaint 事件处理程序。在事件处理程序中,我们获取了 2D 绘图上下文对象,设置了线条颜色和宽度,然后定义了起点和终点的坐标,并使用 moveTo 和 lineTo 方法绘制了一条线条。

通过使用 getContext("2d") 方法来获取 Canvas 组件的 2D 绘图上下文对象,即 ctx 对象。这是因为 Canvas 组件是一个 HTML5 Canvas 元素的封装,它提供了一个可编程的 2D 或 3D 绘图 API,通过使用这个 API,我们可以在 Canvas 上绘制自定义的图形和图像。

相关推荐

瑞昱alc887声卡音质怎样
365bet备用

瑞昱alc887声卡音质怎样

📅 06-30 👁️ 843
吉他音调对照表大全图(吉他各调音阶图)
365bet备用

吉他音调对照表大全图(吉他各调音阶图)

📅 07-04 👁️ 422
【已解决】Windows更新失败
bat365中文官方网站

【已解决】Windows更新失败

📅 08-08 👁️ 9956