Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





JOGL y recordar puntos que he dibujado

Iniciado por ethiel, 12 de Abril de 2007, 01:41:17 PM

« anterior - próximo »

ethiel

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.

Fran


ethiel

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.

Fran

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

ethiel

Gracias por tu tiempo, de todas formas. Esperemos que alguien si que conozca la respuesta.  :D

Saludos.

ethiel

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.

Alexpi

eso es lo que te habia dicho fran que hicieras ;)
Juego web www.goldpiece.net

Diferencial

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.
PARA TENER COSAS QUE NUNCA HAS TENIDO, TENDRÁS QUE HACER COSAS QUE NUNCA HAS HECHO.

ethiel

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.

marcode

Puedes dibujar directamente en el buffer frontal si no creas un doble buffer o con glDrawbuffer(GL_FRONT), y glFlush() para mostrar lo dibujado.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

ethiel

Muchas gracias. Voy a comer y en cuanto vuelva lo compruebo. Seguid así, que este foro es de puta madre "parriba".

Fran

¿? 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.

ethiel

Sí, me lo han dicho. Perdona, no te lo comprendí demasiado bien; pero gracias de todas formas.

Un saludo.






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.