一.介绍
quick3d是把qt3d部分以插件的形式导出,在QML中通过包含的形式来进行使用的。
quick3d部分,使用的包含有
import Qt3D 1.0
import Qt3D.Shapes 1.0 |
Import Qt3D 是包含主要的一些Qt3D模块,而Qt3D.Shapes 包含的是一些立方体,球体,圆柱体等的信息,方便使用各种简单模型。
二.具体的说明(这里没有按照原来的意思翻译,只根据个人理解)
QML BillboardTransform Element 公告牌,实现一个变化使对象一直朝向摄像机。
QML Camera Element 摄像机,定义一个视口的位置和投影3D场景
QML Effect Element 定义一些简单的效果,包含材质 纹理 灯光等
QML FloatingItem Element 定义一个二维放置在3D可视化区域内的深度
QML Item3D Element 将存储一个3D对象,并且包含所有简单3D操作的属性和方法
QML Light Element 一些灯光参数的描述
QML LightModel Element 定义场景中灯光的模型
QML LookAtTransform Element 提供一种变化使对象面向摄像机,具体意思需要自己理解
QML Material Element 描述OpenGL中的材质属性
QML Mesh Element 对载入一些模型文件的支持,还有一些操作等
QML Qt3d Element qt3d全局对象,为3d应用程序提供一些有用的功能
QML Rotation3D Element 提供3d空间中的旋转变化
QML Scale3D Element 提供3d空间中的缩放变化
QML ShaderProgram Element 提供着色器语言的支持,这个需要GPU的支持。
QML StereoView Element 定义一个布局可以使用左右视角图像,这个的作用是立体视觉效果,他分别从左右眼的方向对3D场景中的物体进行来渲染,需要硬件支持.
QML Translation3D Element 提供3d空间中的位置变化
QML Viewport Element 定义一个合理的3D视口
QML Capsule Element 描述一个囊状
QML Cube Element 描述一个立方体
QML Cylinder Element 描述一个圆柱体
QML Line Element 描述线 可以是多条线
QML Point Element 描述点 可以是多个点
QML Quad Element 描述四边形
QML Sphere Element 描述球体
QML Teapot Element 描述茶壶
简单的quick3d
QML Viewport Element
QML Mesh Element
QML Item3D Element
import Qt 4.7
import Qt3D 1.0
Viewport {
width: 640; height: 480
camera: Camera {}
light: Light {}
Item3D {
mesh: Mesh { source: "teapot.bez" }
effect: Effect {}
}
} |
QML BillboardTransform Element
没有成功,所以暂时不写
QML Camera Element
QML Effect Element
QML Mesh Element
QML Item3D Element
设置摄像机的位置:0,4,12 使用一张图片作为 纹理,使用Mesh 载入obj模型
import Qt 4.7
import Qt3D 1.0
Viewport {
id: viewport;
width: 640; height: 480
// 设置摄像机及指向的位置
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 添加一棵树
Item3D{
id: tree
mesh: Mesh { source: "tree.obj" }
effect: Effect { blending: true; texture: "tree.png"}
position: Qt.vector3d(0, 0, 0)
}
} |
QML FloatingItem Element
在3D场景上使用2D元素
import Qt 4.7
import Qt3D 1.0
Viewport {
id: viewport;
width: 640; height: 480
// 设置摄像机及指向的位置
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 添加一个2D的东西
FloatingItem {
anchors.fill: parent
depth: -10
Rectangle {
x:100; y: 100; width: 100; height: 30;
color: "#8f00ff00";
Text {anchors.fill: parent; text:"OK"; color: "blue"}
}
}
// 设置地面
Item3D {
id: ground
mesh: Mesh { source:"ground.obj"} // 载入一个obj模型
effect: Effect{
color: "#604000";
useLighting: false;
}
}
// 添加一棵树
Item3D{
id: tree
mesh: Mesh { source: "tree.obj" }
effect: Effect { blending: true; texture: "tree.png"}
position: Qt.vector3d(0, 0, 0)
}
} |
QML Light Element
可以比对下打开灯光和不打开灯光效果的差别
import Qt 4.7
import Qt3D 1.0
Viewport {
width: 640; height: 480
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
light: Light {
position: Qt.vector3d(0, 4, 12);
direction: Qt.vector3d(0, 0, 0);
}
Item3D {
mesh: Mesh { source: "teapot.bez" }
effect: Effect {}
}
} |
QML Qt3d Element
里面包含了一些有用的类型
Qt3d::matrix4x4 ( real m11, real m12, real m13, real m14, real m21, real m22, real m23, real m24, real m31, real m32, real m33, real m34, real m41, real m42, real m43, real m44 )
Qt3d::quaternion ( real scalar, real x, real y, real z )
Qt3d::vector2d ( real x, real y )
Qt3d::vector4d ( real x, real y, real z, real w )
QML Rotation3D Element
QML Scale3D Element
QML Translation3D Element
直接对一棵树进行缩放 移动 旋转操作
import Qt 4.7
import Qt3D 1.0
Viewport {
width: 640; height: 480
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 添加地面
Item3D {
id: ground
mesh: Mesh { source: "ground.obj" }
effect: Effect {
color: "#604000"
useLighting: false
}
}
Item3D {
id: mainItem
// 第1棵树旋转
Item3D{
id: tree1
mesh: Mesh { source: "tree.obj" }
effect: Effect {
blending: true
texture: "tree.png"
}
position: Qt.vector3d(0, 0, 0)
transform:[
Rotation3D {id: tree1Rot; axis: Qt.vector3d(0, 1, 0);},
Translation3D {id: tree1Tran; translate: Qt.vector3d(3, 0, 0)},
Scale3D {id: tree1Scale;scale: 0.5 }
]
}
}
ParallelAnimation{
running: true;
NumberAnimation { loops: Animation.Infinite; target: tree1Rot;
property: "angle"; from: 0; to : 360.0; duration: 3000;}
NumberAnimation { loops: Animation.Infinite; target: tree1Tran;
property: "progress"; from: 0; to : 1; duration: 3000;}
NumberAnimation { loops: Animation.Infinite; target: tree1Scale;
property: "scale"; from: 0; to : 1; duration: 3000;}
}
} |
|
|
QML LookAtTransform Element
未知
QML LightModel Element
QML Material Element
这里是对茶壶表面的材质进行了光照的设置
import Qt 4.7
import Qt3D 1.0
Viewport {
width: 640; height: 480
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 灯光
light: Light {
ambientColor: "black"; // 环境光
constantAttenuation: 1;
diffuseColor: "white"; // 慢发射
specularColor: "white"; //镜面光
}
// 设置场景的环境光
lightModel: LightModel {
ambientSceneColor: Qt.rgba(0.2, 0.2, 0.2, 1.0);
}
// 物体
Item3D{
id: teapot
mesh: Mesh { source: "teapot.bez" }
effect: Effect {
blending: true
material: Material {
id: teapotMate
ambientColor: "#cf00f010";
specularColor: "#cf030010";
diffuseColor: "#cf200310";
}
}
}
ParallelAnimation{
running: true;
ColorAnimation { loops: Animation.Infinite; target: teapotMate;
property: "ambientColor"; from: "#cf00f010"; to : "#a33ca326"; duration: 3000;}
ColorAnimation { loops: Animation.Infinite; target: teapotMate;
property: "specularColor"; from: "#cf030010"; to : "#3091f300"; duration: 3000;}
ColorAnimation { loops: Animation.Infinite; target: teapotMate;
property: "diffuseColor"; from: "#cf200310"; to : "#59649350"; duration: 3000;}
}
} |
QML ShaderProgram Element
对于这块我不是很了解具体的例子可以查看
declarative/teapot-shader.qml
QML StereoView Element
import Qt 4.7
import Qt3D 1.0
StereoView{
width: 640; height: 480
//layout: StereoView.LeftRight
FloatingItem {
anchors.fill: parent
depth: -10
Image {
anchors.fill: parent
source: "tree.png"
}
}
Viewport {
anchors.fill: parent
navigation: false
camera: Camera {
eye: Qt.vector3d(0, 0, 10)
eyeSeparation: 0.08
}
// 添加地面
Item3D {
id: ground
position: Qt.vector3d(-1.0, -1.0, -5.0)
mesh: Mesh { source: "ground.obj" }
effect: Effect {
color: "#604000"
useLighting: false
}
}
}
} |
QML Capsule Element 描述一个囊状
QML Cube Element 描述一个立方体
QML Cylinder Element 描述一个圆柱体
QML Line Element 描述线 可以是多条线
QML Point Element 描述点 可以是多个点
QML Quad Element 描述四边形
QML Sphere Element 描述球体
QML Teapot Element 描述茶壶
import Qt 4.7
import Qt3D 1.0
import Qt3D.Shapes 1.0
Viewport {
width: 640; height: 480
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 灯光
light: Light {
ambientColor: "black"; // 环境光
constantAttenuation: 1;
diffuseColor: "white"; // 慢发射
specularColor: "white"; //镜面光
}
// 设置场景的环境光
lightModel: LightModel {
ambientSceneColor: Qt.rgba(0.2, 0.2, 0.2, 1.0);
}
// 囊状
Capsule {
radius: 0.5
length: 3.0
scale: 0.5
position: Qt.vector3d(-2, 1, 0);
effect: Effect {
color: "#aaca00"
}
}
// 立方体
Cube {
scale: 0.5
position: Qt.vector3d(-1, 1, 0);
effect: Effect {
color: "#aaca00"
texture: "qtlogo.png"
}
}
// 圆柱体
Cylinder {
radius: 0.5
length: 3.0
scale: 0.5
position: Qt.vector3d(0, 1, 0);
effect: Effect {
color: "#aaca00"
}
}
// 线
Line {
vertices: [
0, 0, 0,
0, 0, 1,
0, 1, 1
]
position: Qt.vector3d(-2.0, 0, 0);
effect: Effect {
color: "#aaca00"
}
}
// 点
Point {
vertices: [
0, 0, 0,
1, 1, 1,
-1, -1, -1
]
pointSize: 0.5;
position: Qt.vector3d(1, -1, 0);
effect: Effect {
color: "white"
}
}
// 四边形
Quad {
scale: 0.5
position: Qt.vector3d(0, 0, 0);
effect: Effect {
color: "#aaca00"
texture: "qtlogo.png"
}
}
// 球体
Sphere {
radius: 0.5
position: Qt.vector3d(-2, -1, 0);
effect: Effect {
color: "#aaca00"
}
}
// 茶壶
Teapot {
scale: 0.5
position: Qt.vector3d(-1, -1, 0);
effect: Effect {
color: "#aaca00"
texture: "qtlogo.png"
decal: true
}
}
} |