Graphics Programming using RingQt3D

In this chapter we will learn how to use Qt3D through many samples.

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()
}
Qt3D Example - Drawing Cube

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()
}
Qt3D Example - Drawing Torus

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()
}
Qt3D Example - Drawing Sphere

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()
}
Qt3D Example - Drawing Cylinder

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()
}
Qt3D Example - Drawing Cone

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()
}
Qt3D Example - Drawing Plane

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()
}
Qt3D Example - Texture

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))
Qt3D Example - Key Press

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)
Qt3D Example - Object Picker

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))
Qt3D Example - Frame Action

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()
}
Qt3D Example - Text 2D

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()
}
Qt3D Example - Extruded Text

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()
}
Qt3D Example - Model

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()
}
Qt3D Example - Model Texture

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()
}
Qt3D Example - Draw Office

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()
}
Qt3D Example - Many Objects

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))
Qt3D Example - Camera

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))
Qt3D Example - Scene