Как добавить 6 пользовательских текстур в объект куба Qml?

avatar
Etienne PERIANA
9 августа 2021 в 07:15
64
0
0

Я разрабатываю приложение, которое использует объект куба в Qml, и мне интересно, есть ли способ добавить к нему 6 различных текстур и могу ли я назначить текстуру грани куба по своему выбору?

Для своего куба я использовал пользовательский объект и переписал код для камеры, чтобы я мог направлять ее по своему усмотрению.

Я много раз пытался добавить нужные 6 текстур, но ничего не работает должным образом

main.qml

import QtQuick 2.12
import QtQuick.Scene3D 2.12
import QtQuick.Window 2.12
import "."



Window {
    visible: true
    width: 640
    height: 480

    Scene3D
    {
        id : scene3d
        anchors.fill: parent
        focus: false
        aspects: ["render", "logic", "input"]
        hoverEnabled: true
        cameraAspectRatioMode: Scene3D.AutomaticAspectRatio

        RootEntity
        {
            id:root
        }

    }

}

RootEntity.qml

import QtQuick 2.0
import QtQuick3D 1.15
import Qt3D.Core 2.12
import Qt3D.Render 2.12
import Qt3D.Extras 2.12
import Qt3D.Input 2.12

import "."

Entity {
    id: root


    //create camera

    Camera {
        id: mainCamera
        projectionType: CameraLens.PerspectiveProjection
        fieldOfView: 45
        aspectRatio: 16/9
        nearPlane : 0.1
        farPlane : 1000.0
        position: Qt.vector3d(0.0, 4.49373, -3.78577)
        upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
        viewCenter: cubeTransform.translation
    }

    //use my class instead of OrbitCameraController

    SOrbitCameraController {
        id: mainCameraController
        camera: mainCamera
    }

    components: [
        RenderSettings {

            Viewport {
                normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0)
                RenderSurfaceSelector {
                    CameraSelector {
                        id: cameraSelector
                        camera: mainCamera
                        FrustumCulling {
                            ClearBuffers {
                                buffers: ClearBuffers.AllBuffers
                                clearColor: "black"
                                NoDraw {}
                            }
                            LayerFilter {
                                filterMode: LayerFilter.DiscardAnyMatchingLayers
                                layers: [topLayer]
                            }
                            LayerFilter {
                                filterMode: LayerFilter.AcceptAnyMatchingLayers
                                layers: [topLayer]
                                ClearBuffers {
                                    buffers: ClearBuffers.DepthBuffer
                                }
                            }
                        }
                    }
                }
            }
        },
        InputSettings {}
        ,
        ScreenRayCaster
        {
            id:screenRayCaster
            onHitsChanged:
            {
                drawLineMesh(hits)

            }
        }
    ]

    Layer {
        id: topLayer
        recursive: true
    }

    CuboidMesh{
        id: cubeMesh
        xExtent: 1
        yExtent: 1
        zExtent: 1
    }



    Transform {
        id: cubeTransform
        translation: Qt.vector3d(0, 0, 0)
    }

    PhongMaterial{
        id: cubeMaterial
        ambient: "red"

    }

    Entity {
            id: cubeEntity

            components: [cubeMesh, cubeMaterial, cubeTransform]

    }

}

SOrbitCamera.qml

import Qt3D.Core 2.0
import Qt3D.Render 2.0
import Qt3D.Input 2.0

Entity{
    id: root
    property Camera camera;
    property real dt: 0.001
    property real linearSpeed: 1
    property real lookSpeed: 500

    MouseDevice {
        id: mouseDevice
        sensitivity: 0.007
    }

    MouseHandler {
        id: mh
        property vector3d upVect: Qt.vector3d(0, 1, 0)
        property point lastPos;
        property real pan;
        property real tilt;
        sourceDevice: mouseDevice

        onPanChanged: {
            if (camera.position.y < 0.5 && camera.position.y > -3.) {
                root.camera.panAboutViewCenter(-pan, upVect);
            }

            if (camera.position.y > 0.5 && camera.position.y < 3.) {
                root.camera.panAboutViewCenter(pan, upVect);
            }

            if (camera.position.y < 6. && camera.position.y > 3.) {
                root.camera.panAboutViewCenter(-pan, upVect);

            }

            if (camera.position.y > -6. && camera.position.y < -3.) {
                root.camera.panAboutViewCenter(pan, upVect);

            }
        }

        onTiltChanged: root.camera.tiltAboutViewCenter(tilt);

        onPressed: {
            lastPos = Qt.point(mouse.x, mouse.y);
        }

        onPositionChanged: {
            if (mouse.buttons === 1){ // Left button for rotation

                pan = -(mouse.x - lastPos.x) * dt * lookSpeed;
                tilt = (mouse.y - lastPos.y) * dt * lookSpeed;
                console.log(camera.position)
            }

            lastPos = Qt.point(mouse.x, mouse.y)
        }
    }
}
Источник

Ответы (0)