Voila, j'avais envie de m'amuser un peu.
J'ai fait un petit mesh en 3D avec Blender. Rien de bien compliqué, pour ceux qui connaissent, j'ai ajouté le fameux mesh représentant la tête de singe à ma scène 3D.
J'ai ensuite exporté ma scène au format raw.
Le format raw permet d'exporter les faces de la scène 3D, séparées par des \n.
Chaque face est composée de points, qui sont des triplets de valeurs décimales. Un triplet représentant bien sûr des coordonnées en X, Y, et Z.
La fenêtre XAML est composée d'un viewport 3D, dans lequel on met un mesh. Vous noterez au passage une petite animation sur la rotation du mesh (dans le code XAML).
Le programme lit donc le fichier raw de la scène, en récupère les faces, puis les points de chaque faces, pour les mettre dans notre mesh.
Blender permet de faire des polygones avec plus de 3 côtés, ce que ne permet pas DirectX. J'ai donc un petit algo qui tranforme un polygone à 4 côtés (type caré, rectangle, parrallèlogramme, ...) en deux triangles. Par contre, les polygones avec plus de 4 côtés ne sont pas gérés.
De plus, seule la géométrie de l'objet est gérée. Le matériau de celui-ci est mis en dur dans le XAML.
Conclusion :
Vous aurez besoin du framework .net 3 (donc Windows XP et supérieur) pour exécuter ce code.
Développé avec Visual C# Express.
A vous de voir :)
"Ton problème viens de la conception de ton modèle 3D alors. Pour une optimisation maximale, moins tu as de Quad mieux c'est."
Sauf que du point de vue du designer 3D les quads c'est le pied parce que ça te permet d'avoir un lissage impeccable (contrairement aux triangles). Donc voila pourquoi la tête de singe est en quads.
De plus, le modèle 3D, ce n'est pas moi qui l'ai fait, c'est celui qui est fourni en exemple dans Blender (l'équivalent de la teapot dans OpenGL).
--> Ma phrase n'était pas tout à fait exacte, je suis d'accord, mais je pense qu'elle était assez claire : avec Blender, on peut faire des carrés (peu importe qu'ils soient découpés en triangles ou non lors de l'affichage) et on ne peut pas injecter directement ces carrés dans une appli utilisant DirectX. C'est pour justifier le fait qu'on ait un algorithme de découpage des carrés. Mais je pense que tout le monde avait compris ça...
Pour ceux que ça interesse, les instructions OpenGL pour dessiner des carrés : http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=05
... Ce genre d'instruction n'existe pas en DirectX.
"Un quad (polygone a 4 coté) est toujours 'séparer' en 2 triangles, pour la simple et bonne raison => le prossesseur graphique actuelle est incapable de faire des calculs sur autre chose que des Triangles. Donc DirectX ou OpenGL, les deux fonctionne pareil au final, sauf que OpenGL transforme sans que tu le sache le quad en 2 triangle."
--> Heuuu... ouais... big news... Je vois pas pourquoi tu apportes cette précision qui est déjà présente dans l'article. Encore une fois, je justifie mon algorithme de découpage des carrés par le fait que celui-ci n'est pas déjà implémenté dans DirectX (alors qu'il l'est dans OpenGL). On ne parle pas ici du rendu effectué par la carte graphique, mais bien de ce que prend en entrée la librairie graphique (carrés ou pas carrés). Et pour la phrase que tu cite, elle était là pour signaler qu'un carré à découper en triangles, c'est facile, mais dès que tu touches à un peu plus de faces, c'est déjà bien plus délicat.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.