Les bases de Qt 3D - ervin · Les bases de Qt 3D 2 0 1 6 Les bases du tracé 3D p.34...

Post on 13-Jul-2020

4 views 0 download

Transcript of Les bases de Qt 3D - ervin · Les bases de Qt 3D 2 0 1 6 Les bases du tracé 3D p.34...

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