Qt3D文档阅读笔记-Qt3D老版本知识点及使用新版本的运行
目錄
?
?
前言
老版本
新版本
?
前言
使用Qt提供的API好處,無需知道3D架構方面的知識,以及OpenGL在桌面應用程序是如何跑起來的,及OpenGL中管道的使用。
官方推薦在寫2D,3D混寫程序的時候,使用Qt Quick框架,這樣會簡單(個人覺得原因就是Qt Quick框架就是基于OpenGL的)
官方給的這套教程全是基于QML語言的,里面無C++代碼。這里還要部分OpenGL的知識(我要是會OpenGL就不會學你這套教程了)。
這套教程中還提出:Qt3D的C++接口提供了更多的特征和更好的控制,當要寫更為復雜的3D應用程序的時候,需要定義自己的C++模塊然后暴露給Qt
Quick。
重點(注意了,這個是Qt3D 1.0版本的,這個版本的已經被淘汰了!)
? ? ? ? ? 1. Viewport:整個場景的視口。是3D的根元素定義了場景和攝像機,是整個場景的最外層;
? ? ? ? ? 2. Camera:他作為Viewport的一個屬性,定義了觀察位置及方向的投影,同時也支持立體投影;
? ? ? ? ? 3. Item3D:在場景中創建3D對象。創建一個Item3D后就必須指定一個Mesh。可以設置父類形成一個Item3D樹(和Qt里面對象樹差不多)。
? ? ? ? ? 4. Mesh:主要是來加載幾何圖形,可以通過文件自動的加載幾何圖像,文件格式支持3ds、dae、bez、obj。
? ? ? ? ? 5. Effect:為item在screen中渲染effect。這些effect包括燈光、材質、紋理。
? ? ? ? ? 6. ShaderPrograme:指定一個片段和一堆頂點。如果自定義屬性和頂點著色器以相同的名稱存在,著色器程序會自動將它們綁定到片段和頂點著色器。
? ? ? ? ? 7. Material:為effect提供屬性,如燈光演示等屬性。
? ? ? ? ? 8. Transformations:目前有4種轉換Rotation3D、Translation3D、Scale3D、LookAtTransform。這里有個要注意的地方,這里的場景其實也是個矩陣,他是一個叉乘。轉換再平移和平移再轉換的結果是不同的。
?
老版本
Hello world in Qt3D // game.qml import QtQuick 2.0 import Qt3D 1.0 // A Viewport element with defined geometries Viewport {id: rootwidth: 300height: 200 }?
新版本
這個是老版本的代碼,運行成功后會出現一個黑色矩形的界面。這個代碼是用Qt3D 1.0的,目前已經被廢棄了。目前我們用最新的來做!
這里要介紹幾個新的組建:
Entity為一個空殼,專門放3D組建的。目前的新版本中使用;
RenderSettings:設置一個場景,一般Viewport就放到這里面;
新版本運行截圖如下:
程序結構如下:
源碼如下:
Qt3DDemo.pro
QT += quick 3dcore 3drender 3dinput 3dquick qml quick 3dextras 3dquickextras CONFIG += c++11DEFINES += QT_DEPRECATED_WARNINGSSOURCES += \main.cppRESOURCES += qml.qrcQML_IMPORT_PATH =QML_DESIGNER_IMPORT_PATH =qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += targetmain.cpp
#include <Qt3DQuickExtras/qt3dquickwindow.h> #include <QGuiApplication>int main(int argc, char *argv[]) {QGuiApplication app(argc, argv);Qt3DExtras::Quick::Qt3DQuickWindow view;view.setSource(QUrl("qrc:/main.qml"));view.show();return app.exec(); }main.qml
import QtQuick 2.9 import QtQuick.Window 2.2 import Qt3D.Core 2.0 import Qt3D.Render 2.0Entity{RenderSettings{activeFrameGraph : RenderSurfaceSelector {Viewport {}}} }
?
總結
以上是生活随笔為你收集整理的Qt3D文档阅读笔记-Qt3D老版本知识点及使用新版本的运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库工作笔记/设计思路-通过增加索引表
- 下一篇: MySQL工作笔记-使用事件和存储过程定