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.
Guardándolos? El no guarda nada
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.
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
Gracias por tu tiempo, de todas formas. Esperemos que alguien si que conozca la respuesta. :D
Saludos.
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.
eso es lo que te habia dicho fran que hicieras ;)
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.
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.
Puedes dibujar directamente en el buffer frontal si no creas un doble buffer o con glDrawbuffer(GL_FRONT), y glFlush() para mostrar lo dibujado.
Muchas gracias. Voy a comer y en cuanto vuelva lo compruebo. Seguid así, que este foro es de puta madre "parriba".
¿? 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.
Sí, me lo han dicho. Perdona, no te lo comprendí demasiado bien; pero gracias de todas formas.
Un saludo.