¿Alguien puede proporcionar un archivo de ayuda de GLUT?
Nota: Esta es una línea de comentario
para que la aplicación no mostrar es una ventana de consola, se muestra como una ventana OpenGL. En Visual C/C, vincular un programa GLUT requiere los siguientes pasos:
Seleccione Proyecto/Configuración
Seleccione la pestaña ENLACE
Agregue los siguientes archivos en Objeto /library: opengl32.lib glut32.lib glu32.lib
Tenga en cuenta: agregué glu32.lib y opengl32.lib. Ambas son bibliotecas OpenGL estándar.
Bien, ahora todo está listo, podemos comenzar a escribir aplicaciones GLUT. Si algo no está claro, hágamelo saber, sus comentarios son muy importantes.
En esta sección, construiremos la función principal de la aplicación. La función principal inicializará la aplicación e iniciará el ciclo de procesamiento de eventos. Todas las funciones tienen el prefijo glut y las funciones de inicialización tienen el prefijo glutInit. Primero debemos llamar a la función glutInit.
Código
void glutInit(int *argc, char **argv
// Parámetros: / - argc -); Puntero a la función principal.
//argv: puntero no modificado a la variable argv de la función principal.
Después de inicializar el propio GLUT, definiremos la ventana. Primero, debemos determinar la ubicación de la ventana, por ejemplo, en la esquina superior izquierda de la ventana. Para hacer esto necesitamos llamar a la función glutWindowsPosition.
Código
void glutInitWindowPosition(int x, int y
// Parámetros:
/x- desde el lado izquierdo); del número de píxeles de la pantalla. El valor predeterminado es -1 y el sistema Windows determina la posición de la ventana. Si no se utiliza el valor predeterminado, se debe utilizar un valor positivo adecuado como parámetro real.
/y-El número de píxeles desde la parte superior de la pantalla, el resto es igual que arriba.
Tenga en cuenta que estos parámetros son sólo sugerencias para administradores de ventanas. Es posible que las ventanas que creemos estén en diferentes ubicaciones, pero esto es raro. A continuación, determinamos el tamaño de la ventana, para lo cual utilizamos la función glutInitWindowSize.
Código
void glutInitWindowSize(int width, int height
Parámetros:
ancho - el ancho de la ventana
p>
altura - la altura de la ventana
Nuevamente, la altura y el ancho son sólo sugerencias, evite utilizar valores negativos.
Luego, necesitamos definir el modo de visualización, usamos la función glutInitDisplayMode.
Código
void glutInitDisplayMode(modo int sin firmar)
Parámetros:
modo: especifique el modo de visualización
/modo El parámetro modo es una constante predefinida GLUT booleana compuesta (bit a bit o no). Puede utilizar el modo para especificar colores, así como el número y tipo de buffers.
Las constantes son:
GLUT_RGBA o GLUT_RGB - el modo de color predeterminado
GLUT_INDEX - el índice de color (? modo
La pantalla El modo le permite seleccionar una ventana de almacenamiento en búfer simple o doble. Las constantes relevantes son:
GLUT_SINGLE: ventana de almacenamiento en búfer única
GLUT_DOUBLE: almacenamiento en búfer doble, necesario para una animación fluida
Las siguientes también son algunas constantes de almacenamiento en búfer:
GLUT_ACCUM - búfer agregado
GLUT_STENCIL - búfer de plantilla (.no convierte)
GLUT_DEPTH - búfer de profundidad p>
Ahora, digamos que desea crear una ventana RGB, un búfer único y un búfer de profundidad. Necesita conectar las constantes relacionadas para crear los puertos de constantes correctos
Código<. p>...
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT DEPTH);
...
Después de completar los pasos anteriores, puede llamar a la función glutCreateWindow
Código
int glutCreateWindow(char *title
Parámetros:
título - título de la ventana<; /p>
El nombre de la ventana. El valor de retorno de la función glutCreateWindows es el identificador de la ventana que se creó.
Ahora, juntemos el código anterior y veamos el proceso de inicialización completo. :
Código
#include
void main(int argc, char **argv) {
glutInit(amp; argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(320, 320);
glutCreateWindow("3D Tech- GLUT Tutorial");
}
Tenga en cuenta el archivo de inclusión, necesitamos el archivo de inclusión GLUT
. Si ejecuta este código, verá una ventana de consola negra pero ninguna ventana OpenGL y, después de unos segundos, la ventana desaparece. Antes de comenzar a renderizar, necesitamos hacer dos cosas más: La primera es decirle al sistema GLUT qué función es responsable de renderizar:
Creemos un ejemplo de una función de renderizado. Esta función borrará el búfer de color y dibujará dos triángulos:
Código
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5, -0.5, 0.0);
glVertex3f(0.5, 0.0, 0.0);
glVertex3f ( 0.0, 0.5, 0.0);
glEnd();
glFlush();
}
Puedes tomar cualquier nombre.
Sin embargo, debes decirle a GLUT que use esta función para renderizar. Esto se llama función de devolución de llamada. GLUT llamará a esta función cuando se requiera renderizado. Ahora, digamos a GLUT que llame a la función renderScene inmediatamente después de que se destruya la ventana (nota: esta función también se llama cuando se crea la ventana por primera vez)
. Hay una función en GLUT que toma un puntero de función como argumento y usa la función a la que apunta ese puntero como función de representación.
Código
void glutDisplayFunc(void (*func)(void));
Argumentos:
func - puntero de función de representación, NULL es ilegal aquí
Lo último que falta es decirle a GLUT que estamos listos para ingresar al ciclo de procesamiento de eventos de la aplicación. GLUT proporciona una función que permite que una aplicación entre en un bucle sin fin, siempre esperando a que se procese el siguiente evento. La función GLUT se llama glutMainLoop y tiene la siguiente sintaxis:
Lo último que falta es decirle a GLUT que estamos listos para ingresar al ciclo de manejo de eventos de la aplicación. GLUT nos proporciona una función que hace que el programa entre en un bucle infinito y espere eternamente a que se procese el siguiente evento. Esta función es glutMainLoop:
Código
void glutMainLoop(void)
El código actual es el siguiente. Tenga en cuenta que agregamos una declaración de inclusión para comenzar a usar funciones estándar de OpenGL como glClear, glBegin, glVertex3f y glEnd.
El código completo es el siguiente. Agregamos un nuevo archivo de inclusión para usar funciones OpenGL como GlClear, glBegin, glVertex3f y glEnd.
Si ejecutas este código, verás una ventana de consola y luego una ventana OpenGL con un triángulo blanco dibujado
Código
# include "gl /glut .include "gl/glut.h"
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
p>
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5, 0.0, 0.0);
glVertex3f(0.0, 0.5, 0.0) ;
p>
glEnd();
glFlush();
}
void main(int argc, char **argv) {
glutInit(amp; argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100) ;
glutInitWindowSize(320, 320);
glutCreateWindow("Tutorial de tecnología 3D - GLUT");
glutDisplayFunc(renderScene);
glutMainLoop();
glutMainLoop();
p>
}