zoukankan      html  css  js  c++  java
  • QT QML 3D模型查看器

    原文链接:http://amin-ahmadi.com/2018/01/28/viewing-3d-models-using-qt/

    本文使用QT Quick中的Scene3D QML类型来查看3D模型文件,QT 3D使用assimp库来加载,支持如下3D文件格式:

    3D, 3DS, 3MF, AC, AC3D, ACC, AMJ, ASE, ASK, B3D, BLEND (Blender), BVH, COB, CMS, DAE/Collada, DXF, ENFF, FBX, glTF 1.0 + GLB, glTF 2.0, HMB, IFC-STEP, IRR / IRRMESH, LWO, LWS, LXO, MD2, MD3, MD5, MDC, MDL, MESH / MESH.XML, MOT, MS3D, NDO, NFF, OBJ, OFF, OGEX, PLY, PMX, PRJ, Q3O, Q3S, RAW, SCN, SIB, SMD, STL, STP, TER, UC, VTA, X, X3D, XGL, ZGL等

    我使用QT5.12+Qt Creator4.8.0测试,效果图如下:

    QML文件将包含ApplicationWindow,其中ToolBar(包含ToolButton)使用FileDialog打开3D模型文件,Scene3D将包含加载的模型:

     main.qml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    import QtQuick.Controls 2.2
    import QtQuick.Dialogs 1.2

    import QtQuick.Scene3D 2.0

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

    ApplicationWindow
    {
        visible: 
    true
         
    640
        height: 
    480
        title: qsTr(
    "3D Viewer")
        
        header: ToolBar
        {
            ToolButton
            {
                text: 
    "Open 3D Model"
                onPressed:
                {
                    fileDialog.open()
                }
            }
        }
        
        FileDialog
        {
            id: fileDialog
            onAccepted:
            {
                sceneLoader.source = fileDialog.fileUrl
            }
        }
        
        Scene3D
        {
            anchors.fill: parent
            
            aspects: [
    "input""logic"]
            cameraAspectRatioMode: Scene3D.AutomaticAspectRatio
            
            Entity
            {
                id: sceneRoot
                
                Camera
                {
                    id: camera
                    projectionType: CameraLens.PerspectiveProjection
                    fieldOfView: 
    30
                    aspectRatio: 
    16/9
                    nearPlane : 
    0.1
                    farPlane : 
    1000.0
                    position: Qt.vector3d( 
    10.00.0100.0 )
                    upVector: Qt.vector3d( 
    0.01.00.0 )
                    viewCenter: Qt.vector3d( 
    0.00.00.0 )
                }
                
                OrbitCameraController
                {
                    camera: camera
                }
                
                components: [
                    RenderSettings
                    {
                        activeFrameGraph: ForwardRenderer
                        {
                            clearColor: Qt.rgba(
    00.511)
                            camera: camera
                        }
                    },
                    InputSettings
                    {
                    }
                ]
                
                Entity
                {
                    id: monkeyEntity
                    components: [
                        SceneLoader
                        {
                            id: sceneLoader
                        }
                    ]
                }
            }
        }
    }

    例子比较简单,主要使用了SceneLoader来加载3D模型文件,只能实现3D模型文件简单的加载,以及鼠标滚轮缩放等,更详细的操控可在InputSettings中完善!

  • 相关阅读:
    WebService及WCF获取客户端IP,端口
    单链表创建,删除节点,获取元素(与线性表比较)
    c语言描述简单的线性表,获取元素,删除元素,
    解决wamp mysql数据库出现乱码的问题。
    c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)
    c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)
    css各兼容应该注意的问题
    C++需要注意的地方和小算法
    php最简单的文件处理。
    C++ 一目了然虚基类!
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10571147.html
Copyright © 2011-2022 走看看