2009-10-14 7 views
2

Lorsque vous utilisez la fonction: D3DXSaveTextureToFile et que vous passez en D3DXIFF_BMP pour créer un bmp, j'ai remarqué que les valeurs semblent être estimées plutôt que données spécifiquement.Comment la bibliothèque d3dx enregistre-t-elle les textures dans les fichiers?

Corrigez-moi si je me trompe mais une texture à virgule flottante peut stocker n'importe quel flottant dans un texel donné qui le placerait en dehors de la plage d'un BMP qui est coincé entre rgb (255,255,255,255), donc il semble que la fonction est de simplement prendre la valeur la plus haute et la plus basse de la texture et la normaliser entre cette gamme. Donc, ma question est la suivante: est-il possible d'attraper les valeurs exactement comme elles sont en mémoire? y compris lorsque les couleurs sont en dehors du spectre de l'écran d'ordinateur?

Répondre

4

N'utilisez pas BMP. Utilisez un format qui prend en charge le type de données souhaité. Pour les textures DX, il semble que le format D3DXIFF_PFM soit ce dont vous avez besoin. Il est décrit comme suit:

Format de carte flottante portable. Un format d'image en virgule flottante , sans compression . L'en-tête de fichier spécifie la largeur de l'image, la hauteur, monochrome ou couleur et le mot machine . Les données de pixel sont stockées sous forme de valeurs à virgule flottante 32 bits, avec 3 valeurs par pixel pour la couleur et une valeur par pixel pour pour le mode monochrome.

Notez cependant que les images seront volumineuses. Une texture de 256x256 dans ce format devrait peser environ 768 KB.

Mises à jour: Vous devriez pouvoir utiliser la commande d'affichage Image Magick pour afficher les images dans ce format. En outre, HDRView prend en charge le format PFM. Un troisième choix pourrait être fv.

Questions connexes