Clément Profit
Game Programming







 Projets (15 en tout)

Voici une partie des divers projets que j'ai menés dans le passé avec DirectX / C++11 :
...[quelques codes sources sont présentés]...

Une console Quake-like :

Quake-like console I

Quake-like console II

Caractéristiques :
  • possibilité de changer l'image d'arrière plan
  • implémentation facile des commandes
  • historique de commandes
  • commande d'aide
Codes sources :
CommandsManager.h : [afficher]

Commands.h : [afficher]

Console.h : [afficher]


CommandsDefinitions.cpp : [afficher]

CommandsManager.cpp : [afficher]

Console.cpp : [afficher]



Un cube tout simple :

Cube
Caractéristiques :
  • définition interne de ses vertices et indices
  • une texture est appliquée au cube
Codes sources :
Cube.h : [afficher]

Cube.cpp : [afficher]



Implémentation du moteur physique Newton :

Newton Physics Engine

Caractéristiques :
  • possibilité de lancer un cube à partir du devant de la caméra
  • petite carte au format BSP chargée
  • possibilité de se mouvoir avec la caméra au sein de la scène
  • fait avec Irrlicht 3D 1.7
Codes sources :
PhysicsEngine.h : [afficher]

PhysicsManager.cpp : [afficher]

Main.cpp : [afficher]



Utilisation du Shader Instancing :

Shader Instancing

Caractéristiques :
  • utilise DirectX 10.1
  • possibilité de voir la différence avec l'affichage classique
  • affichage de nombreux cubes qui tournent aléatoirement
  • + cubes colorés
Codes sources :
InstancedCubeSceneNode.h : [afficher]

InstancedSceneNodeManager.h : [afficher]

InstancedCubeSceneNode.cpp : [afficher]

InstancedSceneNodeManager.cpp : [afficher]


Shader eau de type I :


Eau de type I

Caractéristiques :
  • Utilise une render target projetée pour la réflexion
Codes sources :
Water.h : [afficher]

Water.cpp : [afficher]

Water.fx : [afficher]


Raak Scene Editor (non terminé) :

Raak Scene Editor 1

Raak Scene Editor 2

Raak Scene Editor 3

Caractéristiques :
  • possibilité d'importer des objets au format de fichier .mesh
  • écrit avec Qt et Ogre3D
  • possibilité de se mouvoir dans la scène de l'éditeur
  • possibilité de déplacer, pivoter, agrandir les objets placés
Codes sources :
ModulePreview.h : [afficher]

ModulesList.cpp : [afficher]


Ecrire du texte à l'écran :

Font Engine

Caractéristiques :
  • possibilité d'écrire directement du texte à l'écran à partir d'un shader approprié
  • utilisation du format de fichier police de caractères avec le programme AngelFont
  • utilisation des textures de polices de font en format de texture .png
  • n'utilise pas la librairie D3DX
Code source :
FontTextManager.h : [afficher]

FontTextManager.cpp : [afficher]

FontText.fx : [afficher]


Afficher le Z-Buffer :

Z-Buffer posteffect
Caractéristiques :
  • affiche le contenu du Z-Buffer sous forme de texture de post-process
Codes sources :
ZbufferRenderer.cpp : [afficher]

ZBufferPostProcess.fx : [afficher]



Labyrinthe 3D autogénéré :

Labyrinthe 3D

Labyrinthe 3D 2

Caractéristiques :
  • un labyrinthe 3D complet généré procéduralement avec un algorithme adapté trouvé sur Internet
Codes sources :


Arrow Quest Billboard :

Arrow Quest Billboard

Caractéristiques :
  • des billboards affichés à l'aide d'un Geometry Shader
  • des TextSceneNodes style MMORPG
  • les points d'interrogation font un mouvement périodique de bas vers le haut
  • les flèches tournent autour d'elles-mêmes
Codes sources :
ArrowBillboardSceneNode.h : [afficher]

BillboardTextSceneNode.h : [afficher]

QuestBillboardSceneNode.h : [afficher]


ArrowBillboardSceneNode.cpp : [afficher]

BillboardTextSceneNode.cpp : [afficher]

QuestBillboardSceneNode.cpp : [afficher]



Graphical User Interface :

GUI

Caractéristiques :
  • GUIWidget
  • GUIImage
  • GUIButton
  • GUIDialog
  • GUIDraggableWidget
  • GUILabel
  • GUIScrollBar
  • GUITextArea
Codes sources :
GUIButton.h : [afficher]

GUIWidget.h : [afficher]

GUIButton.cpp : [afficher]

GUIWidget.cpp : [afficher]



Multiples nuages en haut du ciel :

Nuages

Caractéristiques :
  • 3 couches de nuages appliqués avec une texture possédant un canal alpha
  • la structure des nuages est un dôme un peu aplati
Codes sources :
CloudsSceneNode.h : [afficher]

CloudsSceneNode.cpp : [afficher]



Sphere Mesh :

Sphere

Caractéristiques :
  • génération procédurale d'une sphère
Codes sources :
SphereMeshSceneNode.cpp : [afficher]


Ciel :

Ciel

Caractéristiques :
  • génération d'une skybox avec Cube Map
  • type de structure : dôme ou cube
Codes sources :
SkyBoxSceneNode.h : [afficher]

SkyBoxSceneNode.cpp : [afficher]



Effets post-traitements :

PostFX

Caractéristiques :
  • implémentation de plusieurs effets post-traitements
  • avec l'utilisation d'une FullScreen Texture Quad avec Rendertarget
  • effets : inversion des couleurs, noir et blanc, vignette, radial glow, etc...
Codes sources :
PostEffectManager.h : [afficher]

PostEffectManager.cpp : [afficher]

ShaderTechnique_PostEffect.cpp : [afficher]



Lumières multiples :

Lumières multiples

Caractéristiques :
  • implémentation de plusieurs lumières avec couleurs différentes
  • les lumières font et exercent un effet de révolution autour d'un centre
  • le modèle "Suzanne" reçoit un mélange de couleurs et de lumières différentes
Codes sources :
MultipleLights.cpp : [afficher]




 Savoir-faire (14 en tout)

Voici les divers savoir-faire que je maitrise avec DirectX / C++11 :

1 - Utilisation de TinyXML :
  • Importation des données d'un fichier XML
  • Exportation et création d'un fichier XML

2 - Matrice pour afficher un billboard :
  • Une matrice liée à la position de la caméra
  • On construit la matrice à partir de 3 vecteurs : Right, LookAt et Up

3 - Fonctions delegates en C++11 :
  • Utilisation de std::function et std::bind
  • Utilisation des fonctions anonymes
  • Utilisation du paramètre par défaut std::placeholders::_1

4 - Taux d'occupation du CPU :
  • Consommation total du CPU du système
  • Taux de consommation du CPU du processus d'une application

5 - Utilisation de la librairie Zlib :
  • Importation du fichier d'entête avec #include <zlib.h>
  • Compression et décompression d'un fichier quelconque à la volée

6 - Compétences en mathématiques :
  • Niveau première et terminale S acquis
  • Objets et opérations généralistes : matrices, vecteurs, transformations de repères, etc...
  • Opérations ensemblistes sur R, C et les autres ensembles
  • Relations d'équivalence, d'ordre...
  • Equations, fonctions exp et ln
  • Trigonométrie : cercle, sinus, cosinus...

7 - Maîtrise de DirectX :
  • Initialisation de DirectX 11 : SwapChain, Back Buffer, DepthStencilView, etc...
  • Une classe TextureScreenQuad compatible avec les RenderTarget
  • Changement de rendu fullscreen vers fenetré et vice-versa
  • Acquisition des informations de la carte graphique et des modes d'affichage associés
  • Gestion de la transparence avec ID3D11BlendState
  • Affichage de ligne en 3D colorisée

8 - Compréhension de DirectX :
  • Backface culling (ignorer le rendu des triangles qui ne sont pas visibles)
  • Matrices World, View, Projection pour transformer les primitives à l'écran
  • Vertex, Index buffers et Vertex Input Layout
  • D3D11_FILL_MODE : Wireframe et Solid

9 - Programmation Shader avec HLSL 5.0 :
  • Gestion du deboggage avec l'interface ID3DBlob
  • Compilation avec D3DX11CompileFromFile
  • Texturage, effets post-traitements, déplacement de primitives et ombrage
  • Etapes vertex, geometry et pixel shaders maîtrisées
  • Fonctions intrinsèques

10 - C++ :
  • Gestion des exceptions
  • Utilisation du logiciel de documentation Doxygen
  • Utilisation de la STL
  • Flags avec enum
  • Pointeurs intelligents
  • Connaissance des nouvelles possibilités C++11
  • Utilisation du préprocesseur : __FUNCTION__, __LINE__, etc ...
  • Design patterns : Singleton

11 - Gameplay et système :
  • Caméra classique FPS (First Person Shooter)
  • Calcul du FPS (Frame Per Second)
  • Icone du curseur de la souris personnalisée
  • Un Performance Timer pour synchroniser les évenements
  • Une caméra à la 3ème personne trigonométrique

12 - Affichage du texte :
  • Utilisation de AngelFont

13 - Entrées utilisateur :
  • Une classe InputManager générique
  • Utilisant WndProc
  • Utilisant DirectInput

14 - Graphisme :
  • Une Skybox et un Skydome pour afficher le ciel