Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cubemaps En Hlsl

Iniciado por vincent, 01 de Marzo de 2005, 11:19:41 AM

« anterior - próximo »

vincent

 Muy buenas,

sigo yo investigando el tema de los shaders con hlsl. Estoy siguiendo un maravilloso tutorial publicado en gamasutra ("Implementing lighting models with HLSL", del amigo Wolfgang Engel.

Resulta que en el código de la iluminación especular, utiliza la función normalize en el pixel shader. Dada la versión de pixel shader que ejecuta mi máquina (una geforce 4 Ti) no puedo utilizar dicha función, pues la versión és inferior a la 2.0.

He leido por allí que para solventar esto hay que utilizar cubemaps (de echo, comentan que es más rápido aunque da algunos fallos). El problema es que no sé como utilizar los cubemaps en la aplicación (el código del shader si). Que textura es exactamente un cubemap? Como le indico a DirectX que quiero utilizar ese cubemap? Como otra textura normal y corriente? O es un set de funciones diferente?

Gracias!

VinCenT
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

HgH

 
QUOTE (vincent)

He leido por allí que para solventar esto hay que utilizar cubemaps (de echo, comentan que es más rápido aunque da algunos fallos).
[/quote]
Sip.. normalization cubemaps. Se usan en ps anteriores a 2.0, si no recuerdo mal.

Citar
El problema es que no sé como utilizar los cubemaps en la aplicación (el código del shader si).
Hay una función del device (CreateCubeTexture)  y varias de d3dx (D3DXCreateCubeTexture, D3DXCreateCubeTextureFromFile,etc,etc) para la creación de cubemaps.

Citar
Que textura es exactamente un cubemap?
Es una textura en tres dimensiones, es decir, tendrás que usar tres coordenadas de textura (u,v,w). Imagínate un cubo puesto en el (0,0,0) por dentro. Las tres coordenadas indican el vector de dirección de donde se va a hacer el lookup el textel en cuestión.

Citar
Como le indico a DirectX que quiero utilizar ese cubemap?
VinCenT
Creo que es con la típica función SetTexture. La interfaz IDirect3DCubeTexture9, hereda de  IDirect3DBaseTexture9, y se puede usar con este método del objeto device.

Si no recuerdo mal, al hacer un lookup de un cubemap de normalización, se obtiene el vector normalizado que se ha usado como coordenadas de textura.

gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

vincent

 Gracias!

Puede ser que sea algo así?

Citarstatic void WINAPI FillNormalizingCubeMap(D3DXVECTOR4* pOut, const D3DXVECTOR3* pTexCoord, const D3DXVECTOR3* pTexelSize, LPVOID pData)
{
   D3DXVECTOR3 texCoord = *pTexCoord;

   D3DXVec3Normalize(&texCoord, &texCoord); // Normalize the 3d texture coordinate
   texCoord /= 2;                                                    // map the vector to 0 to 1 range
   texCoord += D3DXVECTOR3(.5, .5, .5);


   *pOut = D3DXVECTOR4(texCoord.x, texCoord.y, texCoord.z, 1.f);
}

D3DXCreateCubeTexture(g_pd3dDevice,256,0,0, D3DFMT_A8R8G8B8,D3DPOOL_MANAGED, &pNormalizingCubeMap);
D3DXFillCubeTexture(pNormalizingCubeMap, FillNormalizingCubeMap, NULL);


Ahora mismo tengo otros problemas también, como que me dice que utilizo demasiadas instrucciones en el pixel shader...  (nooo)

Alguien tiene por ahi un pixel shader de iluminación especular que rule con ps_1_1?  :P

Merci!

VinCenT
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Haddd

 Tiene que haber en la web de nvidia y la de ATI seguro.

Seguro que estás entendiendo ahora pq nos decidimos por 2.0... Y espérate, que sólo has puesto specular, ya verás cuando utilices normal, parallax, environtment....

vincent

 joder que miedo...  :(

Yo ya me decidiria a gusto por la 2.0... lo que pasa és que com mi GeForce 4 Ti, no tengo más remedio que hacerlo con la 1.1.

Como  c... se lo haran los del HL2, Doom3, FarCry para que sus peazo juegos rulen en tarjetas menores?

VinCenT
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

HgH

 
Citar
Gracias!
De nada :)

Citar
Puede ser que sea algo así?
...

No creo que te valga la pena calcularlo cada vez. Si necesitas uno aquí tienes una textura cúbica para normalizar.
Este cubemap lo he sacado de la página de Wolfgang Engel, y hay ejemplos de iluminación por pixel con especular usando ps1.1, pero te advierto que no son hlsl sino que se usa ensamblador, pero vamos, no es dificil.

gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -






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.