Pages: 1
Bonjour,
je charge un modèle 3ds, dont les fichiers de textures sont constitués par des images PNG 16 bits (donc 65535 niveaux par canal).
La manipulation
me permet de récupérer le résultat du screenshot. Mais le fichier image.png est sur 8 bits (donc 255 niveaux par canal), ce qui me fait perdre énormément d'informations.
J'ai constaté qu'il y avait un type SColorf permettant de spécifier qu'une image est en flottant par canal. Cependant la fonction
beginScene(true, true, SColor(...));
ne permet pas de spécifier au driver de travailler en flottants, vu que le 3ème paramètre est un SColor.
D'où mes questions :
existe-il une façon de spécifier au driver vidéo de travailler avec de telles images 16 bits ?
Ou bien y-a-t-il moyen de spécifier lors du writeImageToFile, qu'on veut du 16 bits ?
Hors ligne
Device->getVideoDriver()->setTextureCreationFlag(ETCF_ALWAYS_16_BIT,true); je sais pas, peut-être...
Hors ligne
sa devrait le faire, sinon changer se que dit copland avans le screenshot et rétablir après si besoin est
peut-être mettre un nouveaux pointeur pour l'image en 16 bit
sinon teste avec image->copyToScaling((void*)image.....
tu peut utiliser l'operator *& pour faire une copie d'un pointeur
Dernière modification par Magun (12-06-2009 19:43:39)
Hors ligne
J'ai programmé les deux solutions proposées par Copland et par Magun mais elles ne fonctionnent pas. En effet, l'image que j'obtiens est une image couleur dont chaque canal Rouge, Vert, et Bleu est codé sur 255 niveaux de gris alors que je souhaite avoir 65535 niveaux de gris par canal
.
En fait le problème ne semble pas avoir de solution actuelle de par la définition même de la fonction de capture et du type IImage de Irrlicht. En effet, l'étude du fichier
COpenGLDriver.cpp
décrivant la fonction createScreenShot()
nous indique que les images sont toutes définies ou "castées" en u8 pour chaque canal du pixel. Or la définition de u8 se trouve irrTypes.h et correspond à
00015 #ifdef _MSC_VER 00016 typedef unsigned __int8 u8; 00017 #else 00018 typedef unsigned char u8; 00019 #endif
soit 1 octet, donc 255 valeurs possibles seulement ! :-(
Hors ligne
Pages: 1