Graphics Programming using RingQt3D
In this chapter we will learn how to use Qt3D through many samples.
To install the samples in this chapter using RingPM
ringpm install ringqt3dsamples
Drawing Cube
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(2)
setYextent(2)
setZextent(3)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
oCubeMaterial = new QPhongMaterial(oCube)
oCubeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Cube")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Drawing Torus
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oTorus = new QTorusMesh(oRootEntity)
oTorus.setRadius(1.0)
oTorus.setMinorRadius(0.4)
oTorus.setRings(100)
oTorus.setSlices(20)
oTorusTransform = new QTransform(oTorus)
oTorusTransform.setScale(2)
oTorusTransform.setTranslation(new QVector3D(3, 3, 3))
oTorusMaterial = new QPhongMaterial(oTorus)
oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oTorusEntity = new QEntity(oRootEntity)
oTorusEntity.addComponent(oTorus)
oTorusEntity.addComponent(oTorusMaterial)
oTorusEntity.addComponent(oTorusTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Torus")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Drawing Sphere
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oSphere = new QSphereMesh(oRootEntity)
oSphere.setRadius(1.0)
oSphere.setRings(100)
oSphere.setSlices(20)
oSphereTransform = new QTransform(oSphere)
oSphereTransform.setScale(2)
oSphereTransform.setTranslation(new QVector3D(3, 3, 3))
oSphereMaterial = new QPhongMaterial(oSphere)
oSphereMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oSphereEntity = new QEntity(oRootEntity)
oSphereEntity.addComponent(oSphere)
oSphereEntity.addComponent(oSphereMaterial)
oSphereEntity.addComponent(oSphereTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Sphere")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Drawing Cylinder
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCylinder = new QCylinderMesh(oRootEntity)
oCylinder.setRadius(1)
oCylinder.setRings(100)
oCylinder.setSlices(20)
oCylinder.setLength(5)
oCylinderTransform = new QTransform(oCylinder)
oCylinderTransform.setScale(2)
oCylinderTransform.setTranslation(new QVector3D(1, 0, 3))
oCylinderMaterial = new QPhongMaterial(oCylinder)
oCylinderMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oCylinderEntity = new QEntity(oRootEntity)
oCylinderEntity.addComponent(oCylinder)
oCylinderEntity.addComponent(oCylinderMaterial)
oCylinderEntity.addComponent(oCylinderTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Cylinder")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Drawing Cone
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCone = new QConeMesh(oRootEntity)
oCone.setRings(100)
oCone.setSlices(20)
oCone.setLength(5)
oConeTransform = new QTransform(oCone)
oConeTransform.setScale(2)
oConeTransform.setTranslation(new QVector3D(1, 0, 3))
oConeMaterial = new QPhongMaterial(oCone)
oConeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oConeEntity = new QEntity(oRootEntity)
oConeEntity.addComponent(oCone)
oConeEntity.addComponent(oConeMaterial)
oConeEntity.addComponent(oConeTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Cone")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Drawing Plane
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oPlane = new QPlaneMesh(oRootEntity)
oPlane.setHeight(5)
oPlane.setWidth(5)
oPlane.setmeshresolution(new qSize(10,10))
oPlaneTransform = new QTransform(oPlane)
oPlaneTransform.setScale(2)
oPlaneTransform.setTranslation(new QVector3D(0, -4, 4))
oPlaneMaterial = new QPhongMaterial(oPlane)
oPlaneMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oPlaneEntity = new QEntity(oRootEntity)
oPlaneEntity.addComponent(oPlane)
oPlaneEntity.addComponent(oPlaneMaterial)
oPlaneEntity.addComponent(oPlaneTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Plane")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Texture
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(2)
setYextent(2)
setZextent(3)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
oTextureLoader = new QTextureLoader(oCube);
oTextureLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oCubeMaterial = new QTextureMaterial(oCube)
oCubeMaterial.setTexture(oTextureLoader)
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Adding Texture")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Key Press
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oFilter = new qallevents(oView)
oFilter.setKeyPressEvent("pKeyPress()")
oView.installeventfilter(oFilter)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCamController.setEnabled(False)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(2)
setYextent(2)
setZextent(3)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
oTextureLoader = new QTextureLoader(oCube);
oTextureLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oCubeMaterial = new QTextureMaterial(oCube)
oCubeMaterial.setTexture(oTextureLoader)
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Moving Cube using the Keyboard")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
oContainer.setfocus(0)
exec()
}
func pKeyPress
nKey = oFilter.getkeycode()
oX = oCubeTransform.translation().x()
oY = oCubeTransform.translation().y()
oZ = oCubeTransform.translation().z()
switch nKey
on Qt_Key_Right
oX++
on Qt_Key_Left
oX--
on Qt_Key_Up
oY++
on Qt_Key_Down
oY--
off
oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
Object Picker
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oFilter = new qallevents(oView)
oFilter.setKeyPressEvent("pKeyPress()")
oView.installeventfilter(oFilter)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCamController.setEnabled(False)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(2)
setYextent(2)
setZextent(3)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
oTextureLoader = new QTextureLoader(oCube);
oTextureLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oCubeMaterial = new QTextureMaterial(oCube)
oCubeMaterial.setTexture(oTextureLoader)
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
oPicker = new qObjectPicker(oCube) {
setclickedevent("pClick()")
}
oCubeEntity.addComponent(oPicker)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Object Picker - Click on the Cube")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
oContainer.setfocus(0)
exec()
}
func pKeyPress
nKey = oFilter.getkeycode()
oX = oCubeTransform.translation().x()
oY = oCubeTransform.translation().y()
oZ = oCubeTransform.translation().z()
switch nKey
on Qt_Key_Right
oX++
on Qt_Key_Left
oX--
on Qt_Key_Up
oY++
on Qt_Key_Down
oY--
off
oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
func pClick
msginfo("Event","Click")
oContainer.setfocus(0)
Frame Action
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCamController.setEnabled(False)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(1)
setYextent(1)
setZextent(1)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(-5, -5, -5))
oTextureLoader = new QTextureLoader(oCube);
oTextureLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oCubeMaterial = new QTextureMaterial(oCube)
oCubeMaterial.setTexture(oTextureLoader)
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
nAngle=0 nSpeed=0.1
oFrameAction = new qFrameAction(oRootEntity) {
settriggeredevent("pEvent()")
}
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Frame Action")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
func pEvent
# Move the Cube
oX = oCubeTransform.translation().x()
oY = oCubeTransform.translation().y()
oZ = oCubeTransform.translation().z()
if oX >= 4
nSpeed=-0.1
but oX <= -10
nSpeed=0.1
ok
oCubeTransform.setTranslation(
new QVector3D(oX+nSpeed, oY+nSpeed, oZ+nSpeed))
# Rotate the Cube
nAngle+=5 if nAngle=360 nAngle=0 ok
oQ = new QQuaternion(0,0,0,0)
oCubeTransform.setRotation(
oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), nAngle))
Text 2D
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(2)
setYextent(2)
setZextent(3)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
oTextureLoader = new QTextureLoader(oCube);
oTextureLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
oCubeMaterial = new QTextureMaterial(oCube)
oCubeMaterial.setTexture(oTextureLoader)
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
oText2DEntity = new QText2DEntity(oRootEntity) {
setText("Ring programming language")
setWidth(400) setHeight(40)
setColor(new QColor() {setRGB(128,128,128,255)})
}
oText2DTransform = new QTransform(oText2DEntity)
oText2DTransform.setScale(0.1)
oText2DTransform.setTranslation(new QVector3D(-10.5, -5, 0))
oText2DEntity.addComponent(oText2DTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Text2D")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Extruded Text
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oCube = new QCuboidMesh(oRootEntity) {
setXextent(2)
setYextent(2)
setZextent(3)
}
oCubeTransform = new QTransform(oCube)
oCubeTransform.setScale(2)
oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
oTextureLoader = new QTextureLoader(oCube);
oTextureLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
oCubeMaterial = new QTextureMaterial(oCube)
oCubeMaterial.setTexture(oTextureLoader)
oCubeEntity = new QEntity(oRootEntity)
oCubeEntity.addComponent(oCube)
oCubeEntity.addComponent(oCubeMaterial)
oCubeEntity.addComponent(oCubeTransform)
oTextEntity = new QEntity(oRootEntity)
oTextMesh = new QExtrudedTextMesh(oTextEntity) {
setText("Ring")
}
oTextTransform = new QTransform(oTextEntity)
oTextTransform.setScale(3)
oTextTransform.setTranslation(new QVector3D(-5.5, -4, 3))
oTextMaterial = new QPhongMaterial(oTextEntity);
oTextMaterial.setDiffuse(new QColor() {setRGB(0,0,255,255)})
oTextEntity.addComponent(oTextMesh)
oTextEntity.addComponent(oTextTransform)
oTextEntity.addComponent(oTextMaterial)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Extruded Text")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Model
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oModel = new qmesh(oRootEntity)
oModel.setsource(
new qURL("file:///"+currentdir()+"/assets/model/lucky_cat.obj") )
oModelTransform = new QTransform(oModel)
oModelTransform.setScale(0.1)
oModelTransform.setTranslation(new QVector3D(0, 0, 0))
oQ = new QQuaternion(0,0,0,0)
oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), 180))
oModelMaterial = new QPhongMaterial(oModel)
oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
oModelEntity = new QEntity(oRootEntity)
oModelEntity.addComponent(oModel)
oModelEntity.addComponent(oModelmaterial)
oModelEntity.addComponent(oModelTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Model (Obj File)")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Model Texture
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 25, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oModel = new qmesh(oRootEntity)
oModel.setsource(
new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") )
oModelTransform = new QTransform(oModel)
oModelTransform.setScale(0.5)
oModelTransform.setTranslation(new QVector3D(0, 12, 4))
oLoader = new QTextureLoader(oModel)
oModelMaterial = new QTextureMaterial(oModel)
oLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/Robot.jpg") )
oModelMaterial.setTexture(oLoader)
oModelEntity = new QEntity(oRootEntity)
oModelEntity.addComponent(oModel)
oModelEntity.addComponent(oModelMaterial)
oModelEntity.addComponent(oModelTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Model Texture")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Draw Office
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oModel = new qmesh(oRootEntity)
oModel.setsource(
new qURL("file:///"+currentdir()+"/assets/model/Reception_Table.obj") )
oModelTransform = new QTransform(oModel)
oModelTransform.setScale(1)
oModelTransform.setTranslation(new QVector3D(0, -2.5, 16))
oModelMaterial = new QPhongMaterial(oModel)
oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
oModelEntity = new QEntity(oRootEntity)
oModelEntity.addComponent(oModel)
oModelEntity.addComponent(oModelmaterial)
oModelEntity.addComponent(oModelTransform)
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Model (Obj File) - Office")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Many Objects
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oModel = new qmesh(oRootEntity)
oModel.setsource(
new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") )
oModelTransform = new QTransform(oModel)
oModelTransform.setScale(0.2)
oModelTransform.setTranslation(new QVector3D(0, 10, 10))
oModelMaterial = new QPhongMaterial(oModel)
oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
oModelEntity = new QEntity(oRootEntity)
oModelEntity.addComponent(oModel)
oLoader = new QTextureLoader(oModel);
oModelMaterial = new QTextureMaterial(oModel)
oLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oModelMaterial.setTexture(oLoader)
oModelEntity.addComponent(oModelMaterial)
oModelEntity.addComponent(oModelTransform)
for n = 1 to 10
oTorus = new QTorusMesh(oRootEntity)
oTorus.setRadius(1.0*n)
oTorus.setMinorRadius(0.4*n)
oTorus.setRings(100)
oTorus.setSlices(20)
oTorusTransform = new QTransform(null)
oTorusTransform.setScale(2)
oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
oTorusMaterial = new QPhongMaterial(null);
oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oTorusEntity = new QEntity(oRootEntity)
oTorusEntity.addComponent(oTorus)
oLoader = new QTextureLoader(oTorus);
oTorusMaterial = new QTextureMaterial(oTorus)
oLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oTorusMaterial.setTexture(oLoader)
oTorusEntity.addComponent(oTorusMaterial)
oTorusEntity.addComponent(oTorusTransform)
next
oView.setRootEntity(oRootEntity)
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oWidget {
setwindowtitle("Using Qt3D - Many Objects")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
Camera
load "guilib.ring"
new qApp {
oView = new Qt3dwindow()
oWidget = new QWidget()
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))
oLightEntity = new QEntity(oRootEntity)
oLight = new QPointLight(oLightEntity)
oLight.setColor(new QColor() { setRGB(255,255,255,255) })
oLight.setIntensity(1)
oLightEntity.addComponent(oLight)
oLightTransform = new QTransform(oLightEntity)
oLightTransform.setTranslation(oCameraEntity.position())
oLightEntity.addComponent(oLightTransform)
oCamController = new QFirstPersonCameraController(oRootEntity)
oCamController.setCamera(oCameraEntity)
oModel = new qmesh(oRootEntity)
oModel.setsource(
new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") )
oModelTransform = new QTransform(oModel)
oModelTransform.setScale(0.2)
oModelTransform.setTranslation(new QVector3D(0, 10, 10))
oModelMaterial = new QPhongMaterial(oModel)
oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
oModelEntity = new QEntity(oRootEntity)
oModelEntity.addComponent(oModel)
oLoader = new QTextureLoader(oModel);
oModelMaterial = new QTextureMaterial(oModel)
oLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oModelMaterial.setTexture(oLoader)
oModelEntity.addComponent(oModelMaterial)
oModelEntity.addComponent(oModelTransform)
for n = 1 to 10
oTorus = new QTorusMesh(oRootEntity)
oTorus.setRadius(1.0*n)
oTorus.setMinorRadius(0.4*n)
oTorus.setRings(100)
oTorus.setSlices(20)
oTorusTransform = new QTransform(null)
oTorusTransform.setScale(2)
oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
oTorusMaterial = new QPhongMaterial(null);
oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
oTorusEntity = new QEntity(oRootEntity)
oTorusEntity.addComponent(oTorus)
oLoader = new QTextureLoader(oTorus);
oTorusMaterial = new QTextureMaterial(oTorus)
oLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
oTorusMaterial.setTexture(oLoader)
oTorusEntity.addComponent(oTorusMaterial)
oTorusEntity.addComponent(oTorusTransform)
next
oView.setRootEntity(oRootEntity)
btn1 = new qPushButton(oWidget) {
setText("Move the Camera and the Robot") setClickEvent("pMove()")
}
oLayout = new QVBoxLayout()
oLayout.AddWidget(oContainer)
oLayout.AddWidget(btn1)
oWidget {
setwindowtitle("Using Qt3D - Camera")
resize(800,600)
setLayout(oLayout)
showMaximized()
}
exec()
}
func pMove
oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
oCameraEntity.setViewCenter(new QVector3D(20, 15, 20))
oModelTransform.setTranslation(new QVector3D(20, 15, 20))
oQ = new QQuaternion(0,0,0,0)
oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(1, 1, 0), 270))
Scence
load "guilib.ring"
new qApp {
oWidget = new QWidget()
oView = new Qt3DWindow()
oView.defaultFrameGraph().setClearColor(new QColor() {setRGB(0,0,0,255)})
oContainer = oWidget.createWindowContainer(oView,oWidget,0)
oRootEntity = new QEntity(oContainer)
oInput = new QInputAspect(oRootEntity)
oView.registerAspect(oInput)
oCameraEntity = oView.Camera()
oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000)
oCameraEntity.setPosition(new QVector3D(-13.34, -6.43, 16.47))
oCameraEntity.setUpVector(new QVector3D(0.02, 0, 1))
oCameraEntity.setViewCenter(new QVector3D(-13.34, 17.05, 15.42))
oCameraController = new QFirstPersonCameraController(oRootEntity)
oCameraController.setCamera(oCameraEntity)
oCameraController.setEnabled(False)
oLongRoomEntity = new QEntity(oRootEntity)
oLongRoomModel = new QMesh(oLongRoomEntity)
oLongRoomModel.setSource(
new qURL("file:///"+CurrentDir()+"/assets/model/Long_Room.obj") )
oLongRoomTransform = new QTransform(oLongRoomEntity)
oLongRoomTransform.setScale(1)
oLongRoomTransform.setTranslation(new QVector3D(5, 0, 15))
oLongRoomLoader = new QTextureLoader(oLongRoomModel)
oLongRoomMaterial = new QTextureMaterial(oLongRoomModel)
oLongRoomLoader.setSource(
new QUrl("file:///"+currentdir()+"/assets/texture/croc.jpg") )
oLongRoomMaterial.setTexture(oLongRoomLoader)
oLongRoomEntity.addComponent(oLongRoomModel)
oLongRoomEntity.addComponent(oLongRoomMaterial)
oLongRoomEntity.addComponent(oLongRoomTransform)
oTableEntity = new QEntity(oRootEntity)
oTableModel = new QMesh(oTableEntity)
oTableModel.setSource(
new qURL("file:///"+CurrentDir()+"/assets/model/Reception_Table.obj") )
oTableTransform = new QTransform(oTableEntity)
oTableTransform.setScale(0.3)
oTableTransform.setTranslation(new QVector3D(5, 0, 15))
oQ = new QQuaternion(0,0,0,0)
oTableTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), -180))
oTableModelMaterial = new QPhongMaterial(oTableEntity)
oTableModelMaterial.setDiffuse(new QColor() {setRGB(255,255,255,255)})
oTableEntity.addComponent(oTableModel)
oTableEntity.addComponent(oTableModelmaterial)
oTableEntity.addComponent(oTableTransform)
oFirstLightEntity = new QEntity(oRootEntity)
oFirstLight = new QPointLight(oFirstLightEntity)
oFirstLight.setColor(new qColor() { setRGB(128,128,128,128) })
oFirstLight.setIntensity(1)
oFirstLightTransform = new QTransform(oFirstLightEntity)
oFirstLightTransform.setTranslation(new QVector3D(5, 0, 20))
oFirstLightEntity.addComponent(oFirstLight)
oFirstLightEntity.addComponent(oFirstLightTransform)
aCats = list(5)
for n = 1 to 5
v = n * 0.1
aCats[n] = []
aCats[n][:oCatModelEntity] = new QEntity(oRootEntity)
aCats[n][:oCatModel] = new QMesh(aCats[n][:oCatModelEntity])
aCats[n][:oCatModel].setSource(
new qURL("file:///"+CurrentDir()+"/assets/model/Lucky_Cat.obj") )
aCats[n][:oCatModelMaterial] = new QPhongMaterial(aCats[n][:oCatModel])
aCats[n][:oCatModelMaterial].setDiffuse(
new QColor() {setRGB(255,255,255,255)})
aCats[n][:oCatModelTransform] = new QTransform(aCats[n][:oCatModelEntity])
aCats[n][:oCatModelTransform].setScale(0.01)
aCats[n][:oCatModelTransform].setTranslation(
new QVector3D(-5*(v+v), 1, 15.2))
oQ = new QQuaternion(0,0,0,0)
aCats[n][:oCatModelTransform].setRotation(
oQ.fromAxisAndAngle(
new QVector3D(0, 1, 1), 180))
aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModel])
aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelmaterial])
aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelTransform])
next
oSecondLightEntity = new QEntity(oRootEntity)
oSecondLight = new QPointLight(oSecondLightEntity)
oSecondLight.setColor(new qColor() { setRGB(255,255,255,255) })
oSecondLight.setIntensity(1)
oSecondLightTransform = new QTransform(oSecondLightEntity)
oSecondLightTransform.setTranslation(new QVector3D(-5, 1, 15.5))
oSecondLightEntity.addComponent(oSecondLight)
oSecondLightEntity.addComponent(oSecondLightTransform)
oRobotEntity = new QEntity(oRootEntity)
oRobotModel = new QMesh(oRobotEntity)
oRobotModel.setSource(
new qURL("file:///"+CurrentDir()+"/assets/model/Fat_Robot.obj") )
oRobotTransform = new QTransform(oRobotEntity)
oRobotTransform.setScale(0.006)
robotX = -15
robotY = -2
robotZ = 15
oRobotTransform.setTranslation(new QVector3D(-15, -2, 15))
oQ = new QQuaternion(0,0,0,0)
oRobotTransform.setRotation(
oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
oRobotMaterial = new QPhongMaterial(oRobotEntity)
oRobotMaterial.setDiffuse(new QColor() {setRGB(128,128,128,255)})
oRobotEntity.addComponent(oRobotModel)
oRobotEntity.addComponent(oRobotTransform)
oRobotEntity.addComponent(oRobotMaterial)
oView.setRootEntity(oRootEntity)
oWidget {
setwindowtitle("Using Qt3D - Scene")
showfullscreen()
}
oContainer.resize(oWidget.width(),oWidget.height())
oFilter = new QAllEvents(oView)
oFilter.setKeyPressEvent("pKeyPress()")
oView.installeventfilter(oFilter)
oContainer.setfocus(0)
exec()
}
func pKeyPress
nKey = oFilter.getKeyCode()
nSpeed = 0.1
cX = oCameraEntity.position().x()
CY = oCameraEntity.position().y()
cZ = oCameraEntity.position().z()
cVCx = oCameraEntity.viewCenter().x()
cVCy = oCameraEntity.viewCenter().y()
cVCz = oCameraEntity.viewCenter().z()
switch nKey
on Qt_Key_Right
if cX < 4.8
robotX+= nSpeed
oCameraEntity.setPosition(
new QVector3D(cX+0.1, cY, cZ))
oCameraEntity.setViewCenter(
new QVector3D(cVCx+nSpeed, cVCy, cVCz))
oRobotTransform.setRotation(
oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
ok
on Qt_Key_Left
if cX > - 13.8
robotX-= nSpeed
oCameraEntity.setPosition(
new QVector3D(cX-0.1, cY, cZ))
oCameraEntity.setViewCenter(
new QVector3D(cVCx-nSpeed, cVCy, cVCz))
oRobotTransform.setRotation(
oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 160))
ok
on Qt_Key_Down
if robotY > -3.5
robotY-= nSpeed
oCameraEntity.setPosition(
new QVector3D(cX, cY, cZ))
oRobotTransform.setRotation(
oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 190))
ok
on Qt_Key_Up
if robotY < 2
robotY+= nSpeed
oCameraEntity.setPosition(
new QVector3D(cX, cY, cZ))
oRobotTransform.setRotation(
oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 180))
ok
on Qt_Key_Escape
oWidget.close()
off
oRobotTransform.setTranslation(new QVector3D(robotX, robotY, robotZ))