Logo

¡Bienvenido a Stratos!

Acceder

Foros



Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Temas - Licantropo23

#1
Hola, tengo un problema con el uso de fragment shaders. Lo que pasa es que quiero realizar una serie de calculos, estos calculos son algo costosos en cuanto a tiempo. El problema que tengo, es que al hacer la pasada por el shader, no se llegan a realizar todos los calculos. Supongo que esto depende de la pontencia de la tarjeta grafica, pero tampoco lo se seguro. ¿Alguien sabe si existe un tiempo maximo que puede ser usado en el shader y una vez consumido este tiempo aborta la ejecucion? He hecho la siguiente prueba:


#version 110

void main(){
       float tiempo=0;
       while(tiempo<1000){
           tiempo=tiempo+1;
       }
 gl_FragData[0].x=tiempo;
}


Tras realizar esta prueba he visto que tan solo me realiza 232 pasadas.
Otra prueba que he hecho es poner un bucle infinito y tampoco se queda colgado, asi que supongo que existe un tiempo de procesado para cada fragmento y cuando se supera se abortan los calculos. No se si habra alguna forma de configurarlo para que esto no sea asi. Si alguien sabe algo del tema le estaria muy agradecido de que me lo dijese. Bueno, muchas gracias a todos. Buscare por internet a ver si encuentro algo y si lo encuentro, escribo aqui lo que haya encontrado. Ta luego.
#2
Hola, tengo un problema a la hora de usar los fragment shader. El problema es que tengo varias texturas de entrada, pero el shader confunde la lectura de las texturas. Tengo dos texturas y de una de ellas me lee bien, pero en la segunda me lee de la primera. Supongo que es un problema de los manejadores que uso para las texturas.

El codigo del shader es el siguiente:


#version 110

uniform samplerRect texposicion;
uniform samplerRect texvelocidad;
uniform float epsilon;

void main(){
 

 vec4 posicion1 = textureRect(texposicion,vec2(gl_TexCoord[0].s,0.5));
 vec4 velocidad1 = textureRect(texvelocidad,vec2(gl_TexCoord[0].s,0.5));
vec4  posicion2 = textureRect(texposicion,vec2(gl_TexCoord[0].t,0.5));
 vec4 velocidad2 = textureRect(texvelocidad,vec2(gl_TexCoord[0].t,0.5));
   vec4 colision;
  /*Calulos: uso las posiciones y velocidades y en colision guardo la normal de colision y el tiempo de colision
  .....
  */
  gl_FragData[0]=colision;
}



Como digo la textura de posicion me la lee bien, pero la de velocidad me la lee como si fuese la de posicion.

El codigo que tengo para prepar la llamada del shader es:


/*******************************
*Se preparan las texturas de entrada*
********************************/  

programa->use();

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texturaPosicion->getId());
GLuint manejador= programa->getUniformLocation("texposicion");
programa->sendUniform(manejador,0);


glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texturaVelocidad->getId());
manejador= programa->getUniformLocation("texvelocidad");
programa->sendUniform(manejador,1);

/*A continuacion se prepararian las texturas de salida
...
*/

//Generador del flujo, para usar shader
glBegin(GL_QUADS);
       glTexCoord2f(0,0); glVertex2f(0,0);
       glTexCoord2f(ancho,0); glVertex2f(ancho,0);
       glTexCoord2f(ancho,alto); glVertex2f(ancho,alto);
       glTexCoord2f(0,alto); glVertex2f(0,alto);

glEnd();

programa->disable();



El problema yo creo que esta en esta parte de aqui:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texturaPosicion->getId());
GLuint manejador= programa->getUniformLocation("texposicion");
programa->sendUniform(manejador,0);

Pero lo que no se es el que.

Muchas gracias. Hasta luego.
#3
General Programadores / Seguimiento de paredes
06 de Marzo de 2007, 08:19:05 PM
Hola, estoy programando un juego. Lo que os quiero preguntar es si sabeis como hacer para que un personaje (envuelto en un cilindro) al colisionar siga la direccion de la pared. Hay que tener en cuenta que puede colisionar con varias paredes a la vez y que las paredes pueden tener cualquier rotacion. El juego es en 3D, la deteccion de la colision con las paredes ya la tengo hecha. A la hora de calcular la direccion que debe seguir se puede simplificar a 2D, mirando desde arriba. Os pongo una imagen de ejemplo:



d es la direccion que lleva el personaje y d' la direccion que en realidad seguirá.

Llevo pensándolo unos cuantos días pero no se me ocurre como hacerlo, muchas gracias por todo. Hasta luego.
#4
Programación gráfica / Acceso a datos contenidos en textura
31 de Diciembre de 2006, 05:35:30 PM
Hola, mi pregunta es la siguiente:
despues de tener creada una textura y cargada la informacion en ella, ¿hay alguna forma de acceder desde el programa principal a la informacion contenida en la textura?
Lo que quiero hacer es guardar en una textura informacion (por ejemplo posicion, velocidad, etc, de un objeto). Modificar la informacion dentro de un shader. Y por último acceder desde el programa principal a la informacion que ha sido modificada en el shader.
Se hacer mas o menos todo, menos la ultima parte de acceso.
Gracias a todos y feliz año nuevo. :)
#5
Hola a todos! Quiero hacer algunas cosas con shaders, en Opengl SL. Mi tarjeta grafica es un poco malilla asi que tendre que comprarme una nueva. Si me podeis recomendar alguna que no sea muy cara y que este bien.
Tambien queria preguntaros por un problema que tengo. Tengo un vertex shader con lo siguiente:


#version 110

uniform vec4 azul;
attribute vec4 attribColor;
uniform sampler2D tex;


void main(){
   gl_FrontColor=texture2D(tex,gl_TexCoord[0].st);
   gl_TexCoord[0]= gl_MultiTexCoord0;
   gl_Position= ftransform();
}




Lo que quiero es usar el shader para modificar el color cogiendolo de la textura. El problema que tengo es que al introducir la instruccion texture2D el shader si es correcto, pero el programa al que enlazo el shader deja de ser valido.  Alguien sabe porque puede ser? Puede ser por la tarjeta (Geforce MX440)?
Gracias.





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.