Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Bump Mapping

Iniciado por disruptorXL, 28 de Mayo de 2004, 12:02:21 PM

« anterior - próximo »

disruptorXL

 hola, me gustaria saber como puedo aplicar aparte del bump con el dot3 una textura para que se vea tb?

este es el codigo que hace el bump:

g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
   g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_DOTPRODUCT3 );
   g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR );

// Set the texture to be the normal map
   g_pDevice->SetTexture( 0, g_pNormalMapTexture );


el mapa de normales lo he generado con D3DXComputeNormalMap o algo asi... se que tengo que hacer algun texture stage en otro numero y algo mas pero no se... por cierto la otra textura la aplique antes sin hacer ningun texture stage.

otra cosa como puedo hacer para que el bump varie segun la posicion de la luz?

Muchas gracias de antemano.

Hasta otra.
   


BeRSeRKeR

 Sería algo así.

SetTextureStageState(0, D3DTSS_COLOROP,   D3DTOP_DOTPRODUCT3);
SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);      
SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR);

SetTextureStageState(1, D3DTSS_COLOROP,   D3DTOP_MODULATE);
SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);

Evidentemente, en el texture stage 1 deberás tener la textura base activada.

De todas formas te recomiendo que empieces a utilizar pixel shaders. Verás que las cosas se hacen más sencillas y más rápidas.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

disruptorXL

 no sale, ahora en vez del mapa de normales solo me sale la textura base :(
a ver si me puedes ayudar, por favor.

PD: como calculo las tangentes y las binormales?

BeRSeRKeR

 Pues yo lo he probado y funciona perfectamente. En todo caso, se me olvidó poner la línea

SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );

que le dice a Direct3D que utilice el set número 1 de coordenadas de textura. De todas formas eso es en el caso de que vayas a utilizar un sólo set de coordenadas de textura, tanto para el normal map como para el base map lo cual es lo normal.

En cualquier caso, si dices que puedes ver la textura base entonces no sería ese el problema.

Y para calcular el tangent-space, a ver si esta página te sirve.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

disruptorXL

 muchas gracias tio.

Una cosa, en direct3d no existe una funcion para calcular las tangentes? algo asi como D3DXComputeTangent, pero me pide parametros como las binormales que no se como calcularlas. Me podrias ayudar?

Gracias de antemano.

pd: se bueno conmigo que llevo mu poco tiempo con prog. grafica y direct3d, vale?

BeRSeRKeR

 Yo nunca he utilizado esa función pero en este artículo (Dot3 Bump Mapping) explica cómo utilizar esa función. Aunque ahí utiliza vertex shaders para transformar el vector de la luz a tangent-space y la fixed pipeline para hacer el DOT3 bumpmapping.

Al primer parámetro le tienes que pasar el D3DXMesh que contiene los datos del mesh, es decir, las coordenadas de vértices, las coordenadas de textura, la normal, la binormal, la tangente. Evidentemente la tangente y la binormal las puedes dejar en blanco ya que las vas a calcular con esta función.

Ahora imagina que tienes esta declaración de vértice:

FVF = (xyz, normal, tex1, tangent, binormal)

donde tex1, tangent y binormal son sets de coordenadas de textura.

Pues bien, en el segundo parámetro tienes que poner el índice que ocupa el set de coordenadas de textura que se utilizará para el normal map. En este caso es el 0 porque es el primer set de coordenadas de textura.

En el tercer parámetro tienes que poner el índice a la tangente. En el caso anterior sería 1.

El cuarto parámetro es el índice a la binormal y en este caso sería 2.

En el quinto parámetro pones TRUE o FALSE dependiendo si quieres que haya wrapping o no.

Finalmente, en el sexto parámetro pones NULL.

Y ya está, con eso, la función te rellenará automáticamente los campos tangent y binormal de tu D3DXMesh.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

disruptorXL







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.