Está en la página 1de 9

glRasterPos2f funcin (Windows)

0 de 1 puntuado este til - Valorar este tema Se aplica a: aplicaciones de escritorio slo Especifica la posicin de la trama de operaciones por pixel. Sintaxis Copy Copiar vaco WINAPI glRasterPos2f ( GLfloat x, GLfloat y ); Parmetros x Especifica la coordenada x de la posicin de la trama actual. y Especifica la coordenada y de la posicin de la trama actual. Valor de retorno Esta funcin no devuelve ningn valor.

void glViewport (GLint x, GLint y, GLsizei ancho, GLsizei alto) Los parmetros x e y especifican las esquina inferior izquierda de la vista dentro de la ventana, y los parmetros ancho y largo especifican las dimensiones en pixels. Un error muy frecuente es llamar a esta funcin con dos parejas de nmeros especificando el rea de dibujo en la ventana. Como hemos sealado, se producira un resultado errneo, ya que en realidad se trata de las dimensiones en lugar de un segundo punto.

glutReshapeFunc

establece la devolucin de llamada para formar de nuevo la ventana

actual. Uso
glutReshapeFunc vaco (void (* func) (int ancho, int altura)); funcin

La nueva formar de nuevo la funcin de devolucin de llamada. Descripcin


glutReshapeFunc establece la devolucin de llamada para formar de nuevo la ventana actual. La devolucin de llamada nueva forma se activa cuando una ventana se forma de nuevo. Una devolucin de llamada remodelar tambin se activa inmediatamente antes de devolucin de llamada de una ventana de visualizacin primero despus se crea una ventana o siempre que una superposicin de la ventana se establece. Los

parmetros de anchura y altura de la devolucin de llamada especificar el nuevo tamao de ventana en pxeles. Antes de la devolucin de llamada, la ventana actual se establece en la ventana que ha sido reformado. Si una devolucin de llamada remodelar no est registrado para una ventana o NULL se pasa a glutReshapeFunc (para cancelar el registro de una devolucin de llamada registrada anteriormente), el valor predeterminado remodelar devolucin de llamada se utiliza. Esta devolucin de llamada predeterminado simplemente llamar glViewport (0,0, ancho, alto) en el plano normal (y en la superposicin, si existe). Si se establece una superposicin de la ventana, una nueva forma de devolucin de llamada solo se genera. Es responsabilidad de la devolucin de llamada para actualizar tanto el plano normal y de superposicin para la ventana (cambiando la capa en uso cuando sea necesario). Cuando una ventana de nivel superior se forma de nuevo, subventanas no se forman de nuevo. Es hasta el programa GLUT para gestionar el tamao y las posiciones de las ventanas secundarias dentro de una ventana de nivel superior. Sin embargo, cambiar la forma devoluciones de llamada se activar para ventanas secundarias cuando su tamao se cambia con glutReshapeWindow.

glutReshapeFunc(reshape);

Aqu definimos otro callback, en este caso para saber que hace cuando la ventana es explcitamente reescalada. Esta accin afecta en principio directamente al render, puesto que se est cambiando el tamao del plano de proyeccin. Por eso, en esta funcin (en este caso reshape), se suele corregir esto de alguna forma. Lo veremos mejor ms adelante.
glutMainLoop();

Esta funcin cede el control del flujo del programa a GLUT que, a partir de estos "eventos", ir llamando a las funciones que han sido pasadas como callbacks.
glViewport(0, 0, width, height);

Esta funcin define la porcin de ventana donde puede dibujar ogl. Los parmetros son, x e y (esquina inferior izquierda del "cuadro" donde puede dibujar), ancho (width) y alto (height). Los valores de width y height se toman, en este caso, de los parmetros de la funcin reshape(), pero se pueden poner valores enteros. Los valores que se toman de width y heigh, los manda el sistema de ventanas como parmetros del callback glutReshapeFunc para el reescalado de la ventana, como ya se ha comentado.
glMatrixMode(GL_PROJECTION);

Especifica la matriz actual para realizar la composicin. En ogl las operaciones de rotacin, translacin, escalado, etc. se realizan a travs de matrices de transformacin. Dependiendo de lo que estemos tratando, hay tres tipos de matriz (que son los tres posibles flags que puede llevar de parmetro la funcin): matriz de proyeccin (GL_PROJECTION), matriz de modelo (GL_MODELVIEW) y matriz de textura (GL_TEXTURE). Con esta funcin indicamos a cual de estas tres deben afectar las operaciones. Concretamente, GL_PROJECTION afecta a las vistas o perspectivas o proyecciones. Todo esto se ver en el captulo 4.
glLoadIdentity();

Con esto cargamos en la matriz actual la matriz identidad (equivale a resetear la matriz).
glColor3f(1,1,1);

Selecciona el color actual con el que dibujar. Parmetros R G y B, rango [0..1], as que estamos ante el color blanco.
glLoadIdentity();

Carga la matriz identidad.

glFlush(); El comando glFlush causa la ejecucin de cualquier comando que quede en espera en la pila.
glFlush(); glutSwapBuffers();

Despues de hacer que todos los comandos de ogl que estn en espera se ejecuten, mediante la instruccin glFlush(), al utilizar la tcnica de doble buffer, tenemos que llamar siempre a la funcin glutSwapBuffers() al final del pintado de cada frame, para que vuelque el buffer de escritura en el buffer de visualizacin el frame correspondiente

Introduccin
Por razones de diseo, la especificacin de OpenGL se aisl de cualquier dependencia de un sistema de ventanas concreto. El interface resultante es una librera de trazado en 2D y 3D portable y eficiente. Es trabajo del sistema de ventanas nativo el abrir y trazar ventanas. La librera de OpenGL se comunica con el sistema nativo a travs de libreras adicionales auxiliares. Por ejemplo, la librera auxiliar GLX describe la interaccin entre OpenGL y el sistema X Window System. El kit de utilidades de OpenGL (OpenGL Utility Toolkit - GLUT) es un interface de programacin con bindings para ANSI C y FORTRAN para escribir programas OpenGL independientes del sistema de ventanas. Lo ha escrito Mark J. Kilgard y cubre un gran agujero dejado por la especificacin de OpenGL. Gracias a GLUT, los desarrolladores pueden usar un inteface comn para el sistema de ventanas independientemente de la plataforma empleada. Las aplicaciones de OpenGL que usan GLUT se pueden portar fcilmente entre plataformas sin tener que introducir muchos cambios en el cdigo fuente. En fin, GLUT simplifica la produccin de cdigo OpenGL y complementa la librera de OpenGL. GLUT es relativamente pequeo y fcil de aprender. Est bien diseado y su autor ha escrito una buena documentacin. Por eso, parece redundante empezar una serie de artculos aqu en LinuxFocus. Recomendamos a cualquier desarrollador serio que lea la documentacin de Mark. Nuestro propsito escribiendo estas columnas de GLUT es introducir la librera GLUT y su uso paso por paso con ejemplos, como complemento a la lectura de la serie de OpenGL de este magazine. Esperamos hacer una contribucin til y como mnimo motivar a alguno de vosostros a subiros al vagn de Linux y OpenGL. De cualquier modo, obtener vuestra copia de la documentacin de Mark como referencia. La API de GLUT es una mquina de estados, como OpenGL. Esto significa que GLUT tiene una serie de variables de estado que duran toda la ejecucin de la aplicacin. El estado inicial de la mquina de GLUT se ha elegido razonablemente para ajustarse a la mayor parte de aplicaciones. El programa puede modificar los valores de las varibles de estado para ajustarlas a su gusto. Cuando se llama a una funcin de GLUT, su accin se modifica de acuerdo a los valores de las variables de estado. Las funciones de GLUT son simples, tienen pocos parmetros. Nunca devuelven punteros, y los nicos punteros pasados a las funciones de GLUT son punteros a cadenas de caracteres y manejadores de fuentes. Las funciones de GLUT se pueden clasificar en varias subAPIs segn su funcionalidad:

Inicializacin Inicio del procesado de eventos Control de ventanas Control de overlay Control de mens Registro de funciones Callback Control del mapa de colores Obtencin del estado Trazado de fuentes

Trazado de formas geomtricas

Es este artculo exploraremos algunas de las funciones de inicializacin, procesado de eventos y control de ventanas necesarias para empezar un sencillo programa en OpenGL.

Initializations
Todo programa de OpenGL que utilice GLUT debe empezar inicializando el estado de la mquina de estados de GLUT. Las funciones de inicializacin de GLUT tienen el prefijo glutInit-. La rutina principal de inicializacin es glutInit:
Uso: glutInit(int **argcp, char **argv); argcp es un puntero a la variable argc de la funcin main (sin modificar). Al acabar la funcin, el valor apuntado por argcp se actualiza, ya que glutInit extrae todas las opciones de la lnea de comandos relevantes para la librera GLUT. Por ejemplo: bajo X Window System toda opcin relevante para la ventana X asociada a la ventana GLUT.. argv es la variable argv de la funcin main (sin modificar). glutInit

se encarga de modificar las variables de estado de GLUT y negociar una sesin con el sistema de ventanas. Hay muy pocas funciones que pueden aparecer antes de glutInit; solo aquellas precedidas por glutInit-. Estas rutinas se pueden usar para poner los estados de inicializacin por defecto, por ejemplo:
Uso: glutInitWindowPosition(int x, int **y); glutInitWindowSize(int width, int **height); x , y posicin en la pantalla en pxels de la ventana (esquina superior izquierda) width, height ancho y alto en pxels de la ventana.

Existe otra rutina de inicializacin ominpresente en toda aplicacin en OpenGL, glutInitDisplayMode():


Uso: glutInitDisplayMode(unsigned int mode); mode es el modo de display, un OR de los posibles valores de display, que son: Selecciona una ventana en modo RGBA. Es el valor por defecto si no se GLUT_RGBA indican ni GLUT_RGBA ni GLUT_INDEX. GLUT_RGB Lo mismo que GLUT_RGBA. Seleciona una ventana en modo de ndice de colores. Se impone sobre GLUT_INDEX GLUT_RGBA. GLUT_SINGLE Selecciona una ventana en modo buffer simple. Es el valor por defecto. Selecciona una ventana en modo buffer doble. Se impone sobre GLUT_DOUBLE GLUT_SINGLE. GLUT_ACCUM Selecciona una ventana con un buffer acumulativo. GLUT_ALPHA Selecciona una ventana con una componente alpha del buffer de color. GLUT_DEPTH Selecciona una ventana con un buffer de profundidad. GLUT_STENCIL Selecciona una ventana con un buffer de estarcido. GLUT_MULTISAMPLE Selecciona una ventana con soporte multimuestra. GLUT_STEREO Selecciona una ventana estreo. GLUT_LUMINANCE Selecciona una ventana con un modelo de color de "luminancia".

Interaccin con el Ratn


Opengl proporciona una funcin que permiten registrar los eventos producidos por los clics del ratn. El nombre de esta funcin es glutMouseFunc(), y se suele llamar en la fase de inicializacin de la aplicacin. Su sintaxis se puede ver en el siguiente ejemplo: void glutMouseFunction(void (*func)(int button, int state, int x, int y));

Donde func representa al nombre de la funcin a la que se llamar cuando se invoque al manejador de eventos del ratn. Al igual que en el caso de la funcin que manejaba eventos del teclado, sta no devuelve datos, simplemente da la oportunidad de modificar atributos de nuestro programa. Los parmetros de entrada que necesita son cuatro. El primero de ellos se refiere al botn que ha sido presionado (botn izquierdo, central o derecho), puede contener uno de estos 3 valores: GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON El segundo argumento se refiere al estado que presentaba el botn cuando fue generada la llamada (callback), por ejemplo pulsado o no pulsado. Los posibles valores que puede tener son: GLUT_DOWN GLUT_UP Cuando se genera una llamada con el estado GLUT_DOWN, la aplicacin asume que este estado ser sucedido por el estado GLUT_UP, incluso si la posicin del ratn se sale fuera de la ventana actual. Sin embargo, si llamamos a la funcin de nuevo, pasndole NULL como argumento el proceso dejar de enviar cambios de estado. Los dos parmetros restantes nos proporcionan las coordenadas (x,y) del ratn relativas a la esquina superior izquierda de la ventana. Deteccin de movimientos Opengl nos proporciona un metodo de deteccin de movimientos de ratn. Existen dos tipos de movimientos manejados por la GLUT, son movimiento activo y pasivo. El primer tipo aparece cuando se mueve el ratn mientras est pulsado un botn. En cambio el movimiento pasivo se produce con el solo movimiento del ratn. Si una aplicacin est ejecutndose se generar un evento por frame durante el periodo en el que el ratn est haciendo un movimiento de arrastre.

Por lo general se debe registrar la funcin que ser responsable del manejo de los eventos de movimiento. La GLUT nos permite especificar dos tipos diferentes de funciones: uno para los movimientos pasivos, y otro para los activos. Las cabeceras para estas funciones son las siguientes: void glutMotionFunc(void (*func) (int x,int y)); (arrastre activo) void glutPassiveMotionFunc(void (*func) (int x, int y)); (arrastre pasivo) Donde func es la funcin que se llamar cuando se detecta el evento. Los parmetros que se le pasan a estas funciones de procesado son los mismos para ambas: las coordenadas (x,y). Deteccin de abandono de la pantalla de la aplicacin La GLUT es capaz de detectar cuando se entra o se sale de esta regin. Se puede usar una funcin para manejar estos dos eventos: void glutEntryfunc(void (*func)(int state)); Donde el parmetro state se refiere al estado actual de la posicin del ratn, en cuanto a si ha salido o ha entradoen la ventana de la aplicacin. Sus posibles valores son los siguientes: GLUT_LEFT GLUT_ENTERED Algunos Ejemplos de utilizacin: En primer lugar definiremos las llamadas rutinarias de la funcin main, dentro de la cual aadiremos las funciones de interacin con el ratn.

void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Inrteracion con el ratn"); glutDisplayFunc(display); glutIdleFunc(display); glutReshapeFunc(reshape); //Aadimos aqu los callbacks de procesado del ratn glutMouseFunc(processMouse); glutMotionFunc(processMouseActiveMotion); glutPassiveMotionFunc(processMousePassiveMotion); glutEntryFunc(processMouseEntry);

glutMainLoop(); }

Ahora definiremos las cabeceras de dichas funciones.

void processMouse(int boton, int estado, int x, int y); void processMouseActiveMotion(int x, int y) ; void processMousePassiveMotion(int x, int y) ; void processMouseEntry(int estado) ; Donde incluiramos el cdigo de tratamiento de eventos producidos por el ratn.

También podría gustarte