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 ]