libimage / les df3 de povray

dernière mise à jour: 10 novembre 2013
# et #

The density_file pattern is a 3-D bitmap pattern that occupies a unit cube from location <0,0,0> to <1,1,1> The data file is a raw binary file format created for POV-Ray called df3 format. The syntax provides for the possibility of implementing other formats in the future. This pattern was originally created for use with halo or media but it may be used anywhere any pattern may be used.

Bon, il faut avouer que le code actuel est totalement buggué, que son API est pitoyable, et que je n'y consacre pas autant d'énergie qu'il le faudrait. Vous pouvez quand même aller voir l'avancement des essais.

Primitives

C'est toujours en cours de mise au point. Les API ne sont pas encore figées.

DensityF3Head * Image_df3_alloc(char *nom, int x, int y, int z, int b);
Création d'un objet de type DF3. Les trois paramètres x, y & z sont les dimensions, b est le nombre prévu de bytes par cellule à l'enregistrement dans un fichier. Les divers autres attributs sont initialisés à une valeur raisonnable. Chaque cellule est stockée dans un double, avec 1.0 représentant la valeur maximum.
int Image_df3_free(DensityF3Head *ptr);
Destruction féroce d'un objet de type DF3. Si la valeur de retour n'est pas nulle, c'est catastrophe.
int Image_df3_put(DensityF3Head *ptr, int x, int y, int z, double dv);
Dépose une valeur dans le machin. Retourne INVALID_PARAM si les coordonnées xyz sont en dehors du cube. Devrait aussi retourner un errcode si la valeur est en dehors des valeurs légales.
int Image_df3_get(DensityF3Head *ptr, int x, int y, int z, double *pdv);
Lecture d'une valeur dans le machin. Si en dehors du cube, renvoie INVALID_PARAM.
int Image_print_DF3head(DensityF3Head *h, char *txt, int flag);
Affichage (plus ou moins) en clair d'un descripteur de DF3. Si la valeur de retour n'est pas nulle, c'est qu'un problême a peut-être été détecté.
int Image_df3f_get_dims(char *fname, int dims[], int display);
Lecture des dimensions d'un fichier df3. L'argument dims doit être un int dims[3]. Si display est différent de zéro, des trucs seront affichés.
int Image_df3_export(DensityF3Head *ptr, char *fname, int nbbytes);
Enregistrement des données dans un fichier. Si nbbytes est à zéro, c'est la valeur donnée à la création de la structure qui sera utilisée. Sinon, on donne 1, 2 ou 4.

Essais divers

Attention, à ce jour (2 mars 2008), ces fonctions ne travaillent que sur des fichiers à un octet [0..255] par cellule. On peut en fait les classer dans la catégorie bricolages divers pour se rassurer si elles ne fonctionnnent pas.

int Image_df3_xper_0(Image_Desc *src, char * fname_df3, int k);
Tentative de fabrication d'un fichier DF3 à partir d'une image en RGB. Le résultat n'est pas concluant, mais l'idée mérite d'être approfondie.
int Image_df3_plot_histo(char *fname_df3, char *nomtga, int flag);
Histogramme linéaire du contenu d'un fichier DF3. Utilité plus que douteuse. Nous allons essayer da faire mieux.
int Image_df3f_2_txt(char *nomdf3, char *nomtxt);
Dump d'un fichier df3 dans un fichier texte, à priori parsable par les outils Unix classiques.
int Image_df3f_2_povinc(char *nomdf3, char *nominc, char *nomobj, int k, double dv);
C'est cette fonction qui est actuellement en cours de test dans cette page, et les résultats semblent prometteurs. Le paramètre k contrôle le type du machin qui va servir à matérialiser le contenu de la cellule. Pour le moment, il n'y a que la bouboule.

Il existe d'autres fonctions pour traiter les types de données qu'utilise POVray : les champs d'altitude pour le moment.


[ tTh cherche ]