簡體   English   中英

在QML Scene3D中使用Qt3D QEntity

[英]Use Qt3D QEntity in QML Scene3D

我想在QML Scene3D中添加一個C ++ QEntity,如下所示:

//C++
class MapEntity : public Qt3DCore::QEntity {
    public:
    MapEntity( Qt3DCore::QEntity* parent ) : Qt3DCore::QEntity(parent) {
        ...
    }
}

// QML
Scene3D {
    MapEntity {
        id: map
        ...
    }
}

可能嗎? 如果是的話,該怎么做?

或者也許可以創建C ++場景(例如Qt3DExtras :: Qt3DWindow)並在QML中使用?

是的,可以在C ++代碼中定義QEntity然后使用它。 該方法在這里描述:

http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html

首先,您正在創建QEntity。 球體例如:

class MyEntity : public Qt3DCore::QEntity {
    public:
        MyEntity( Qt3DCore::QEntity* parent=0 ) : Qt3DCore::QEntity(parent) {
                Qt3DRender::QMaterial *material = new Qt3DExtras::QPhongMaterial;

                Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh;
                sphereMesh->setRadius(8);

                addComponent(sphereMesh);
                addComponent(material);
        }
        virtual         ~MyEntity() {}
};

然后將其注冊為qml組件:

qmlRegisterType<MyEntity>("com.company.my", 1, 0, "MyEntity");

並在QML中使用它:

Scene3D {
    id: myScene
    anchors.fill: parent
    cameraAspectRatioMode: Scene3D.AutomaticAspectRatio
    focus: true
    enabled: true



    Entity {
        id: sceneRoot

        Quick.Camera {
            id: camera
            projectionType: Quick.CameraLens.PerspectiveProjection
            fieldOfView: 45
            nearPlane : 0.1
            farPlane : 1000.0
            position: Qt.vector3d( 0.0, 0.0, 40.0 )
            upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
            viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
        }

        components: [
            Quick.RenderSettings {
                activeFrameGraph: ForwardRenderer {
                    clearColor: Qt.rgba(0, 0.5, 1, 0)
                    camera: camera
                }
            }
        ]

        MyEntity {
            id: myEnt
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM