• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 使用Qt 3D Studio快速開發Qt 3D

    標簽: qt  

    QT也能輕松開發3D了,不多說,讓我們開始吧

    0_1525765235296_QQ截圖20180508153812.png

    0_1525765241724_QQ截圖20180508153819.png

    準備工作

    • 下載安裝Qt5.10.1(http://download.qt.io/official_releases/qt/5.10/5.10.1/qt-opensource-windows-x86-5.10.1.exe)
    • 下載安裝Qt3dStudio(http://download.qt.io/official_releases/qt3dstudio/1.1/qt-3dstudio-opensource-windows-x86-1.1.0.exe)

    配置環境

    • 備忘錄官網地址:https://doc.qt.io/archives/qt3dstudio/

    • 要用Qt 5.10.1 和 MSVC2015_64bit (win)開發, Qt 3d Studio輔助,所以要把Qt 3d Studio的一些文件拷貝到Qt 5.10.1下

    • 拷貝dll文件夾,Copy <Qt 3D Studio installation directory>\Tools\Qt3DStudio\qml\QtStudio3D under \5.10.1<compiler>\qml (e.g. C:\Qt\5.10.1\msvc2015_64\qml).

    我的路徑供參考:
    D:\Qt\qt3dstudio-1.1.0\Tools\Qt3DStudio\qml\QtStudio3D ——》E:\Qt\Qt5.10.1\5.10.1\msvc2015_64\qml

    • 拷貝頭文件夾
      Copy <Qt 3D Studio installation directory>\Tools\Qt3DStudio\include\QtStudio3D under \5.10.1<compiler>\include (e.g. C:\Qt\5.10.1\msvc2015_64\include).

    我的路徑供參考:
    D:\Qt\qt3dstudio-1.1.0\Tools\Qt3DStudio\include\QtStudio3D ——》E:\Qt\Qt5.10.1\5.10.1\msvc2015_64\include

    • 拷貝pri
      Copy qt_lib_studio3d.pri and qt_lib_studio3d_private.pri from <Qt 3D Studio installation directory>\Tools\Qt3DStudio\mkspecs\modules to \5.10.1<compiler>\mkspecs\modules (e.g. C:\Qt\5.10.1\msvc2015_64\mkspecs\modules).

    我的路徑供參考:
    D:\Qt\qt3dstudio-1.1.0\Tools\Qt3DStudio\mkspecs\modules的 qt_lib_studio3d.pri and qt_lib_studio3d_private.pri ——》E:\Qt\Qt5.10.1\5.10.1\msvc2015_64\mkspecs\modules

    • 新建項目,配置環境變量,其實qt里的環境變量可以不設置,但是系統環境變量必須設置

    0_1525766734264_59984f5b-9a9f-4421-8a12-2a946a1de848-image.png

    0_1525782413976_QQ截圖20180508202500.png

    • 配置項目pri
    LIBS += -LD:\Qt\qt3dstudio-1.1.0\Tools\Qt3DStudio\lib Qt5Studio3D$$qtPlatformTargetSuffix()
    
    

    qt項目-main.cpp

    int main(int argc, char *argv[])
    {
        qputenv("QML_DISABLE_DISK_CACHE", "true");
    
        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    
        QGuiApplication app(argc, argv);
    
        QQuickView viewer;
    
        viewer.setSource(QUrl("qrc:/main.qml"));
    
        viewer.setTitle(QStringLiteral("Qt 3D Studio Demo"));
    
        viewer.setResizeMode(QQuickView::SizeRootObjectToView);
        viewer.setWidth(800);
        viewer.setHeight(600);
        viewer.setColor(QColor("black"));
    
        viewer.show();
    
        return app.exec();
    }
    

    qt 3d stuido

    類似unity的編輯器,下側是時間軸,右側是項目表和屬性表
    詳細信息請參考官網手冊(http://doc.qt.io/qt3dstudio/getting-started.html)

    • 關鍵點:DataInput,這個是qt和studio交互的橋梁

    0_1525767087496_4b554738-e3b7-4d05-b70a-4322e1d3e24e-image.png

    0_1525767270757_ad250cc3-8082-4d9b-803e-3925dd114331-image.png

    qt 資源文件

    • stuido生成的是uia文件,導入到qt項目中

    0_1525767382634_048a6f0d-511b-45e8-97ac-04769c67ca6f-image.png

    main.qml

    • Studio3D 就是3d視圖
    • ViewerSettings 就是視口設置
    • Presentation演示文稿就加載了uia文件
    • SceneElement就是當前場景
    • torus_Knot01對應我們的環節模型
    • torus_Knot01_Default對應我們的環節模型的材質
    Item {
        id: mainview
    
        focus: true
    
        property bool isStarted: false
    
        onIsStartedChanged: {
            torus_Knot01.setAttribute("scale.x", isStarted?2:1)
            torus_Knot01.setAttribute("scale.y", isStarted?2:1)
            torus_Knot01.setAttribute("scale.z", isStarted?2:1)
            torus_Knot01_Default.setAttribute("emissivepower", isStarted?100:0)
        }
    
        Studio3D {
            id: studio3D
            width: parent.width
            height: parent.height
            anchors.verticalCenter: parent.verticalCenter
    
            ViewerSettings {
                scaleMode: ViewerSettings.ScaleModeFill
            }
    
            Presentation {
                id: cluster
                source: "qrc:/presentation/presentation.uia"
    
                SceneElement {
                    id: scene
                    elementPath: "Scene"
                }
                Element{
                    id: torus_Knot01
                    elementPath: "Scene.Layer.Torus_Knot01"
                }
                Element{
                    id: torus_Knot01_Default
                    elementPath: "Scene.Layer.Torus_Knot01.Default"
                }
    
                DataInput {
                    name: "newDataInput"
                    value: isStarted ? "萌夢論壇 開始變身" : "萌夢論壇 停止變身"
                }
            }
        }
        MouseArea{
            anchors.fill: parent
            onClicked: isStarted = !isStarted
        }
    }
    
    • 當我們點擊屏幕后,DataInput 控制文字發生改變,
    • 同時我們主動調用setAttribute設置相關屬性

    源代碼下載

    總結

    有了這個框架,我們可以很直觀很快速的開發3d程序

    版權聲明:本文為chen_227原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/chen_227/article/details/107021696

    智能推薦

    介紹Qt Quick 3D基準測試應用

    原文翻譯自:Introducing Qt Quick 3D Benchmarking Application 原文作者:Tomi Korpipää 校審:Richard Lin 為什么要有基準測試應用? 隨著即將發布的Qt 5.15和Qt Quick 3D的改進版本,我們希望為客戶和其他用戶提供一種簡單的測試其硬件性能的方法。這就是創建基準測試演示應用的原因。 我能用它做什么?...

    hive 導出數據之一列多行,轉為一行多列

    需求:提取數據 說明:原數據是一列多行,需要轉化為一行多列 待查詢表為:temp_05 待查詢數據為: 待查詢數據如圖: 需要提取的數據表頭如下: 預定日期 昨日價格 前天價格 2018-02-01 2018-02-02 2018-02-03 2018-02-04 可用提數 SQL 數據如圖: 以下為嘗試過程 數據如圖: 數據如圖: 數據如圖: 數據如圖:...

    asp.net做一個簡易的聊天室

    要求: 結果: 關鍵代碼: Default.aspx Default.aspx.cs Default2.aspx Default2.aspx.cs Default3.aspx Default3.aspx.cs Default4.aspx...

    動態SQL和多表關聯-筆記

    《動態SQL與多表關聯》筆記 學習目標 能夠使用動態SQL完成SQL拼接 能夠使用resultMap完成多表查詢 能夠使用一對一查詢 能夠使用一對多查詢 (注:多對多其實就是兩個一個多) 映射文件:為什么要resultMap 目標 定義結果映射 使用結果映射 回顧 在mybatis中有2種配置文件: 核心配置文件,如:sqlMapConfig.xml 實體類映射文件,如:UserMapper.xm...

    【OpenGL C++ UE4】獲取模型頂點及面索引數據,并優化存儲結構供UE4繪制

    目錄 一、功能需求 二、成果 三、環境配置 四、詳細步驟 4.1 Max制作三棱錐并處理 4.2 核心代碼 4.2.1 傳入結構體數據 4.2.2 頂點去重、更新索引 4.2.3 輸出本地CSV文件 4.3 UE4繪制 一、功能需求 想必你肯定會問我一個問題,UE4直接導入模型不好么? 哈哈,前提是在做畢設時,導師提供的只有頂點與面索引數據,沒有模型。 下文詳細介紹了畢設開發中的難點,涉...

    猜你喜歡

    解決Pyinstaller打包numpy和pandas庫文件過大問題

    解決Pyinstaller壓縮numpy和pandas庫文件過大問題 文件包類型和網上的方法 Windows下docker的安裝 在docker下實現打包     今天是2021年的第一天,先祝各位小伙伴現年快樂哈。最近因為做了一個項目,需要打包文件,文件中包含了numpy和pandas庫,結果打包出來幾百行的代碼居然要900m,人都傻了,翻遍了全網找解決方...

    【混沌工程】基于ChaosBlade實現網絡故障模擬

    一、前言 很久之前曾基于linux內核自帶的TC和netem模擬一些公網中遇到的極端情況(延遲、丟包、重復、損壞和亂序等),驗證了我們傳輸程序的健壯性! 具體細節可見這篇老博客: https://blog.csdn.net/u013128262/article/details/84784663 最近在復現kafka生產端一個timeout異常場景時,發現之前方案時因為內核和OS版本問題有些差異而無...

    使用FileZilla連接時超時,無法連接到服務器

    用FileZilla連接服務器時,顯示錯誤: 解決方法: 檢查基本的內容 主機是否寫錯 端口是否自定義,默認21 檢查用戶名和密碼是否錯誤 如果連接的是公司內網 使用ping命令,測試一下是否能收到數據 收不到則需要開啟VPN,再ping,看是否能接收數據(請老鐵們用自己最合適的方法解決) 如果開啟VPN后能接收數據,則可以連接一下服務器,如果不行(怎么可能不行),則跳轉3并依次嘗試 開啟VPN后...

    反匯編:結構體拷貝傳參

    一、結構體拷貝傳參 二、引用和常引用傳參 三、大結構體做形參/數組拷貝...

    精品国产乱码久久久久久蜜桃不卡