Open GL - Error al usar glutTimerFunc() [ segfault ]

 
Vista:

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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error al usar glutTimerFunc() [ segfault ]

Publicado por Tom (1 intervención) el 23/10/2015 21:46:50
creo que:
glutTimerFunc( 16.66, update, 0 );
no es correcto ... el primer parámetro debería ser un int ¿ no ?
El problema de la variable global pos no es fácil de averiguar sin ver todo el código ... en algún sitio podrías estar escribiendo mal en C y machacando el valor de pos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar