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

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