Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Texturas De Mapas De Quake3 Y Sus Shaders

Iniciado por vicho, 01 de Febrero de 2004, 02:20:26 AM

« anterior - próximo »

vicho

 hola señores como les va, talves algunos me recuerden yo estoy haciendo un motor 3d usando mapas de Quake3, mmm bueno estoy haciendo lo que es la lectura de los shaders por ejemplo


textures/base_trim/pewter_shiney
{  

       {
               map textures/effects/tinfx.tga
               tcGen environment
               rgbGen identity
       }  
       {
map textures/base_trim/pewter_shiney.tga
               blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
 rgbGen identity
       }
       {
map $lightmap
               blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
rgbGen identity
       }
}


las texturas asociadas a este shader son:
-map textures/effects/tinfx.tga
-textures/base_trim/pewter_shiney.tga
-$lightmap

cada una tiene sus funciones de blending

el drama es el siguiente, se mesclan texturas que no tienen nada que ver, pienso que talvez sea por que no ahi funciones de blending en mi codigo, pero son texturas nada que ver, alguien me podria ayudar porfavor

BeRSeRKeR

 El tema es el siguiente.

Primera pasada de render:

Citar{
    map textures/effects/tinfx.tga
    tcGen environment
    rgbGen identity
}
Activas la textura "textures/effects/tinfx.tga", aplicas un environment mapping (faked) y el color del vértice es el blanco. Finalmente renderizas.

Segunda pasada de render:

Citar{
    map textures/base_trim/pewter_shiney.tga
    blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
    rgbGen identity
}
Activas la textura "textures/base_trim/pewter_shiney.tga
", el color del vértice es el blanco y activas el blending con la función (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). Finalmente renderizas.

Tercera pasada de render:

Citar{
    map $lightmap
    blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
    rgbGen identity
}
Activas como textura el lightmap en cuestión, el color del vértice es el blanco y activas el blending con la función (GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA). Finalmente renderizas.

Eso es lo que hace ese shader paso a paso.

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

vicho

 las pinto 1 por 1 o lo hago a base de multitexturas? y otra cosa, como es el tema del environment mapping?

vicho

 me intriga lo del environment mapping, que es y como lo hago? tiene que ver algo con los reflejos no?

BeRSeRKeR

 Nosotros en aquellos tiempos utilizamos la fixed pipeline. De forma que con esta línea:

SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR)

Direct3D genera las coordenadas de textura para el objeto en base a la dirección de la cámara (en realidad al vector "reflexión" de la dirección de la cámara con respecto a la normal del vértice en curso). OpenGL también tiene una característica similar pero no recuerdo cuáles son los parámetros a utilizar.

De todas formas, antes el environment mapping se realizaba de otra forma. No estoy muy seguro pero creo que era algo así:

vDir = vertex.vPos - camera.vPos
Normalize(vDir)

vertex.vTexCoord.u = vDir.x + vertex.vNormal.x
vertex.vTexCoord.v = vDir.y + vertex.vNormal.y


Como digo, no estoy seguro de que fuera exactamente así.

De todas formas, actualmente podrías utilizar un environment cube map para mejorar la calidad de la reflexión. Porque realmente, el método que utiliza quake3 es una simple textura, que nada tiene que ver con el entorno que rodea al objeto, con el fin de dar una apariencia cromada a la superficie. Esto lo puedes hacer o bien con la fixed pipeline o con un vertex & pixel shader.

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






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.