Un peu de 3d avec xaml et blender

Soyez le premier à donner votre avis sur cette source.

Vue 16 221 fois - Téléchargée 919 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Teladryl
Messages postés
3
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
16 février 2009

cs_zainal
Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
16 février 2009

Merci pour cette source. Je suis en plein apprentissage de XAML et WPF et je voulais voir un programme de ce genre.

"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.
cs_yoannd
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
4
Non, le problème vient de la fonction qui exporte en raw dans Blender... et encore, cet outil est fait pour exporter des faces triangulaires et/ou carrées parce que OpenGL les comprend... ils se sont pas trop occupés de savoir si Directx pouvait avaler des carrés ou pas, ce que je comprend.
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).
Teladryl
Messages postés
3
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
16 février 2009

Ton problème viens de la conception de ton modèle 3D alors. Pour une optimisation maximal, moins tu as de Quad mieux c'est.
cs_yoannd
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
4
"Alors Blender utilise OpenGL. Si tu compare Blender à DirectX alors tu compare une voiture avec un piston..."
--> 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.
Afficher les 8 commentaires

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.