View
4
Download
0
Category
Preview:
Citation preview
LesbasesdeQt3DKévinOttens,ArtisanLogicielàKDAB
2016
LesbasesdeQt3D
2016 LesbasesdeQt3D p.2
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
LesbasesdeQt3D
2016 Fonctionnalités p.3
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
Qu'est-cequeQt3D?
2016 Fonctionnalités p.4
Cen'estpasqu'unmoteur3D!
Généraliste,pasuniquementpourlesjeux
Moteurdesimulationtemps-réelsouple
Conçupourlepassageàl'échelle
Extensibleetflexible
Moteurdesimulation
2016 Fonctionnalités p.5
Lecœurn'estpasspécifiqueàla3D
IlpeutgérerplusieursdomainessimultanémentIA,logique,audio,etc.Etbiensûrilfaitaussilerendu3D!
ToutlenécessairepourdessystèmesdesimulationcomplexesSystèmesmécaniquesPhysique...etaussilesjeux
Passageàl'échelle
2016 Fonctionnalités p.6
Séparationfrontend/backendFrontendlégersurlathreadprincipaleBackendexécutédansunethreadsecondaire
Làoùrésidelasimulation
Communicationfrontend/backendnon-bloquante
Lebackendmaximiselachargeviaunepooldethreads
Extensibleetflexible
2016 Fonctionnalités p.7
Lesdomainessontajoutésviadesaspectsindépendants...uniquementsiriennecorrespondàvosbesoins
FourniàlafoisdesAPIsC++etQML
S'intègrebienaveclerestedeQtQuiveutobtenirsesdonnéesdesimulationd'unebasededonnées?
SystèmeEntitéComposant(ECS)utilisépourcombinerlescomportementsdansvosobjets
Pasdehiérarchied'héritageprofonde
LesbasesdeQt3D
2016 SystèmeEntitéComposant?Kezaco? p.8
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
ECS:Définitions
2016 SystèmeEntitéComposant?Kezaco? p.9
ECSestunpatrond'architecturePopulairedanslesmoteursdejeuxFavoriselacompositionplutôtquel'héritage
Uneentitéestunobjetgénéraliste
Uneentitéobtientsoncomportementencombinantdeladonnée
Ladonnéeprovientdecomposantstypés
CompositionvsHéritage
2016 SystèmeEntitéComposant?Kezaco? p.10
Analysonsunexemplefamilier:SpaceInvaders
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.11
Hiérarchied'héritagetypique
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.12
Toutvabienjusqu'àcequeleclientdemandeunenouvellefonctionnalité:
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.13
Solutiontypique:ajouteràlaclassedebase
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.14
Nepassepasàl'échelle:
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.15
Etl'héritagemutiple?
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.16
Etl'utilisationd'interfaces?
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.17
Est-cequecelapasseàl'échelle?
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.18
L'héritageest-ilsuffisammentflexible?
CompositionvsHéritage(suite)
2016 SystèmeEntitéComposant?Kezaco? p.19
Héritage:RelationfigéesàlaconceptionHiérarchiesd'héritagecomplexes:profondes,larges,héritagesmultiplesLesfonctionnalitéstendentàmigrerverslaclassedebase
SystèmeEntitéComposantAutoriselesmodificationsàl'exécutionÉviteleslimitationsdel'héritageAuncoûtsupplémentaire:
PlusdeQObjectsDifférentdeshabitudesdelaplupartdesdéveloppeursobjet
PasbesoindefigerdessuppositionssurQt3Dquinepourrontpasêtrechangéesplustardlorsdel'ajoutdenouvellesfonctionnalités
LesbasesdeQt3D
2016 HelloDonut p.20
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
HelloDonut(QML)
2016 HelloDonut p.21
AvoiruneEntityracinepourreprésenterlascèneestunebonneidée
UneEntitypar"objet"danslascène
Lecomportementdesobjetsestobtenuenattachantdescomposants
PourafficheruneEntityilfaut:
UnegéométriepourdécriresaformeUnmatériaupourdécrirel'apparencedelasurface
Demoqt3d/ex-hellodonut-qml
APIC++vsAPIQML
2016 HelloDonut p.22
L'APIQMLestunmiroirdel'APIC++
LesclassesC++sontnomméescommelerestedeQt
LenomdesélémentsQMLperdentlepréfixeQQt3DCore::QNodevsNodeQt3DCore::QEntityvsEntity...
LesbasesdeQt3D
2016 L'ECSdeQt3Dexpliqué p.23
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
ToutestQNode
2016 L'ECSdeQt3Dexpliqué p.24
Qt3DCore::QNodeletypedebaseutilisépartoutIlhéritedeQObjectetdetoutessesfonctionnalitésAjoutelacommunicationfrontent/backendeninterne
Qt3DCore::QEntity
IlhéritedeQt3DCore::QNodeIlaggrègesimplementdesQt3DCore::QComponents
Qt3DCore::QComponent
IlhéritedeQt3DCore::QNodeLesdonnéessontfourniesparsesclassesfilles
Qt3DCore::QTransformQt3DRender::QMeshQt3DRender::QMaterial
...
ToutestQNode(suite)
2016 L'ECSdeQt3Dexpliqué p.25
Ilvousfautencoreunsystème
2016 L'ECSdeQt3Dexpliqué p.26
LasimulationestexécutéeparQt3DCore::QAspectEngine
Lesinstancesdesous-classesdeQt3DCore::QAbstractAspectsontenregistréessurlemoteur
LecomportementprovientdesaspectstraitantlesdonnéesdescomposantsLesaspectscontrôlentlesdomainemanipulésparvotresimulation
Qt3DfourniQt3DRender::QRenderAspectQt3DInput::QInputAspectQt3DLogic::QLogicAspect
Notezquelesaspectsn'ontpasd'APIToutestfournipardessous-classesdeQt3DCore::QComponent
LesbasesdeQt3D
2016 Gestiondesentrées p.27
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
Périphériquesphysiques
2016 Gestiondesentrées p.28
Pourgérerlesentréesilnousfautd'abordgénérerlesévénementsd'entrée
Lessous-classesdeQt3DInput::QAbstractPhysicalDevicereprésententlespériphériquesd'entrée
Qt3DInput::QKeyboardDeviceQt3DInput::QMouseDevice
D'autrespeuventêtreajoutésplustard
ParluimêmeunpériphériquenefaitpasgrandchoseLesgestionnairesd'entréeexposentdessignauxémisenréponseauxévénements
Pointage
2016 Gestiondesentrées p.29
Lepointagedehaut-niveauestfourniparlecomposantQt3DRender::QObjectPicker
ImplicitementassociéàlasourisUtiliseunpointagebasésurdulancerderayons
Qt3DRender::QObjectPickerémetsdessignaux:pressed(),released(),clicked()
moved()-uniquementquanddragEnabledestvraientered(),exited()-uniquementquandhoverEnabledestvrai
LapropriétécontainsMousefourniunealternativedéclarativepourentered(),exited()
Périphériquesphysiquesvspériphériqueslogiques
2016 Gestiondesentrées p.30
Lespériphériquesphysiquesfournissentuniquementdesévénementsdiscrétisés
Ilestdifficiledelesutiliserpourcontrôlerunevaleurdansletemps
Lespériphériqueslogiquespermettent:D'obtenirunevueanalogiquesurunpériphériquephysiqueD'aggrégerplusieurspériphériquesphysiquescommeunpériphériqueunifié
Actiond'entréelogique
2016 Gestiondesentrées p.31
Qt3DInput::QActionexposeunevaleurbinaire
Elleestactivéeparuneentréequipeutêtre:UnsimpleboutonavecQt3DInput::QActionInputUnecombinaisonsimultanéedeboutonsavecQt3DInput::QInputChordUneséquencedeboutonsavecQt3DInput::QInputSequence
Lorsquel'étatdel'actionchange,lapropriétéactivechanged'état
Demoqt3d/ex-logical-input-qml
Axed'entréelogique
2016 Gestiondesentrées p.32
Qt3DInput::QAxisexposeunevaleuranalogiqueentre-1et1
Ellevariedansletempsquanduneentréeestgénérée:LorsqueunaxephysiquechangeavecQt3DInput::QAnalogAxisInputPendantqu'unboutonestpresséavecQt3DInput::QButtonAxisInput
Lorsquel'étatdel'axechange,lapropriétévaluechange
Demoqt3d/ex-logical-axes-qml
Toutassemblerpourdéplacerdesboîtes
2016 Gestiondesentrées p.33
Lefocusestgéréaveclatouchetabulation
Laboîteayantlefocusestplusgrande
Lesflèchesdéplacentlaboîtesurlesol
Pageprécédente/suivantefaittournerlaboîtesursonaxeY
Lesboîtess'éclairentlorsquelasourislessurvole
Cliquersuruneboîteluidonnelefocus
Lesboîtespeuventêtredéplacéesaveclasouris
Demoqt3d/sol-moving-boxes-qml-step3
LesbasesdeQt3D
2016 Lesbasesdutracé3D p.34
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
Legraphedescène
2016 Lesbasesdutracé3D p.35
LegraphedescènefournilareprésentationspatialedelasimulationQt3DCore::QEntity:cequiparticipeàlasimulationQt3DCore::QTransform:oùcelasetrouve,quelletaillecelaa,quelleorientation
Lestransformationshiérarchiquessontcontrôléesparlarelationparent/enfant
SimilaireàQWidget,QQuickItem,etc.
Silascèneesttracée,nousavonsbesoind'unpointdevuedessusIlestdécritavecQt3DRender::QCamera
Qt3DCore::QTransform
2016 Lesbasesdutracé3D p.36
InheritsfromQt3DCore::QComponent
Representsanaffinetransformation
Threewaysofusingit:Throughproperties:scale3D,rotation,translationThroughhelperfunctions:rotateAround()Throughthematrixproperty
Transformationsareapplied:toobjectsinScale/Rotation/TranslationordertocoordinatesystemsinTranslation/Rotation/Scaleorder
Transformationsaremultipliedalongtheparent/childrelationship
Transformations
2016 Lesbasesdutracé3D p.37
1 importQt3D.Core2.023 Entity{4 components:[5 Transform{6 scale3D:Qt.vector3d(1,2,1.5)7 translation:Qt.vector3d(0,0,-1)8 }9 ]1011 Entity{12 components:[13 Transform{translation:Qt.vector3d(0,1,0)}14 ]15 }16 }
Géométries
2016 Lesbasesdutracé3D p.38
Qt3DRender::QRenderAspecttracelesQt3DCore::QEntitysavecuneforme
LapropriétégeometrydeQt3DRender::QGeometryRendererspéfifielaforme
Qt3Dfournidessous-classesdeQt3DRender::QGeometryRenderer:
Qt3DExtras::QSphereMeshQt3DExtras::QCuboidMeshQt3DExtras::QPlaneMeshQt3DExtras::QTorusMeshQt3DExtras::QConeMeshQt3DExtras::QCylinderMesh
QtDemoexamples/qt3d/basicshapes-cpp
Matériaux
2016 Lesbasesdutracé3D p.39
SiuneQt3DCore::QEntityauniquementuneformeelleapparaîtranoire
LecomposantQt3DRender::QMaterialfournil'apparenced'unesurface
Qt3Dfournidessous-classedeQt3DRender::QMaterial:
Qt3DExtras::QPhongMaterialQt3DExtras::QPhongAlphaMaterialQt3DExtras::QDiffuseMapMaterialQt3DExtras::QDiffuseSpecularMapMaterialQt3DExtras::QGoochMaterial
...
Demoqt3d/sol-textured-scene
Lumières
2016 Lesbasesdutracé3D p.40
Mêmeaveclesgéométriesetmatériauxonneverraitrien
Nousavonsbesoindelumières...heureusementQt3Dpositionneunelumièrepardéfautsiaucunen'estfournie
Engénéralonveutcontrôlerl'éclairaged'unescène
Qt3Dfournilestypesdelumièressuivants:DirectionalLightPointLightSpotLight
Labqt3d/ex-lights-qml
LesbasesdeQt3D
2016 Lapartieimmergéedel'iceberg p.41
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
Fairesespropresgéométries
2016 Lapartieimmergéedel'iceberg p.42
GrâceàQt3DRender::QBuffernouspouvonscréernospropresvertices
GeometryRenderercontrôlecommentlesbufferssontcombinésetinterprêtés
Utilepourprogrammersespropresgéométries:DepuisunefonctionDepuisunensemblededonnéesDepuisuneinteractionutilisateur
Demoqt3d/ex-surface-function
Compositiondetexturesetfiltrage
2016 Lapartieimmergéedel'iceberg p.43
Ilestpossibled'utiliserplusieurstexturesdepuisunseulmatériau
Ilestaussifacilederéutiliserlemodèled'éclairagepardéfaut
Ensuitevouspouvezcombinercommevouslesouhaitezdepuisunshader
Demoqt3d/sol-earth
Texturesprocédurales
2016 Lapartieimmergéedel'iceberg p.44
Beaucoupd'exemplessontdisponiblessurleWebhttps://www.shadertoy.com/
EngénéralécritspourWebGLouOpenGLES2Peutnécessiterunpeud'adaptationLaplupartsontloind'êtretriviaux!
MaisilssontfacilesàintégrerdansMaterialetàparamétrer
Demoqt3d/ex-plasma
IntégreravecQtQuickgrâceàScene3D
2016 Lapartieimmergéedel'iceberg p.45
FourniparlemoduleQtQuick.Scene3D
PrenduneEntityenenfantquiseravotrescènecomplète
Lesaspectschargéssontcontrôlésparlapropriétéaspects
LesévénementsdesurvoldelasourissontacceptésuniquementsilapropriétéhoverEnabledestvraie
Demoqt3d/ex-controls-overlay
Etplus...
2016 Lapartieimmergéedel'iceberg p.46
Gestiondecouches
Matériauxetmodèlesd'éclairagespécifiques
Texturemipmaps
CubeMaps
Portabilitédevotrecodesurplusieursversionsd'OpenGL
Contrôlecompletsurl'algorithmederendu
Chargementd'objetsoudescènescomplètesdepuisdesfichiers(3ds,collada,qml...)
Effetsdepost-processing(simpleoumulti-passes)
Instancedrendering
etc.
Demoqt3d/ex-multiple-effects
Demoqt3d/sol-asteroids
LesbasesdeQt3D
2016 LefuturdeQt3D p.47
Fonctionnalités
SystèmeEntitéComposant?Kezaco?
HelloDonut
L'ECSdeQt3Dexpliqué
Gestiondesentrées
Lesbasesdutracé3D
Lapartieimmergéedel'iceberg
LefuturdeQt3D
Qu'est-cequiarriveradanslefuturdeQt3D?
2016 LefuturdeQt3D p.48
Qt3DCoreAméliorationdesperformancesAméliorationdelagestiondupooldethreadsurlebackend-jobsquicréentdesjobs
Qt3DRenderUtiliserQtQuickouQPainterpourtracerdansunetextureEmbarquerQtQuickdansQt3DavecgestiondesentréesSupportduniveaudedétailpourlesgéométriesBillboards-objetsfaisanttoujoursfaceàlacaméraSupportdutexte-2Det3DMatériauxadditionnelstelquelesupportduPhysicsBasedRenderingSystèmesdeparticules
EntréesQt3DAxesd'entréequiappliqueunevaleurcumuléetellequelaposition,lavélocitéoul'accélérationSupportdepériphériquesd'entréeadditionnels
Souris3D,manettesdejeuxEntréesénuméréescommelesboutons8positions,etc.
Qu'est-cequiarriveradanslefuturdeQt3D?
2016 LefuturdeQt3D p.49
Nouveauxaspects:Détectiondecollisions
Permetdedétecterdansdesentitéssontencollisionouentrent/sortentdevolumesdansl'espace
AnimationAnimationparkeyframeAnimationdesquelettesMorphingRetirerlesanimationsdelathreadprincipale
PhysiqueSimulationdescorpsrigidesetsouples
IA,Audiospatial...
Outillage:EditeurdescèneOptimisationd'assetspourlesgéométries,textures,etc.
Merci!
www.kdab.com
kevin.ottens@kdab.com
Recommended