les bases de qt 3d - ervin · les bases de qt 3d 2 0 1 6 les bases du tracé 3d p.34...
TRANSCRIPT
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.