Pregunta

En mi motor tengo necesidad de ser capaz de detectar DXT1 texturas que han texels con 0 alfa (por ejemplo,un recorte de un marco de la ventana).Esto es fácil de texturas me comprimir a mí mismo, pero no estoy seguro acerca de las texturas que ya están comprimidos.

¿Hay una manera fácil de decir de la cabecera si un DDS imagen contiene alfa?

¿Fue útil?

Solución

Que yo sepa, no hay manera de determinar a partir de la cabecera.Hay un DDPF_ALPHAPIXELS bandera, pero no creo que se establecerá en función de lo que en los datos de píxeles.Sería necesario analizar la DXT1 bloques, y buscar los colores que han de alfa 0 en ellos (haciendo para asegurarse de que el color se utiliza realmente en el bloque, también, supongo).

Otros consejos

Estoy de acuerdo con el aceptado respuesta.Tu trabajo puede ser hecho un poco más fácil mediante el uso de la "aplastar" la biblioteca para descomprimir los bloques para usted.

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

DDS es una muy mala contenedor para DXT (o BTC) de datos.El encabezado no le ayudará.Llanura original DXT1 no tiene ningún alfa.Creo d3d hoy en día lo hace realmente decodificar DXT1 con alfa, aunque.Cada DXT1 bloque se parece a esto:color1(16 bits) color2(16 bits), índices(de 32 bits).Si los 16 bits color1 valor es menor que color2 (sólo un uint16 comparación, nada de lujo!) el bloque no tiene alfa.De lo contrario, se hace.Así que para contestar la pregunta:Omitir el encabezado, leer 16 bits, leer 16 bits de b, si a>b no es alfa.de lo contrario, vaya 32 bits y repita hasta que el ef.Otros DXT formatos como DXT5 siempre han alfa.Es muy raro que la gente confía en la DXT1 alfa truco, porque algunos hw (intel..) no lo soporta de forma fiable.

No, el DDS encabezado sólo utiliza alfa banderas para comprimir imágenes.Yo tenía una necesidad similar a la de averiguar si un DXT1 imagen fue el uso de 1-bit alfa y después de una larga búsqueda encontré esta referencia aquí: https://msdn.microsoft.com/en-us/library/windows/desktop/bb147243(v=vs 85).aspx

Básicamente, si color_0 <= color_1 entonces hay una posibilidad que tiene la textura de 1 Bit alfa.Para verificar esto, usted necesita para comprobar los próximos 32-bits 2 bits pares si son 11.A continuación, repita este procedimiento con cada bloque si no se encuentra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top