26.06.2013 Views

Utilisation avancée des processeurs graphiques avec Qt

Utilisation avancée des processeurs graphiques avec Qt

Utilisation avancée des processeurs graphiques avec Qt

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Utilisation</strong> <strong>avancée</strong> <strong>des</strong> <strong>processeurs</strong> <strong>graphiques</strong> <strong>avec</strong> <strong>Qt</strong> par Rémi Achard Guillaume Belz<br />

0.0 - Réorganisation du tutoriel...................................................................................................................................4<br />

1.0 - Introduction..........................................................................................................................................................5<br />

1.0.1 - Contenu du tutoriel et objectifs.................................................................................................................. 5<br />

1.0.2 - Environnement de développement.............................................................................................................5<br />

1.0.3 - Prérequis.....................................................................................................................................................5<br />

1.1 - Architecture <strong>des</strong> GPU......................................................................................................................................... 6<br />

1.1.1 - Vue générale...............................................................................................................................................6<br />

1.1.2 - Le pipeline graphique................................................................................................................................. 6<br />

1.1.3 - Les mémoires............................................................................................................................................. 7<br />

1.2 - Générer un terrain.............................................................................................................................................. 8<br />

1.2.1 - La classe HeightmapWidget.......................................................................................................................8<br />

1.2.2 - Chargement <strong>des</strong> données du terrain..........................................................................................................9<br />

1.2.3 - Initialisation de la vue...............................................................................................................................11<br />

1.2.4 - Gestion de la souris et du clavier............................................................................................................ 12<br />

1.2.5 - Mesure <strong>des</strong> performances........................................................................................................................13<br />

1.2.6 - Gestion <strong>des</strong> erreurs..................................................................................................................................14<br />

2.0 - Envoyer <strong>des</strong> données au processeur graphique..............................................................................................15<br />

2.0.1 - Envoi <strong>des</strong> vertex un par un......................................................................................................................15<br />

2.0.2 - Envoi de tableau de vertices (Vertex Array)............................................................................................ 16<br />

2.0.3 - <strong>Utilisation</strong> <strong>des</strong> tableaux d'indices..............................................................................................................17<br />

2.0.4 - Stockage <strong>des</strong> vertices dans la mémoire du processeur graphique (Vertex Buffer Objects)..................... 18<br />

2.0.5 - Comparaison <strong>des</strong> performances.............................................................................................................. 20<br />

2.1 - <strong>Utilisation</strong> du pipeline programmable................................................................................................................22<br />

2.1.1 - La manipulation de shaders <strong>avec</strong> <strong>Qt</strong> : QGLShaderProgram et QGLShader............................................23<br />

2.1.2 - Le code source <strong>des</strong> shaders....................................................................................................................24<br />

2.1.3 - Manipulation <strong>des</strong> matrices à l'aide de <strong>Qt</strong>.................................................................................................26<br />

2.1.4 - Passage de paramètres aux shaders...................................................................................................... 27<br />

2.2 - Ajouter <strong>des</strong> lumières et <strong>des</strong> textures................................................................................................................30<br />

2.2.1 - Le modèle de Phong................................................................................................................................30<br />

2.2.2 - Chargement de la Normal Map................................................................................................................30<br />

2.2.3 - Afficher les lumières <strong>avec</strong> les shaders.....................................................................................................31<br />

2.2.4 - Appliquer une texture............................................................................................................................... 33<br />

2.2.5 - Calcul dans le Vertex Shader vs dans le Fragment Shader.................................................................... 35<br />

2.3 - Réaliser un rendu off-screen............................................................................................................................ 38<br />

2.3.1 - <strong>Utilisation</strong> de QGLPixelBuffer................................................................................................................... 39<br />

2.3.2 - <strong>Utilisation</strong> de QGLFrameBufferObject...................................................................................................... 41<br />

2.3.3 - Dessiner dans une texture dynamique <strong>avec</strong> QPainter.............................................................................43<br />

2.4 - Overpainting : <strong>des</strong>siner en 2D <strong>avec</strong> QPainter sur une scène 3D.....................................................................45<br />

2.5 - Gestion <strong>des</strong> extensions <strong>avec</strong> QGLContext::getProcAddress()......................................................................... 47<br />

3.0 - Le module <strong>Qt</strong>3D................................................................................................................................................48<br />

4.0 - Techniques géomtriques................................................................................................................................... 49<br />

4.1 - Lumières et ombres.......................................................................................................................................... 50<br />

4.2 - Rendu................................................................................................................................................................51<br />

4.3 - Images et post-effets........................................................................................................................................ 52<br />

4.4 - Physique............................................................................................................................................................53<br />

4.5 - Ray-tracing et Voxels........................................................................................................................................54<br />

5.0 - Introduction au GPU computing........................................................................................................................55<br />

5.0.1 - Le calcul parallèle.....................................................................................................................................55<br />

5.0.2 - Les API OpenCL...................................................................................................................................... 57<br />

5.0.3 - Installer OpenCL.......................................................................................................................................57<br />

5.0.4 - Installer <strong>Qt</strong>OpenCL................................................................................................................................... 58<br />

5.1 - Le platform layer API........................................................................................................................................59<br />

5.1.1 - Gérer les erreurs...................................................................................................................................... 59<br />

5.1.2 - La plateforme............................................................................................................................................60<br />

5.1.3 - Le device.................................................................................................................................................. 61<br />

5.1.4 - Le contexte............................................................................................................................................... 62<br />

5.1-E - Le programme..........................................................................................................................................62<br />

5.1.6 - Le Command queue.................................................................................................................................63<br />

- 2 -<br />

http://gbelz.developpez.com/remi-achard/gpu-avance-<strong>avec</strong>-qt/modified/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!