Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: ethiel en 12 de Abril de 2007, 01:41:17 PM

Título: JOGL y recordar puntos que he dibujado
Publicado por: ethiel en 12 de Abril de 2007, 01:41:17 PM
Hola, forer@s.

Este es mi problemilla:

quiero pintar en la pantalla una serie de puntos, pero de manera secuencial, es decir: se le pide al usuario la localización del punto en cuestión, en coordenadas x e y, y entonces se dibuja. La cuestión es que al dibujar el siguiente punto, se pierden todos los anteriores. (Sólo se dibuja el último).
¿Como puedo hacer para que "recuerde" que los puntos existían antes y no los borre?.

Saludos.
Título: JOGL y recordar puntos que he dibujado
Publicado por: Fran en 12 de Abril de 2007, 01:52:31 PM
Guardándolos? El no guarda nada
Título: respuesta
Publicado por: ethiel en 12 de Abril de 2007, 01:54:55 PM
No guardándalos exactamente. Me explico un poco mejor:
Pido las coordenadas al usuario:

1,2 (X e Y).
Las pinto.

Pido las siguientes coordenadas:
2,3(X e Y).
Las pinto. Y aquí viene el problema. Sólo soy capaz de pintar éste último. El otro desaparece.
Título: JOGL y recordar puntos que he dibujado
Publicado por: Fran en 12 de Abril de 2007, 01:56:12 PM
Ya. Es q OpenGL no guarda nada. Eres tu el responsable de en cada render, decirle lo q tiene q dibujar y por tanto almacenarlo. Por lo menos yo no sé la forma. Xq incluso las display_list tienes tu q llamarlas. El no las dibuja xq las hayas creado
Título: respuesta
Publicado por: ethiel en 12 de Abril de 2007, 02:09:17 PM
Gracias por tu tiempo, de todas formas. Esperemos que alguien si que conozca la respuesta.  :D

Saludos.
Título: respuesta
Publicado por: ethiel en 12 de Abril de 2007, 02:29:12 PM
Me respondo a mi mismo, que lo he averiguado, creo.
Utilizando un array y dentro del display del GLEventListener, pones esto:
           
               int j=0;
      GL gl=drawable.getGL();
      gl.glColor3f(1.0f,0.0f,0.0f);
      for (j=0;j<puntos.length-1;j++)
      {
      gl.glBegin(GL.GL_POINTS);
      gl.glVertex2f(puntos[j], puntos[j+1]);
      gl.glEnd();
      }
Dibuja todos los puntos en la pantalla. Simplemente, cada punto nuevo lo tienes que insertar en el array, y el display se encargará de dibujarlo.
Si lo que quieres es un triángulo, la primitiva hay que cambiarla, y recorrer el array de 3 en 3. En mi caso, puesto que mi triangulo es muy simple, y cada coordenada se almacena consecutivamente en el array.
Saludos.
Título: JOGL y recordar puntos que he dibujado
Publicado por: Alexpi en 12 de Abril de 2007, 02:33:31 PM
eso es lo que te habia dicho fran que hicieras ;)
Título: JOGL y recordar puntos que he dibujado
Publicado por: Diferencial en 12 de Abril de 2007, 02:36:15 PM
No estoy seguro, pero si no refrescas y dibujas encima, sigues teniendo todos los puntos dibujados ademas del ultimo. Si vas a necesitar realizar calculos con los puntos pues entonces tal como lo estas haciendo ya te sirve.
Título: respuesta
Publicado por: ethiel en 12 de Abril de 2007, 02:52:20 PM
Sí, esa idea se me ocurrió. ¿Pero cómo lo hago?. No se dibujar encima de algo que ya ha sido dibujado. Si me lo puedes explicar, te quedo muy agradecido.
Título: JOGL y recordar puntos que he dibujado
Publicado por: marcode en 12 de Abril de 2007, 03:19:50 PM
Puedes dibujar directamente en el buffer frontal si no creas un doble buffer o con glDrawbuffer(GL_FRONT), y glFlush() para mostrar lo dibujado.
Título: respuesta
Publicado por: ethiel en 12 de Abril de 2007, 03:40:45 PM
Muchas gracias. Voy a comer y en cuanto vuelva lo compruebo. Seguid así, que este foro es de puta madre "parriba".
Título: JOGL y recordar puntos que he dibujado
Publicado por: Fran en 12 de Abril de 2007, 04:12:33 PM
¿? Cuando te digo que los guardes me refiero a eso. En un vector mejor que en un array (por aquello de la limitación). Lo de dejarlos dibujados en JOGL no funciona creo, pero al fin y al cabo -aunque se pudisese- cuando tengas q hacer cualquier operación con ellos (para algo los querrás) no sabrás cuales te han introducido. Pero me refería exactamente a lo que has hecho. Lo q no hay (a mi me pareció decepcionante q no lo hubiese la primera vez q programé con OpenGL)  es un buffer interno de OpenGL q te guarde lo q introduces. Eso te lo tienes q hacer tú como has hecho y a eso me refería.
Título: respuesta
Publicado por: ethiel en 12 de Abril de 2007, 04:18:41 PM
Sí, me lo han dicho. Perdona, no te lo comprendí demasiado bien; pero gracias de todas formas.

Un saludo.