天天看點

C++跨平台架構Qt資訊:Qt Quick 3D粒子簡介

Qt技術交流群現已開通,QQ搜尋群号“765444821”即可加入!

Qt是一個跨平台架構,通常用作圖形工具包,它不僅建立CLI應用程式中非常有用。而且它也可以在三種主要的桌上型電腦作業系統以及移動作業系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式裝置,Android(Necessitas)和iOS的端口上運作。現在我們為你提供了免費的試用版。

下載下傳Qt6最新試用版

Qt Quick 3D在Qt 6.1中引入了對3D粒子的支援。與執行個體渲染類似,3D粒子子產品也是Qt 6.1中的技術預覽,并且将在Qt 6.2中得到完全支援。在此部落格文章中,我們将介紹每個開發人員和設計師應了解的有關新3D粒子的知識,是以請繼續閱讀。

Qt元件推薦:

  • QtitanRibbon: 遵循Microsoft Ribbon UI Paradigm for Qt技術的Ribbon UI元件,緻力于為Windows、Linux和Mac OS X提供功能完整的Ribbon元件。
  • QtitanChart :是一個C ++庫,代表一組控件,這些控件使您可以快速地為應用程式提供漂亮而豐富的圖表。并且支援所有主要的桌面。
  • QtitanNavigation :模拟Microsoft Dynamics CRM-2016/Office 365導航界面和一組控件改善Qt.C ++應用程式使用者體驗的QtitanNavigation元件。

用法

如果您熟悉Qt Quick粒子子產品,則也應該對3D粒子感到滿意。 首先,您将在QML檔案的開頭使用“ import QtQuick3D.Particles3D”,而不是“ import QtQuick.Particles”。 這是一個具有單個邏輯粒子,一個發射器和一個效應子的簡單粒子系統的QML代碼:

ParticleSystem3D {     
 SpriteParticle3D {          
id: starParticle          
sprite: Texture
 {             
 source: "images/star.png"          
}          
maxAmount: 200          
color: "#ffff00"          
particleScale: 20.0          
fadeOutDuration: 500          
billboard: true      
}      
ParticleEmitter3D {         
 particle: starParticle          
velocity: VectorDirection3D {              
direction: Qt.vector3d(100, 200, 0)             
 directionVariation: Qt.vector3d(20, 20, 20)         
 }         
 particleScaleVariation: 0.4        
  emitRate: 50          
lifeSpan: 4000     
 }      
Gravity3D {         
 magnitude: 100     
 }  
}  
           

當您運作上面的示例時,您将看到類似以下内容:

C++跨平台架構Qt資訊:Qt Quick 3D粒子簡介

或者,如果将SpriteParticle3D替換為ModelParticle3D以擷取3D粒子并添加一些顔色和旋轉變化,則輸出将如下所示:

C++跨平台架構Qt資訊:Qt Quick 3D粒子簡介

是以,讓我們看一下簡單示例的一些方面:

  • ParticleSystem3D是粒子系統的根。它處理系統時序,并将所有其他相關元素(如粒子,發射器和影響器)組合在一起。與Qt Quick ParticleSystem相比,ParticleSystem3D的一項簡潔功能是您可以自由設定時間動畫,例如,它可以使粒子與其他動畫同步。設計師特别喜歡的另一個功能是,可以将粒子系統與特定種子随機化,以在每次運作時獲得相同的像素完美粒子效果。
  • 支援兩種不同的邏輯粒子類型:用于2D紋理粒子的SpriteParticle3D和用于3D模型粒子的ModelParticle3D。模型粒子實際上使用執行個體渲染來渲染成千上萬的粒子,并具有完整的Quick 3D材質和燈光支援。邏輯粒子将定義粒子的常見外觀。一個重要的屬性是maxAmount,它用于為粒子配置設定資料。 Qt Quick粒子不具有此功能,但它們會根據emitRate,lifeSpan和突發自動增長資料。要求對其進行定義使我們能夠優化記憶體使用情況,并無需重新配置設定就可以修改emitRate和lifeSpan
  • ParticleEmitter3D處理粒子的實際發射。有許多屬性可以定義單個粒子的外觀以及它們的發射方式。許多屬性具有Variation對應項,用于增加粒子之間的視差。要從另一個粒子發射粒子,可以使用TrailEmitter3D。
  • 目前有4種不同的影響因素可用于控制粒子在其生命周期中的動畫方式,将來可能會添加更多的影響因素。在這裡,我們使用Gravity3D效應器,其大小可将粒子向下拖動。

要了解更多資訊,請檢視 Particles3D API文檔和Testbed示例的文檔。

性能說明

與所有Qt子產品一樣,性能一直是新3D粒子子產品的關鍵方面之一。畢竟,我們希望這些粒子可以在桌上型電腦,移動裝置和嵌入式裝置的各種硬體上使用。也就是說,這不僅僅是在螢幕上渲染最大數量的粒子元素。易于使用的API,對不同用例的可擴充性,渲染品質,與其他UI元素的內建等對我們也很重要。

目前,渲染在GPU上運作,而粒子系統邏輯在CPU上運作。我們正在使用所謂的無狀态粒子系統,如果這看起來很有用,它也可以在GPU上移動系統邏輯。初始測量表明,我們在CPU和GPU之間保持了很好的平衡。我們的無狀态系統還可以在将來更好地進行工具內建,因為可以在時間軸上對粒子進行動畫處理(例如,請參見測試平台“ Qt Cube Burst”)。就像已經提到的那樣,模型粒子利用執行個體渲染來提高性能。不幸的是,這意味着OpenGL ES 2.0還遠遠不夠,至少需要OpenGL ES 3.0,Vulkan等。現代後端是必需的,這樣我們才能提高渲染性能。

Qt技術交流群現已開通,QQ搜尋群号“765444821”即可加入!

繼續閱讀