$rubrique = 38; $meta_description = "Tutoriel C# DirectX9"; $meta_keywords = "Tutoriel, Tutoriaux, Article, Articles, C#, CSharp, DirectX, Vertex, Vertices, 3D, Programmation"; $titre_page = "Tutoriaux Managed DirectX sous C#"; $urlCss = "./article.css"; $xhtml=true; $dateBrute['date'] = '07/08/2006'; $dateBrute['miseajour'] = '07/08/2006'; $topicType = 'Whitepaper'; include("$DOCUMENT_ROOT/template/entete.php");?>
Le dessin de primitives avec Managed DirectX en C#Date de publication : 07/08/2006 , Date de mise à jour : 07/08/2006
Par
funky.data (Tutoriaux C# - DirectX9) (NXEngine - Mon moteur 3D)
Ce tutoriel vous apprendra à afficher des primitives avec Managed Direct X en C#.
I. Introduction II. Les Triangles II-1. Les Vertices II-2. Initialisation des Vertices III. Les Vertex Buffers III-1. Initialisation III-2. Remplir le VertexBuffer avec des Vertices III-3. Le Rendu IV. Récapitulatif I. Introduction
Un objet affiché par DirectX aussi complexe soit-il est toujours composé de triangles. Le triangle sera donc la forme géométrique à la base de tout rendu de scène 3D. Nous allons voir dans ce tutoriel comment générer un triangle puis comment l'afficher.
II. Les Triangles
Comme nous venons de l'apprendre le triangle est la forme géométrique de base utilisée par DirectX et les cartes graphiques 3D. Chaque sommet d'un triangle est appelé "Vertex" (Vertices au pluriel) dans le jargon de la programmation 3D, et donc "Sommet" pour sa version française. J'utiliserais les terme Anglais dans ce tutoriel dans la mesure ou c'est la dénomination utilisée par DirectX. Nous allons donc commencer par nous penchez sur l'initialisation de ces vertices.
II-1. Les Vertices
Il existe beaucoup de type de vertices mais je vais essayer d'être le plus concis possible pour vous les présenter. Tout d'abord vous avez 2 grands types :
Les vertices de type "Transformed" sont des vertices dont la position est définie par leur coordonnées à l'écran. Par exemple si nous déclarons un vertice "Transformed" à la position x:100 y:100 z:1 le vertice sera effectivement placer à cette position dans la fenêtre de rendu. Remarquez que la valeur attribuée à la composante z n'a que peut d'intérêt pour l'instant... Sachez quand même que lors de l'utilisation de ce type de vertice une valeur 0 correspond à un vertice sur le devant de la scène et une valeur de 1 à un vertice tout au fond de la scène. Quand nous initialiserons donc un vertice "Transformed" nous indiquerons par la même ses coordonnées à l'écran.
Les vertices de type "Position" sont des vertices dont la position est définie par leurs coordonnées dans la scène 3D. Si nous reprenons notre exemple de tout à l'heure, le vertice "Position" ne sera certainement pas placé aux coordonnées écran x:100 y:100 dans la mesure ou sa position variera avec le point de vue que nous aurons dans la scène. Pour faire simple si nous avions une caméra, le vertice "Position" bougerait à l'écran lors des mouvements de caméra au contraire du vertice "Transformed".
Nous utiliserons donc dans cette première partie du tutoriel des vertices "Transformed". Voyons maintenant les autres options offertes par les différents type de vertices. Pour les vertices, autant les "Transformed" que les "Position", il est possible d'appliquer un certains nombres de paramètres de rendu. Voyons ces possibilités :
Voilà pour cette brève présentation des vertices... passons maintenant à leur initialisation
II-2. Initialisation des Vertices
Comme dit précédemment, nous allons utiliser des vertices de type "Transformed" auquel nous voulons ajouter une information de couleur. Nous utiliserons donc des vertices de type "TransformedColored" pour créer les 3 points qui composeront notre triangle. Voyons tout d'abord la syntaxe du constructeur qui va nous intéresser :
Maintenant que nous avons vu le constructeur créons nos 3 vertices :
Nos vertices étant déclarés il ne nous reste plus qu'à les afficher... c'est ce que nous allons voir dans le chapitre suivant...
III. Les Vertex BuffersIII-1. Initialisation
Les Vertex Buffers (Tampon de sommets en français ;)) sont des objets qui vont nous permettre de lier les informations contenues dans nos vertices vers la fonction de rendu de primitive du device Direct3D. Commençons comme d'habitude par regarder le constructeur d'un vertex buffer.
Passons maintenant à la création de notre VertexBuffer
Voilà notre Vertex Buffer est maintenant prêt à accueillir des données de nos vertices (ou vertex).
III-2. Remplir le VertexBuffer avec des Vertices
Il nous reste maintenant à stocker les vertices de notre triangle dans le vertex buffer que nous venons de créer. La fonction "SetData" du vertex buffer permet de lui indiquer l'endroit où sont stockées les vertices. Voyons la syntaxe de cette fonction :
Et maintenant le code :
Nous avons donc terminer avec l'initialisation des composants dont nous avions besoin pour afficher notre triangle... passons maintenant au rendu de ce triangle.
III-3. Le Rendu
Le rendu va se décomposer en 3 étapes :
Les 3 étapes du rendu d'un Vertex Buffer
Pour indiquer le VertexBuffer à lire au device Direct3D, nous utiliserons la fonction "SetStreamSource" du device.
En maintenant le code :
Seconde étape indiquer au device Direct3D le type de Vertex que nous avons stocké dans le VertexBuffer. Pour cela rien de plus simple :
Dernière étape... le rendu. Comme je vous l'ai préciser au début du tutoriel, DirectX ne se base que sur des triangles pour effectuer le rendu d'une scène. Donc une scène est une multitude de triangles. Pour dessiner un triangle il faut donc définir de quelle façon nous allons lier les vertices les unes aux autres... ces liaisons composeront l'objet final. Il existe beaucoup de type de liaison possible avec Direct3D mais je ne vais que vous en présenter 3. Ce sont les trois que vous utiliserez dans 99% des cas : le "TriangleList", le "TriangleStrip" et le "TriangleFan". Comme un bon dessin vaut mieux qu'un beau discours je vous propose ces trois illustrations pour que vous compreniez la différence de logique de liaison entre ces types :
Vous remarquerez sans mal que le "TriangleList" est sans contexte celui qui sera le plus adapté à notre rendu de triangle.
Pour dessiner notre triangle nous ferons appel à la fonction "DrawPrimitives" du device Direct3D.
La seule précision que j'apporterais concerne le nombre de primitives. Dans notre exemple ce sera le nombre de vertices stockées dans notre VertexBuffer divisé par 3. Si nous avions stocké par exemple des lignes dans notre VertexBuffer nous diviserions le nombre de vertices par 2... Voyons maintenant le code :
IV. Récapitulatif
Nous avons donc appris jusqu'à présent à :
Voyons le récapitulatif du code source :
Et un petit screenshot de ce que vous devriez obtenir...
Screenshot de l'application réalisée à l'aide de ce tutoriel
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|