2009-12-07 28 views
14

acabo de empezar a usar OpenGL y parece que no es fácil entender el funcionamiento de glutMainLoop() ¿qué ocurre realmente allí? ¿Permanece ahí sin hacer nada hasta que responde alguna de las funciones?opengl glutmainloop()

Respuesta

17

Llama a su pantalla de devolución de llamada una y otra vez, llamando al ralentí para que pueda mantener un framerate específico si es posible, y otros si es necesario (como cambiar el tamaño de la ventana o desencadenar un evento de entrada).

Básicamente, dentro de esta función se encuentra el bucle de programa principal, donde GLUT hace la mayor parte del trabajo por usted y le permite simplemente configurar la lógica de programa específica en estas devoluciones de llamada. Ha pasado un tiempo desde que trabajé con GLUT, y ciertamente es confuso al principio.

En su pantalla, la devolución de llamada obviamente debe ser su lógica principal para dibujar lo que sea que debería estar sucediendo. En la devolución de llamada inactiva debe haber algunas operaciones muy livianas para determinar cuál debe ser el cambio de estado desde la última vez que se llamó a la pantalla a la próxima vez. Por ejemplo, si está animando algo, aquí es donde cambia su posición u orientación.

+2

Glut me ha marcado una cicatriz de por vida –

+1

GLUT es doloroso y no es bonito ... en realidad me desconectó de la programación de gráficos. – StrixVaria

+0

La rotación era una locura para mí, como 'wtf, ¿hay una coordenada z?' Una vez que tomé la física y aprendí algunas reglas, todo se calmó. –

4

Es exactamente como StrixVaria ha declarado.

glutMainLoop ingresa al ciclo de procesamiento de eventos GLUT. Esta rutina debe ser llamada como máximo una vez en un programa GLUT. Una vez llamado, esta rutina nunca volverá. Llamará según sea necesario a todas las devoluciones de llamada que se hayan registrado.

Tomado de here

2

usando OpenGL y GLUT juntos significa que estaría escribiendo un programa de 'exceso' que utiliza comandos de OpenGL en las funciones de devolución de llamada. main contiene funciones de exceso. muchas funciones de saturación necesitan una función de devolución de llamada para ser registradas. Esas funciones de devolución de llamada generalmente contienen comandos opengl.

En respuesta a su pregunta, ahora cuando está claro que está escribiendo principalmente un programa de exceso, también debe tenerse en cuenta que la función glutMainLoop ejecuta las funciones de devolución de llamada cuando sea necesario, que a su vez ejecuta los comandos de apertura.

2

Bien glutMainLoop es la función principal que sigue llamando y llamando a las funciones de visualización y que también mantiene su ventana realmente abierta. Descubrirás que OpenGL no es tan aterrador.