Error al usar glutTimerFunc() [ segfault ]
Publicado por JuanC90 (1 intervención) el 17/10/2015 08:05:45
Hola a todos, seré breve con el problema ya que llevo días tratando de solucionarlo.
Quiero que un círculo cambie de color aproximadamente cada segundo: Primero quiero el color original, luego rojo, luego verde, luego azul, R, G, B (y así sucesivamente). Este es el código que escribí para ello:
Aquí está la definición de la función que cambia el color: (Todo lo demás funciona perfecto)
OBSERVACIONES:
1. Cada vez que llamo a la función update con glutTimerFunc(16.66,update,0) el valor de "pos" se modifica sólo (y sin razón aparente).
2. Cuando glutTimerFunc(1000,changeColor,0) es llamado por primera vez, "pos" tiene un valor de 1140457480 (Pero debería ser cero). C[pos]=1 es una orden que no puede cumplirse, entonces, se produce un error y se cierra la ventana (1 segundo después de compilar).
3 Si elimino la primera glutTimerFunc() todo funciona a la perfección.
Entonces ... ¿Qué está pasando con el código? ¿Cuál es mi error y cómo podía solucionarlo?. Les agradezco cualquier ayuda.
Quiero que un círculo cambie de color aproximadamente cada segundo: Primero quiero el color original, luego rojo, luego verde, luego azul, R, G, B (y así sucesivamente). Este es el código que escribí para ello:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int C[3]={1,1,1}; // Matriz con los colores RGB originales del círculo
int pos=0; // Índice de la matriz que tomará el valor de '1'
int main(int argc, char **argv) {
='editor_indent'>glutInit(&argc,argv);glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize(600,600);glutInitWindowPosition(425,50);glutCreateWindow("Prueba");glClearColor(0,0,0,1);glutDisplayFunc(escena); // "escena" dibuja el círculo con glColor3i ( C[0], C[1], C[2] )glutReshapeFunc(...);glutKeyboardFunc(...);glutSpecialFunc(...);glutTimerFunc( 16.66, update, 0 ); // "update" actualiza la posición del círculo.glutTimerFunc( 1000, changeColor, 0 );glutMainLoop();return 0;
}
Aquí está la definición de la función que cambia el color: (Todo lo demás funciona perfecto)
1
2
3
4
5
6
7
8
9
10
11
12
void changeColor(int value)
{
='editor_indent'>}glutTimerFunc(1000,changeColor,0);for (int i=0; i<3; i++){C[i]=0;}C[pos]=1; // En cada llamado el círculo tomará el color del índice indicado por "pos"pos++;if(pos>2){pos=0;}glutPostRedisplay();
OBSERVACIONES:
1. Cada vez que llamo a la función update con glutTimerFunc(16.66,update,0) el valor de "pos" se modifica sólo (y sin razón aparente).
2. Cuando glutTimerFunc(1000,changeColor,0) es llamado por primera vez, "pos" tiene un valor de 1140457480 (Pero debería ser cero). C[pos]=1 es una orden que no puede cumplirse, entonces, se produce un error y se cierra la ventana (1 segundo después de compilar).
3 Si elimino la primera glutTimerFunc() todo funciona a la perfección.
Entonces ... ¿Qué está pasando con el código? ¿Cuál es mi error y cómo podía solucionarlo?. Les agradezco cualquier ayuda.
Valora esta pregunta


0