blob: dde69879ad153fc81f0a87dd035eabb043e1e136 [file] [log] [blame]
import QtQuick 2.15
import QtQuick.Window 2.12
import QtQuick3D 1.15
import QtQuick.Controls 2.12
Window {
id: window
width: 1280
height: 720
visible: true
View3D {
id: sceneView
anchors.fill: parent
focus: true
environment: SceneEnvironment {
id: environment
probeBrightness: 5
clearColor: "#cceeff"
backgroundMode: SceneEnvironment.Color
}
PerspectiveCamera {
id: camera
position: Qt.vector3d(0, 0, 0)
}
Model {
position: Qt.vector3d(0, 0, -300)
source: "#Rectangle"
materials: [
DefaultMaterial {
lighting: DefaultMaterial.NoLighting
diffuseMap: Texture {
id: texture
sourceItem: Rectangle {
width: 256
height: 256
color: "lightgreen"
Rectangle {
anchors.centerIn: parent
width: 140
height: 140
color: "yellow"
NumberAnimation on rotation {
running: animationCheckbox.checked
from: 0
to: 90
loops: Animation.Infinite
}
}
}
}
}
]
}
// References Texture
Model {
position: Qt.vector3d(-150, 0, -300)
source: "#Sphere"
NumberAnimation on eulerRotation.y {
running: animation3DCheckbox.checked
duration: 4000
from: 0
to: 360
loops: Animation.Infinite
}
NumberAnimation on eulerRotation.z {
running: animation3DCheckbox.checked
duration: 8000
from: 0
to: 360
loops: Animation.Infinite
}
materials: [
DefaultMaterial {
lighting: DefaultMaterial.NoLighting
diffuseMap: texture
}
]
}
// References another Texture's sourceItem
Model {
position: Qt.vector3d(150, 0, -300)
source: "#Cube"
NumberAnimation on eulerRotation.y {
running: animation3DCheckbox.checked
duration: 1000
from: 0
to: 90
loops: Animation.Infinite
}
materials: [
DefaultMaterial {
lighting: DefaultMaterial.NoLighting
diffuseMap: Texture {
sourceItem: texture.sourceItem
}
}
]
}
}
Component {
id: sourceItemComponent
Rectangle {
id: img
width: 500
height: 500
gradient: "NightFade"
CheckBox {
text: "Some quick control in a texture :D"
checked: true
}
Rectangle {
anchors.centerIn: parent
color: "blue"
width: 140
height: 140
NumberAnimation on rotation {
running: animationCheckbox.checked
from: 0
to: 90
loops: Animation.Infinite
}
NumberAnimation on width {
running: sizeAnimationCheckbox.checked
duration: 3000
from: 250
to: 500
loops: Animation.Infinite
}
NumberAnimation on height {
running: sizeAnimationCheckbox.checked
duration: 3000
from: 250
to: 500
loops: Animation.Infinite
}
}
}
}
Column {
Button {
text: "Assign new sourceItem"
onClicked: {
console.log("assigning new sourceItem");
const item = sourceItemComponent.createObject(texture);
texture.sourceItem = item;
}
}
Button {
text: "Set sourceItem null"
onClicked: {
texture.sourceItem.destroy();
texture.sourceItem = null;
}
}
Button {
text: "Destroy sourceItem"
onClicked: texture.sourceItem.destroy()
}
CheckBox {
id: animationCheckbox
text: "Animate quick content"
}
CheckBox {
id: sizeAnimationCheckbox
text: "Animate texture size"
}
CheckBox {
id: animation3DCheckbox
text: "Animate 3D objects"
}
}
}