Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Que hace Direct3D con los formatos de textura?

Iniciado por ProD, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

ProD

                                Bueno alguien me puede decir con qué formato de textura trabaja Direct3D internamente? es que se presentan varios problemas con esto, uno por ejemplo es a la hora de crear una textura "a pelo". Ya que si por ejemplo se quiere crear una textura con formato A8R8G8B8 y estamos trabajando en un modo de video de 16 bits, Direct3D crea dicha textura sin problemas, pero ahora viene lo bueno, Direct3D creó la textura con dicho formato o creó una textura con un formato para 16bits?. Espero respuestas!!.

Un saludo.
                               
as ideas son capitales que sólo ganan intereses entre las manos del talento

Drácula

                                Puedes obligarle a tener el formato que tu desees. Por ejemplo, en Merlín, se intentan cargar en formato comprimido para que ocupen menos memoria. Usa las funciones D3DXLoadTextureFromImage y ponle lo que tu quieras.

Sin embargo, en muchas tarjets puedes forzar el formato de las texturas, así que supongo que no puedes asumir nunca que haya uno u otro formato.

Pero usando de nuevo las D3DX, puedes convertir una textura de cualquier formato a uno que tu necesites.

Así que al final...¡lo tienes!                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Loover

                                Yo tengo un problema parecido.
Umm, vamos a ver, cuando dices:
D3DXLoadTextureFromImage;
debes referirte a
D3DXCreateTextureFromFile;
porque la otra no existe, ¿No?

Pues bien los parametros de esta son (ejemplo):
D3DXCreateTextureFromFile (g_pDevice, "prueba.jpg", &g_pTexture);
y refiriendome a lo que has escrito:
"Usa las funciones D3DXLoadTextureFromImage y ponle lo que tu quieras"
...no veo donde meterle el formato de textura.

Mi problema es que quiero usar mipmapping pero al renderizar no se ve nada... y creo que es porque despues de esa linea coloco esta:
g_Window.g_pDevice->CreateTexture(256, 256, 5, 0, ???, D3DPOOL_MANAGED, &g_pTexture);
y no se qué poner en los interrogantes porque... ¿¿¿como sé que formato interno está usando Direct3D para la textura que he cargado???
                               
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

_Grey

                                Digo yo que Dracula se referira a :

D3DXCreateTextureFromFileEx()

Donde se puede especificar el formato de la textura...

y para saber el formato de una textura ya creada:

IDirect3DTexture8::GetLevelDesc(*,*)

El primer parametro se refiere al nivel de la textura,(por si usas mipmaping) y el segundo un puntero a una estructura D3DSURFACE_DESC donde entre otros datos... te pondra el formato en el campo D3DSURFACE_DESC.Format

Espero haber sido de ayuda, saludos                                

Loover

                                Si, gracias, me ha sido de ayuda... sinembargo algo sigue fallando. ¿No sabrás de algun tutorial donde expliquen bien el mipmapping?
Gracias.                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

BeRSeRKeR

                                Asegúrate de que especificas un filtrado para el mipmapping y para la minificación y magnificación de texturas. Por ejemplo

   m_pD3DDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
   m_pD3DDevice->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
   m_pD3DDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);

Con esto activas el filtro trilineal...mira a ver si es lo que te falta...

Un saludo
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Loover

                                Nada, que sigue sin funcionar. Necesito un tutorial.                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

BeRSeRKeR

                                A ver...después de la función D3DXCreateTextureFromFile no debes llamar a la función

g_Window.g_pDevice->CreateTexture(256, 256, 5, 0, ???, D3DPOOL_MANAGED, &g_pTexture);

ya que con el D3DXCreateTextureFromFile ya estás creando la textura.

Ahora bien si lo que quieres es especificar los niveles de mipmap etc, utiliza la función de la que hablaba _Grey, o sea, D3DXCreateTextureFromFileEx

Y como he dicho antes no se te olvide poner los texture stages adecuados...

Con eso deberia funcionar...

Saludos.

_________________
BeRSeRKeR
http://www.planetquake.com/digitalys">DiGiTALYS TEAM

[ Este Mensaje fue editado por: BeRSeRKeR el 2002-05-15 02:03 ]                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Loover

                                Hombre! Ahora sí, al pelo caramelo.
Estaba con la manía de poner esas dos líneas seguidas (confundí un concepto de la ayuda de la SDK). Ahora lo veo claro (que sencillo es).
Muchísimas gracias Berserker.                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

ProD

                                Respecto al formato de texturas ya se cuales son los que puede crear directx para un render target (Textura) y son el 565 el 888 y los equivalentes con alpha, así que tendreís que controlar que si os encontrais en un modo de video de 16bits crear una textura 565 y si es uno de 32bits una 888, ya que si estais en 16bits y creais una 888 DirectX la va a crear 888 como es lógico, pa eso se la pediste de 888 XD y vais a gastar más recursos que los necesarios, a no ser que efectivamente quereis una textura con un formato de 32 bits. Con esto me refiero a la creación de texturas a pelo, no desde un fichero gráfico, ahí directx creará la textura con el formato que esté especificado en el fichero.

Un saludo.
                               
as ideas son capitales que sólo ganan intereses entre las manos del talento

mac^threepixels

                                D3D, si usas las APIs CreateSurface del device, usara el formato que le digas, no trabaja internamente con ninguna.

Si creas las texturas en SYSMEM, podras crearlas del formato que desees, si las creas sin ese flag, estaras limitado a los formatos que soporte el DEVICE. Los formatos que soporta el device los puedes enumerar.



                               
----------------------------------
mac^threepixels
http://www.threepixels.org






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.