翻譯|使用教程|編輯:鮑佳佳|2020-11-04 10:55:05.170|閱讀 338 次
概述:自從發布了有關Qt Quick 3D的任何更新以來已經有一段時間了,但是不是因為沒有任何進展。實際上,情況恰恰相反:Qt團隊一直忙于為Qt Quick 3D做好6.0版的準備工作,所以沒有時間談論添加的所有很酷的新功能。因此,今天談談到目前為止Qt已完成的功能
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。趕快點擊下載Qt最新試用版吧>>
【Qtitan組件集】
Qt Quick 3D可以在任意地方渲染
Qt 6版本最大的開發工作是將渲染引擎移植到Qt Rendering硬件接口上,這種努力將是非常值得的,因為現在可以使用Qt Quick和Qt Quick 3D與每個平臺的最佳圖形API。支持的圖形API列表是
這意味著無論你選擇使用什么平臺和圖形API組合,Qt Quick 3D都能按照預期工作,而不需要你需要了解每個圖形API的工作細節。任何需要圖形API特定知識的地方,例如涉及到坐標系統時,我們只需要使用OpenGL語義,并為你透明地將它們翻譯成原生API到應用程序中。在過去的幾年里,隨著圖形API的進一步分化,圖形開發可能會變得更加困難,但有了Qt Quick和Qt Quick 3D,這一點你就不需要擔心了。
在3D場景中更深入地集成2D內容
在早期版本的Qt Quick 3D中,必須將所有2D內容渲染到屏幕外的表面(例如紋理),然后才能在3D中使用。這項工作非常類似于Layers在Qt Quick中的工作方式。在Qt 6中,現在可以將2D Qt Quick Items直接渲染到3D場景中。因此,如果您曾經因為Qt Quick場景中缺少透視轉換而感到沮喪,那么現在就有無限可能。
import QtQuick import QtQuick3D Window { visible: true width: 640 height: 480 title: qsTr("2D in 3D") color: "black" View3D { anchors.fill: parent PerspectiveCamera { z: 200 } DirectionalLight { } Model { source: "#Cube" materials: DefaultMaterial {} eulerRotation.y: 20 Node { // Empty spatial Node to give 2D item // a position in 3D space y: 100 Text { // 2D content in 3D anchors.centerIn: parent text: "Cube Label" color: "white" } } } } }
在上面的示例中,Text組件是一個2D項,它是3D Cube的子項,如果要移動該模型,則2D項的位置將與模型綁定。
如果你想把Qt Quick的內容渲染成一個紋理,那還是可以的。 一個例子是
import QtQuick import QtQuick3D Window { visible: true width: 640 height: 480 View3D { anchors.fill: parent PerspectiveCamera { z: 200 } DirectionalLight { } Texture { id: dynamicQMLTexture sourceItem: Rectangle { width: 256 height: 256 color: "pink" Text { anchors.centerIn: parent text: "Dynamic Texture!" color: "white" font.pointSize: 24 } } } Model { source: "#Cube" eulerRotation.y: 20 materials: DefaultMaterial { diffuseMap: dynamicQMLTexture } } } }
在上面的例子中,Texture組件的內容來自于任何Qt Quick Component設置的sourceItem屬性。這就在內部將該組件層次結構渲染成一個QSGTexture,它可以在3D渲染器中用于紋理數據,在本例中,它被映射為立方體模型。
改進的glTF2支持
Qt Quick 3D在glTF2內容上確實可以很好地工作,現在它比以往任何時候都更好。在6.0版本中,我們嘗試支持盡可能多的基本glTF2規范。最大的改進領域之一是支持glTF2資產的動畫功能。現在可以導入包含綁定動畫的內容。
為了實現更有效的動畫支持,我們所做的其他改進之一是在QtQuickTimeline中添加了對二進制關鍵幀的支持。這意味著具有復雜動畫的組件不需要由數千行QML表示。
glTF2 Morph動畫是6.0發行版中明顯缺少的一件事。這項工作尚在進行中,但很遺憾,未能及時完成6.0版的發布。您可以在不久的將來發布此功能。
除了動畫工作之外,最新版本還付出了很多努力來確保以與3D內容創建工具中相同的方式渲染導入的glTF2資產。目的是為glTF和盡可能多的擴展提供100%的支持,因此向前邁進期望在此領域有更多的改進。
重新設計的自定義材料和后處理效果系統。
我們不得不對Qt 5版Qt Quick 3D做出的妥協之一是如何定義自定義材質和后期處理效果。這個系統與 Qt 3D Studio 中的系統基本相同,但不幸的是,它很難使用,并在渲染引擎中創造了很多復雜性。隨著Qt 6和對渲染硬件接口的移植,我們認真審視了這些系統,并決定我們可以做得更好。
自定義材料
自定義材質的目的是為用戶提供一種方法來定義他們自己的材質,以便在場景中對模型進行著色。這在傳統上意味著編寫著色器代碼。在Qt Quick中,我們提供了一個名為ShaderEffect的API,它為用戶提供了一種將著色器效果應用到2D項目的方法,以及一種將QML屬性綁定為著色器制服的強大方法。我們想做的是為3D材質提供同樣的API,但與2D不同的是,在編寫shader代碼時需要考慮更多的狀態。比如3D物品需要注意光照、陰影和混合等問題。 渲染一個2D項目的著色器只需要工作關于源紋理作為輸入,所以著色器可以相當自如,但在3D中除非編寫非常簡單的材質,否則不可能只編寫渲染所需的所有著色器代碼。這意味著對于大多數用戶來說,創建自己的材質可能太困難了。
這就是為什么我們決定為定義材質創建更多的框架。在這里查看新的自定義材質API細節。
后期處理效果
后期處理效果API與之前版本中的方式相當相似,但已經更新為遵循新的CustomMaterial API的模式。后處理效果從本質上來說已經和ShaderEffect相當相似,大部分狀態是有一個輸入紋理和一個輸出紋理。然而它并不是完全一樣的,這樣的方式我們可以直接使用ShaderEffect API,因為除了顏色紋理,在3D中,你還將獲得一個有意義的深度緩沖區。 也有可能,與ShaderEffect不同,你需要執行多次傳遞來實現所需的效果,所以后處理效果API實現了這一點。在這里查看后處理效果API的詳細信息。
Custom Material和Post-Processing Effect API非常強大,可以實現很多有趣的用例,在這里真的無法徹底描述,所以期待不久后有另一篇博文專門介紹這些功能。
感謝您的閱讀,希望這篇文章能帶給你一定的幫助!如果這篇文章沒能滿足你的需求、點擊獲取更多文章教程!現在立刻下載Qt6免費試用吧!更多Qt類開發工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現直降1000元,歡迎咨詢慧都獲取更多優惠>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: