一.介紹
quick3d是把qt3d部分以插件的形式導(dǎo)出,在QML中通過(guò)包含的形式來(lái)進(jìn)行使用的。
quick3d部分,使用的包含有
import Qt3D 1.0
import Qt3D.Shapes 1.0 |
Import Qt3D 是包含主要的一些Qt3D模塊,而Qt3D.Shapes 包含的是一些立方體,球體,圓柱體等的信息,方便使用各種簡(jiǎn)單模型。
二.具體的說(shuō)明(這里沒(méi)有按照原來(lái)的意思翻譯,只根據(jù)個(gè)人理解)
QML BillboardTransform Element 公告牌,實(shí)現(xiàn)一個(gè)變化使對(duì)象一直朝向攝像機(jī)。
QML Camera Element 攝像機(jī),定義一個(gè)視口的位置和投影3D場(chǎng)景
QML Effect Element 定義一些簡(jiǎn)單的效果,包含材質(zhì) 紋理 燈光等
QML FloatingItem Element 定義一個(gè)二維放置在3D可視化區(qū)域內(nèi)的深度
QML Item3D Element 將存儲(chǔ)一個(gè)3D對(duì)象,并且包含所有簡(jiǎn)單3D操作的屬性和方法
QML Light Element 一些燈光參數(shù)的描述
QML LightModel Element 定義場(chǎng)景中燈光的模型
QML LookAtTransform Element 提供一種變化使對(duì)象面向攝像機(jī),具體意思需要自己理解
QML Material Element 描述OpenGL中的材質(zhì)屬性
QML Mesh Element 對(duì)載入一些模型文件的支持,還有一些操作等
QML Qt3d Element qt3d全局對(duì)象,為3d應(yīng)用程序提供一些有用的功能
QML Rotation3D Element 提供3d空間中的旋轉(zhuǎn)變化
QML Scale3D Element 提供3d空間中的縮放變化
QML ShaderProgram Element 提供著色器語(yǔ)言的支持,這個(gè)需要GPU的支持。
QML StereoView Element 定義一個(gè)布局可以使用左右視角圖像,這個(gè)的作用是立體視覺(jué)效果,他分別從左右眼的方向?qū)?/font>3D場(chǎng)景中的物體進(jìn)行來(lái)渲染,需要硬件支持.
QML Translation3D Element 提供3d空間中的位置變化
QML Viewport Element 定義一個(gè)合理的3D視口
QML Capsule Element 描述一個(gè)囊狀
QML Cube Element 描述一個(gè)立方體
QML Cylinder Element 描述一個(gè)圓柱體
QML Line Element 描述線 可以是多條線
QML Point Element 描述點(diǎn) 可以是多個(gè)點(diǎn)
QML Quad Element 描述四邊形
QML Sphere Element 描述球體
QML Teapot Element 描述茶壺
簡(jiǎn)單的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
沒(méi)有成功,所以暫時(shí)不寫
QML Camera Element
QML Effect Element
QML Mesh Element
QML Item3D Element
設(shè)置攝像機(jī)的位置:0,4,12 使用一張圖片作為 紋理,使用Mesh 載入obj模型
import Qt 4.7
import Qt3D 1.0
Viewport {
id: viewport;
width: 640; height: 480
// 設(shè)置攝像機(jī)及指向的位置
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 添加一棵樹(shù)
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場(chǎng)景上使用2D元素
import Qt 4.7
import Qt3D 1.0
Viewport {
id: viewport;
width: 640; height: 480
// 設(shè)置攝像機(jī)及指向的位置
camera: Camera {
eye: Qt.vector3d(0, 4, 12);
}
// 添加一個(gè)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"}
}
}
// 設(shè)置地面
Item3D {
id: ground
mesh: Mesh { source:"ground.obj"} // 載入一個(gè)obj模型
effect: Effect{
color: "#604000";
useLighting: false;
}
}
// 添加一棵樹(shù)
Item3D{
id: tree
mesh: Mesh { source: "tree.obj" }
effect: Effect { blending: true; texture: "tree.png"}
position: Qt.vector3d(0, 0, 0)
}
} |
QML Light Element
可以比對(duì)下打開(kāi)燈光和不打開(kāi)燈光效果的差別
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
直接對(duì)一棵樹(shù)進(jìn)行縮放 移動(dòng) 旋轉(zhuǎn)操作
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棵樹(shù)旋轉(zhuǎn)
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
這里是對(duì)茶壺表面的材質(zhì)進(jìn)行了光照的設(shè)置
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"; // 環(huán)境光
constantAttenuation: 1;
diffuseColor: "white"; // 慢發(fā)射
specularColor: "white"; //鏡面光
}
// 設(shè)置場(chǎng)景的環(huán)境光
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
對(duì)于這塊我不是很了解具體的例子可以查看
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 描述一個(gè)囊狀
QML Cube Element 描述一個(gè)立方體
QML Cylinder Element 描述一個(gè)圓柱體
QML Line Element 描述線 可以是多條線
QML Point Element 描述點(diǎn) 可以是多個(gè)點(diǎn)
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"; // 環(huán)境光
constantAttenuation: 1;
diffuseColor: "white"; // 慢發(fā)射
specularColor: "white"; //鏡面光
}
// 設(shè)置場(chǎng)景的環(huán)境光
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"
}
}
// 點(diǎn)
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
}
}
} |