
Certaines fonctions de déformations n'existant pas dans Blender (où ne pouvant pas rendre un effet acceptable visuellement) il sera probablement nécessaire de modifier "manuellement" le maillage, ou de préférence automatiquement, avec quelque chose de plus précisément paramétrable: du C et de l'OpenGL (ceux qui ont essayé de faire du Coons ou du Bézier "un peu sophistiqué" en Python dans Blender comprendront pourquoi).
Pour cela, il faut pouvoir échanger les données depuis et vers Blender.
Le menu "export" en choisissant le format ".off" donne un fichier dont la structure est simple:
OFF
x y z triplets de réels, pour chaque points donc NP lignes
N a b c d... N= nombre de points de la facette, a b c ou a b c d leur numéros NF fois
La numérotation commence à zéro (comme en C).
Il y a donc NP+NF+2 lignes à lire (ou à écrire quand on veut envoyer du ".off" vers Blender)
C'est simple, c'est court (pour du "mode texte"), ça se "débogue" facilement.
La bonne chose est que Blender lit aussi ce format ("import") et crée un maillage avec. Comme Blender fabrique les normales, notre programme n'aurait pas à s'en préoccuper, toutefois si on veut pouvoir représenter le travail à l'écran (pour choisir des paramètres, des points, etc) il nous faudra les normales pour afficher le volume en ombré.
Deux modes suffiront au début: le non lissé (montre mieux les limites des facettes donc les points) et le lissé. Dans le premier cas, on peut se contenter de calculer les normales "au fil de l'eau", deux prv pour une fa7, dont on fait la moyenne (soit en croix, soit deux triangle autour d'une des diagonales) renormée.
Pour l'affichage lissé, il faut une seule normale par point donc prévoir autant d'espace de stockage (enfin, on peut en principe stocker les normales avec une résolution moindre, du genre 3x8 bits, puisque c'est juste pour dessiner, mais ça fait des calculs en plus, en échange de diviser par 4 l'espace nécessaire).
Principe: on met les normales à zéro pour chaque point, puis chaque facette ajoute le prv de l'angle correspondant aux prv totalisés pour ce coin. Ensuite on norme le résultat. Il y a d'autres choix possibles pour définir la normale d'un point commun à +ieurs facettes, mais celle-ci est simple et donne un résultat qui ressemble bien à celui de Blender donc pour un visualiseur elle convient bien.

Aucun commentaire:
Enregistrer un commentaire