IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriels Direct3D 10 : DXUT

logo msdn


précédentsommairesuivant

II-9. Tutoriel 9 : Meshes avec DXUT

tuto0

II-9-a. Résumé

Ce tutoriel présente l'utilisation de maillages pour importer du source art. Il illustre les maillages en utilisant DXUT. Toutefois, on peut aussi utiliser les maillages sans DXUT.

Dans le tutoriel, vous remplacez un cube au centre de la fenêtre par un modèle importé d'un fichier. Le modèle contient déjà une texture avec des coordonnées.

II-9-b. Source

 
Sélectionnez
(SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial09

II-9-c. Maillage

Enumérer chaque vertex dans le code source est une méthode fastidieuse et brutale pour définir le source art. Au lieu de cela, il existe des méthodes pour importer des modèles déjà constitués dans votre application.

Un maillage est une collection de données de vertex prédéfinies qui incluent souvent des informations supplémentaires comme des vecteurs normaux, des couleurs, des matières et des coordonnées de texture. Aussi longtemps que l'on connaît le format du fichier de maillage, on peut l'importer et le rendre.

Les maillages servent à maintenir le source art séparément du code d'application, afin qu'il puisse être réutilisé. Par conséquent, les maillages sont conservés dans des fichiers séparés. Ils sont rarement générés dans une application proprement dite. Au lieu de cela, ils sont créés dans des logiciels de création 3D. Le cube qui a été généré dans les tutoriels précédents peut être sauvegardé dans un fichier séparé puis rechargé. Toutefois, importer peut être beaucoup plus efficace, en particulier si le maillage augmente en complexité. Un des plus grands avantages est la capacité d'importer les coordonnées de texture, afin qu'elles correspondent parfaitement. Elles peuvent être facilement spécifiées dans les applications de création.

DXUT traite les maillages en utilisant la classe CDXUTMesh10 qui est une classe enveloppante pour la classe D3DX Mesh. Cette classe inclut des fonctions pour importer, rendre et détruire un maillage. Le format de fichier que l'on utilise pour importer est le fichier .X. Il existe de nombreux convertisseurs disponibles gratuitement qui convertissent d'autres formats de modèles en format .X.

II-9-c-1. Création du maillage

Pour importer le modèle, on commence par créer un objet CDXUTMesh10. Dans le cas présent, on l'appelle g_Mesh, mais en général, il vaut mieux que le nom de l'objet et le nom du source art correspondent pour s'associer plus facilement.

 
Sélectionnez
    CDXUTMesh10 g_Mesh;

Ensuite, on appelle la fonction Create pour lire le fichier X et le stocker dans l'objet. La fonction Create nécessite que l'on passe dans le D3D10Device, le nom du fichier X qui contient le maillage, la mise en page et le nombre d'éléments dans la mise en page. Il existe aussi un paramètre facultatif appelé optimize qui appelle des fonctions D3DX pour ordonner les faces et vertex d'un maillage donné. Cela peut améliorer les performances de rendu.

Dans ce cas, on importe un fichier appelé "tiny.x". Le format des vertex qui définissent ce maillage contient des coordonnées des vertex, des normes et des coordonnées de texture. On doit spécifier la mise en page d'entrée comme indiqué dans l'exemple suivant :

 
Sélectionnez
    // Définir la mise en page d'entrée
    const D3D10_INPUT_ELEMENT_DESC layout[] =
    {
        { L"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
        { L"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 },
        { L"TEXCOORD0", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D10_INPUT_PER_VERTEX_DATA, 0 },
    };

Après définition de la mise en page, on appelle la fonction Create pour importer le modèle. Le dernier paramètre est le nombre d'éléments dans le format de vertex. Parce qu'on a des coordonnées, des normes et des coordonnées de texture, on spécifie 3.

 
Sélectionnez
    // Charger le maillage
    V_RETURN( g_Mesh.Create( pd3dDevice, L"tiny.x", (D3D10_INPUT_ELEMENT_DESC*)layout, 3 ) );

S'il n'y a pas d'erreur, g_Mesh contient désormais le tampon vertex et index pour notre maillage nouvellement importé, ainsi que les textures et matériaux. Ensuite, on commence le rendu.

II-9-c-2. Rendu du maillage

Dans les précédents tutoriels, parce qu'on avait un contrôle explicite du tampon vertex et des tampons index, on devait les régler convenablement avant chaque trame. Toutefois, avec un maillage, ces éléments sont soustraits. Par conséquent, on n'a à fournir que la technique d'effets qu'il faut utiliser pour rendre le maillage, et ça fait tout le travail.

La différence par rapport au tutoriel précédent est qu'on a éliminé la portion de OnD3DFrameRender où la fonction commençait à rendre le cube. Elle est remplacée par l'appel de rendu du maillage. Il est toujours une bonne pratique de régler la bonne mise en page en entrée avant que tout rendu de maillage. Cela garantit que la mise en page du maillage correspondra à l'input assembler.

 
Sélectionnez
    //
    // Configure la mise en page de vertex
    //
    pd3dDevice->IASetInputLayout( g_pVertexLayout );

Le rendu effectif se fait en appelant la fonction Render dans la classe CDXUTMesh10. Après que les tampons de la technique aient été correctement associés, on peut en faire le rendu. Pour assurer le rendu, on transfert le D3D10Device, l'Effet et la Technique contenue dans cet effet.

 
Sélectionnez
    //
    // Rendu du maillage
    //
    g_Mesh.Render( pd3dDevice, g_pEffect, g_pTechnique );

Si la matrice du monde est convenablement réglée pour le modèle, on peut voir à présent que le cube dans l'exemple précédent est remplacé par ce maillage plus compliqué. Notez que le maillage est beaucoup plus gros que le cube. Essayez d'appliquer une échelle à la matrice du monde pour que le maillage convienne au mieux à l'écran.

II-9-c-3. Destruction du maillage

Comme tous les objets, l'objet CDXUTMesh10 dit être détruit après utilisation. On le fait en appelant la fonction Destroy.

 
Sélectionnez
    g_Mesh.Destroy();

précédentsommairesuivant

Cet article est une traduction d'un article original de Microsoft en anglais. Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Microsoft. Lire l'article original Ici.