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
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.
las pinto 1 por 1 o lo hago a base de multitexturas? y otra cosa, como es el tema del environment mapping?
me intriga lo del environment mapping, que es y como lo hago? tiene que ver algo con los reflejos no?
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.