Question

Dans mon moteur, j'ai besoin de pouvoir détecter les textures DXT1 qui ont des texels avec 0 alpha (par ex.une découpe pour un cadre de fenêtre).C'est facile pour les textures que je compresse moi-même, mais je ne suis pas sûr des textures déjà compressées.

Existe-t-il un moyen simple de savoir à partir de l'en-tête si une image DDS contient de l'alpha ?

Était-ce utile?

La solution

Pour autant que je sache, il n'y a aucun moyen de le savoir à partir de l'en-tête.Il existe un indicateur DDPF_ALPHAPIXELS, mais je ne pense pas qu'il sera défini en fonction du contenu des données de pixels.Vous devrez analyser les blocs DXT1 et rechercher les couleurs qui contiennent 0 alpha (en veillant à vérifier que la couleur est également réellement utilisée dans le bloc, je suppose).

Autres conseils

Je suis d'accord avec la réponse acceptée.Votre travail peut être un peu plus facile en utilisant la bibliothèque "squish" pour décompresser les blocs pour vous.

http://www.sjbrown.co.uk/?code=squish

DDS est un très mauvais wrapper pour les données DXT (ou BTC).L'en-tête ne vous aidera pas.Le DXT1 d'origine simple n'avait aucun alpha.Je crois que d3d décode aujourd'hui DXT1 avec alpha.Chaque bloc DXT1 ressemble à ceci :couleur1(16 bits) couleur2(16 bits) indices(32 bits).Si la valeur color1 16 bits est inférieure à color2 (juste une comparaison uint16, rien d'extraordinaire !), le bloc n'a pas d'alpha.Sinon, c'est le cas.Alors pour répondre à ta question :Sautez l'en-tête, lisez 16 bits a, lisez 16 bits b, si a>b il y a alpha.sinon, sautez 32 bits et répétez jusqu'à eof.Les autres formats DXT comme DXT5 ont toujours de l'alpha.Il est très rare que les gens s'appuient sur l'astuce alpha DXT1 car certains matériels (Intel ..) ne la prennent pas en charge de manière fiable.

Non, l'en-tête DDS utilise uniquement des indicateurs alpha pour les images non compressées.J'avais le même besoin de savoir si une image DXT1 utilisait un alpha 1 bit et après une longue recherche, je suis tombé sur cette référence ici : https://msdn.microsoft.com/en-us/library/windows/desktop/bb147243(v=vs.85).aspx

Fondamentalement, si color_0 <= color_1 alors il y a une possibilité que la texture ait 1 bit alpha.Pour le vérifier davantage, vous devez vérifier les 32 bits suivants par paires de 2 bits s'ils sont 11.Continuez ensuite ceci pour chaque bloc s'il n'est pas trouvé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top