Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Multitextura Con Vertex Array

Iniciado por Degiik, 17 de Junio de 2004, 01:09:07 PM

« anterior - próximo »

Degiik

 Hola,

Tengo algunas cosillas hechas con arrays de vértices, y ahora me gustaría implementarle multitextura, lo que no entiendo es como se hacer para pasarle las coordenadas de ambas texturas. A ver si alguien me puede ayudar.

Gracias ;-)
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Schaffer

 Creo que podrias googlear un poco antes de preguntar ese tipo de cosas pero ahi va.

Supondre que sabes como usar una unica textura asi que con esto deberia bastarte.


glClientActiveTextureARB(GL_TEXTURE0_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, array_de_coordenadas_de_textura0);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, array_de_coordenadas_de_textura1);


Degiik

egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Degiik

 Aun arriesgandome a que la la respuesta vaya acompañada de un "busca en el google" ...  :lol:

Si las coordenadas de texturas son las mismas para ambas texturas GL_TEXTURE0_ARB , GL_TEXTURE1_ARB es posible ahorrarme enviar las de uno  ?  Pq supongo que aunque en glTexCoordPointer(2, GL_FLOAT, 0, array_de_coordenadas_de_textura1); utilice el mismo puntero para el array de coordenadas enviara dos veces la información.


thanks.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Schaffer

 Primero tienes que tener claro que OpenGL es una maquina de estados y que hay dos tipos de estados, clientes y normales, para activar cada unidad de textura se pueden hacer dos llamadas glActiveTextureARB(GL_TEXTURE_i) y glClientActiveTextureARB(GL_TEXTURE_i) que activan la unidad de textura i para el estado global y para el lado cliente. Activar esa unidad de textura implica que TODAS las llamadas que afecten a una textura modifican SOLO esa unidad de textura (a excepcion de glTexCoord que siempre modifica la unidad 0).

Por ejemplo si quieres hacer atenuación por pixel con una textura 2D y otra 1D harias esto para activarlas:

glActiveTextureARB(GL_TEXTURE_0);
glEnable(GL_TEXTURE_2D);
//Todos los glTexGen, glTexEnv que pongas aqui afectaran la unidad 0
glActiveTextureARB(GL_TEXTURE_1);
glEnable(GL_TEXTURE_1D);
//Todos los glTexGen, glTexEnv que pongas aqui afectaran la unidad 1


Ya que los vertex arrays se ha implementado como un estado del cliente, para modificar algun array asociado de esa unidad tienes que activarla con el glClientActiveTextureARB.

Asi que si quieres especificar las coordenadas de textura de una unidad con glMultiTexCoordARB y la otra con un vertex array harias esto:

glClientActiveTextureARB(GL_TEXTURE0_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glTexCoordPointer(2, GL_FLOAT, 0, array_textura_1);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);


¿Y esto que quiere decir? Nada  :P , porque estoy pensando que igual esto podria funcionar para tu caso:

glTexCoordPointer(2, GL_FLOAT, 0, array_textura);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);


Si te funciona hazmelo saber.

Ale

Busca en el google  :D  






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.