Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Hola y bienvenidos a la conferencia número 31 en el curso Gráficos Informáticos. Por lo tanto, esta será nuestra conferencia final sobre el tema. Por lo tanto, ¿qué hemos discutido?
Discutimos el gasoducto y luego estamos discutiendo la implementación de la tubería. En nuestras conferencias anteriores aprendimos acerca del hardware gráfico básico incluyendo los dispositivos de entrada y salida de gráficos, la GPU o la Unidad de Procesamiento de Gráficos y la idea básica de programación de GPU. Hoy en día en nuestro, este último tema vamos a aprender sobre la programación o cómo escribir programas gráficos que es esencialmente el aspecto de software de los gráficos de computadora.
Ahora, antes de aprender a programar, primero comenzaremos con una introducción básica al software de gráficos. Si usted puede recordar durante nuestras conferencias introductorias, tuvimos una introducción preliminar, pero hoy vamos a recapitular, así como ampliar esas discusiones.
Como hemos mencionado anteriormente, el software gráfico es ampliamente de dos tipos. Uno son los paquetes de propósito especial y el otro es paquetes de programación general.
En los paquetes de propósito especial, ¿qué tenemos? Estos son sistemas de software esencialmente completos con sus propias GUI o interfaces de usuario. Por ejemplo, el sistema de pintura aquí tiene su propia interfaz de usuario a través de la cual un artista puede seleccionar objetos, seleccionar el color, colocar los objetos en la posición deseada en el lienzo o la pantalla, cambiar el tamaño del objeto, cambiar la forma, también la orientación y así sucesivamente.
Y todo esto, el artista puede hacer interactuando con la interfaz de usuario. Por lo tanto, allí el artista no necesita saber nada sobre el gasoducto o cómo se implementa. Estos son ejemplos de sistemas o paquetes de software completos. Otro ejemplo es el paquete CAD que hemos aprendido en las conferencias introductorias, CAD o en los paquetes de diseño asistido por ordenador. Estos se utilizan principalmente en arquitectura, medicina, negocios, ingeniería y tales dominios.
El otro tipo de software es el paquete de programación general. Ahora, aquí tenemos bibliotecas, bibliotecas de funciones gráficas que se proporcionan y podemos utilizar esas bibliotecas con cualquier lenguaje de programación como C, C + +, o Java y estas funciones son medias para realizar o más bien significar para ayudar a un programador a realizar tareas de canalización. Así que, en otras palabras, ayudan al programa e implementan el gasoducto.
Un ejemplo es OpenGL, que significa Open Source Graphics Library. También hay VRML Virtual Reality Modeling Language, Java 3D y así sucesivamente. Por lo tanto, hay muchas bibliotecas de este tipo que se proporcionan para implementar funciones gráficas.
Ahora, estas funciones también se conocen como interfaz de programación de aplicaciones de gráficos de computadora o API de CG. Ahora, son esencialmente una interfaz de software entre el lenguaje de programación y el hardware. Por ejemplo, cuando queremos escribirlo un programa de aplicación en un lenguaje digamos C, estas funciones de biblioteca nos permiten construir y mostrar imágenes en el dispositivo de salida. Por lo tanto, sin estas funciones no podrá hacerlo.
Pero una cosa que debemos tener en cuenta es que las funciones gráficas son típicamente definidas independientemente del lenguaje de programación y eso se logra a través de un concepto llamado enlace de lenguaje. Por lo tanto, el enlace de idioma se define para un lenguaje de programación de alto nivel determinado.
Ahora, a través de dicho enlace obtenemos la sintaxis particular que se utilizará para acceder a diversas funciones gráficas desde ese idioma. Por lo tanto, el enlace en esencia nos permite utilizar estas funciones de la biblioteca desde el interior de un programa escrito utilizando un idioma en particular.
Ahora, cada enlace de idioma está diseñado para hacer el mejor uso de las capacidades que hay para un idioma determinado y están diseñados para manejar varios problemas de sintaxis como tipos de datos, paso de parámetros y manejo de errores. Ahora, estas especificaciones o enlaces de idiomas son establecidos por la ISO o la International Standard Organization, por lo que necesitamos saber acerca de estos estándares. Vamos a tener una breve introducción a los diferentes estándares utilizados para los gráficos de la computadora.
Entonces, ¿cuáles son esos estándares, estándares de software que se utilizan en gráficos de computadora?
Ahora, por qué necesitamos estándar, tratemos de entender de nuevo. Cuando escribimos un programa con funciones gráficas, puede ser que esos programas se muevan de una plataforma de hardware a otra. Ahora, ¿cómo va a entender el sistema el programa si se cambia la plataforma? Allí requerimos de estándar, sin algunos estándares que es esencialmente una sintaxis comúnmente acordada, este movimiento entre plataformas no será posible y necesitamos reescribir todo el programa. Por lo tanto, esencialmente tenemos que empezar de cero. Por lo tanto, el estándar nos ayuda a evitar en tal situación.
El primer estándar gráfico llegó en 1984, hace mucho tiempo que era conocido como el sistema del núcleo gráfico o en corto GKS. Fue adoptado por la ISO, así como por muchos otros organismos nacionales estándar.
Luego vino un segundo estándar que se desarrolló al extender el GKS, se llamó PHIGS, que significa el estándar de gráficos interactivos jerárquicos del programador. 'PHIGS', de nuevo fue adoptado por las organizaciones de estándares en todo el mundo.
Ahora, alrededor del mismo tiempo en que se estaban desarrollando los otros estándares de Silicon Graphics Inc o SGI comenzaron a enviar sus estaciones de trabajo destinadas a gráficos con un conjunto de rutinas o funciones de biblioteca juntos se llaman biblioteca de gráficos para GL.
Posteriormente, este conjunto de funciones o GL se volvió muy popular y finalmente evolucionó como el OpenGL a principios de la década de 1990, que se había convertido en un estándar gráfico de facto. Ahora, este estándar ahora es mantenido por la junta de revisión de la arquitectura OpenGL que es un consorcio de representantes de muchas empresas gráficas y organizaciones.
Ahora, intentemos entender qué hay en OpenGL, qué funciones proporciona y cómo utilizar esas funciones.
Intentemos entender OpenGL con respecto a un programa de ejemplo. Por lo tanto, este programa se muestra aquí, este programa está destinado a mostrar una línea recta en la pantalla. Ahora, esto se ha escrito utilizando las funciones de biblioteca de OpenGL llamadas de C, el lenguaje C. Ahora, intentemos entender la sintaxis del programa.
Por lo tanto, para hacer uso de las funciones de la biblioteca, lo primero que debemos hacer es incluir un archivo de cabecera. Ahora, este archivo de cabecera contiene las funciones de la biblioteca, por lo que aquí lo hemos incluido con este hash de la sentencia incluir la barra inclinada del LM punto h. Ahora, ¿qué significa este nombre de biblioteca?
La biblioteca principal de OpenGL realmente no da soporte a las operaciones de entrada y salida porque estas funciones se han diseñado para ser independientes del dispositivo, mientras que el soporte para E/S es o debe ser dependiente del dispositivo. Por lo tanto, tenemos que hacer algo al respecto porque tenemos que mostrar la línea en la salida que es esencialmente un dispositivo que depende de las operaciones.
Por lo tanto, para visualizar se requieren bibliotecas auxiliares en la parte superior de la biblioteca de códigos, esto lo proporciona la biblioteca GLUT o la biblioteca del kit de herramientas de programa de utilidad OpenGL, 'GLUT', biblioteca GLUT, que se menciona en esta sentencia de inclusión.
Ahora, GLUT proporciona una biblioteca de funciones para interactuar con cualquier sistema de ventanas de pantalla esencialmente cualquier dispositivo de pantalla y nos permite configurar una ventana de visualización en nuestra pantalla, en esta ventana vamos a mostrar la imagen o lo que queramos mostrar y esta ventana de visualización es esencialmente un área rectangular que contiene la imagen, que podemos hacer con la ayuda de las funciones proporcionadas en la biblioteca de GLUT.
Ahora, cualquiera de las funciones de biblioteca que utilicemos que forman parte de GLUT vienen con el prefijo 'glut'.
Por lo tanto, esencialmente estas funciones proporcionan interfaz a otros sistemas de ventanas específicos de dispositivos que ya hemos mencionado. Por lo tanto, podemos escribir programas independientes de dispositivos usando estas funciones de GLUT y las funciones en sí se utilizan para vincular nuestro programa al dispositivo en particular.
También debemos tener en cuenta aquí es que la biblioteca GLUT es adecuada para las operaciones de gráficos sólo y para cualquier otra operación que podemos necesitar para incluir otros archivos de cabecera como stdio.h o stdlib.h como lo hacemos en nuestros programas regulares.
Ahora, vamos a empezar con la función principal que se muestra aquí, esta función y vamos a tratar de entender el cuerpo de la función. Como hemos dicho GLUT nos permite crear y gestionar una ventana de visualización o la región de la pantalla en la que queremos mostrar la línea. Por lo tanto, lo primero que se requiere es inicializar GLUT con la sentencia glutInit tal como se muestra aquí, esta es la función de inicialización que se requiere al principio.
Después de la inicialización, podemos establecer varias opciones para la ventana de visualización utilizando la función glutInitDisplayMode como se muestra en la segunda sentencia. Entonces, ¿cuáles son estas opciones?
Ahora, estas opciones se proporcionan mediante constantes de GLUT simbólicas como argumentos, como se muestra aquí, GLUT_SOLO, GLUT_RGB.
Ahora, aquí en esta función en particular hemos utilizado esta declaración teniendo estos dos argumentos GLUT_UNI y GLUT_RGB, indican que estamos especificando un único buffer de renovación que se utilizará para la ventana de visualización y el modo de color RGB que se utilizará para seleccionar los valores de color. GLUT_single es para el primer almacenamiento intermedio de renovación individual de tarea y GLUT_RGB indica que se debe utilizar la modalidad de color RGB.
Ahora, aquí debemos mirar la sintaxis, cómo se usa esta función glutInitDisplayMode. En el nombre constante que proporciona las opciones, hemos utilizado GLUT como prefijo todos los límites seguidos por un símbolo de subrayado y luego el nombre constante de nuevo todas las tapas como se muestra aquí o aquí esta es la sintaxis particular utilizada para proporcionar argumentos. Ahora, para combinar múltiples opciones que estamos utilizando esta lógica o operación, para indicar que queremos ambas que es la sintaxis utilizada para proporcionar las opciones.
A continuación, estamos utilizando las dos funciones glutInitwindowPosition y glutInitwindowSize. Ahora, se utilizan para proporcionar algunos valores que son diferentes de los valores predeterminados para el tamaño de ventana y la posición que ya existe en la función de biblioteca. Por lo tanto, si queremos cambiar los valores entonces tenemos que utilizar estas dos funciones glutInitwindowPosition donde se especifica el valor y glutInitwindowSize donde se especifica de nuevo el valor de tamaño.
Ahora, esta posición de ventana, ¿qué posición se especifica? Especifica la posición de esquina superior izquierda de la ventana. Suponiendo un sistema de coordenadas de pantalla de entero y suponiendo el origen en la esquina superior izquierda. Estos son los supuestos cuando especificamos estos valores.
Luego en caso de glutInitwindowSize donde estamos especificando el tamaño, el primer argumento especifica la anchura que significa 800, segundo argumento especifica la altura que es 600 y ambos valores están en píxeles, por lo que 800 píxeles por 600 píxeles. Así, hemos entendido estas cuatro funciones init, displaymode, windowPosition y windowSize.
A continuación, se crea la ventana y se establece un título que es opcional utilizando la función Createwindow y el título se proporciona entre paréntesis, pero este título es opcional.
Lo siguiente que hacemos es especificar que la imagen se va a mostrar en la ventana que es la línea. Ahora, tenemos que crear la línea y luego podemos mostrarla en la ventana, esta creación se hace por una función separada que es el usuario definido que estamos llamando a la función createLine.
Ahora, esta función createLine se pasa como un argumento a otra función de biblioteca de glut que es glutDisplayFunction que se muestra aquí. Esto indica que la línea debe visualizarse en la ventana. Por lo tanto, con esta función indicamos que estamos creando una línea que es nuestra imagen aquí que está utilizando la función de creación de línea y esta línea se va a mostrar en la ventana creada a través de estas declaraciones. Pero antes de que hagamos que se requieren ciertas inicializaciones.
Y estas inicializaciones se realizan en la función init que se muestra aquí. De nuevo esta función init se usa para hacer que nuestro código se vea muy limpio, de lo contrario podríamos haberlo usado de una manera diferente y volveremos a esta función más adelante.
Por lo tanto, para mantener el código limpio y para indicar que queremos mostrar una línea en la ventana añadimos estas dos líneas init y glutDisplayFunction como se muestra aquí.
Ahora, todos están hechos pero la ventana todavía no está en la pantalla, necesitamos activarla una vez que se decida el contenido de la ventana, que lo hagamos con esta función glutMainLoop. Aquí activa todas las ventanas de visualización creadas junto con su contenido gráfico. Por lo tanto, esta función glutMainLoop realmente pone la ventana con su contenido en la pantalla.
Esta función debe ser la última en nuestro programa, pone el programa en un bucle infinito porque la pantalla que queremos constantemente. En este bucle el programa espera las entradas de los dispositivos de un dispositivo de entrada como el ratón, el teclado, incluso si no hay entrada el bucle se asegura de que la imagen se visualiza hasta que la ventana está cerrada. Por lo tanto, ya que queremos que la imagen permanezca en la pantalla a menos que haya alguna entrada o se cierre la ventana utilizamos el bucle y este bucle debe estar en la última declaración del código en main después de crear la imagen y ponerla en la ventana.
Ahora, como hemos notado, así que hemos explicado todas estas funciones que están ahí en main y todo esto comenzó con el exceso de la función de la biblioteca de glut, excepto las dos funciones init y crear línea. Ahora, en estas dos funciones utilizamos la función de la biblioteca OpenGL en lugar de las funciones de la biblioteca de glut en consecuencia su sintaxis es diferente.
Cada función OpenGL prefijada con GL como podemos ver en esta función init, así como en esta función de línea de creación. Por lo tanto, aquí cada función está empezando por este prefijo gl, indica que esta función es una función OpenGL. Cada palabra componente dentro del nombre de la función tiene la primera letra capitalizada como aquí C se capitaliza en todos los casos, ya que se puede ver Matrix M se capitaliza y así sucesivamente. Por lo tanto, es decir, la sintaxis de la función de biblioteca OpenGL comienza con gl y la palabra de componente dentro de este nombre de función tiene la primera letra en mayúsculas.
Algunas veces algunas funciones pueden requerir uno o más argumentos a los que se les asignan constantes simbólicas. Por ejemplo, un nombre de parámetro, un valor de parámetro o una modalidad determinada, todos ellos forman parte de la sintaxis de la función de biblioteca de OpenGL.
Ahora, todas estas constantes comienzan con la capital GL todo en capital. Cada componente del nombre está escrito en mayúsculas y separado por símbolo de subrayado, como hemos visto en el caso de las constantes de glut, así como el LM de subrayado RGB, el signo de subrayado del LM SUBRAYADO y el subrayado DIFUSA, donde todo está en el capital separado por el subrayado.
También las funciones de OpenGL esperan algunos tipos de datos específicos. Por ejemplo, un entero de 32 bits como valor de parámetro y estas funciones utilizan nombres de tipos de datos incorporados para ello.
Cada uno de estos nombres empieza por GL y seguido por el nombre de tipo de datos. Por ejemplo, GLbyte, GLdouble, pero este nombre de tipo de datos está en minúsculas.
Por lo tanto, esas son las sintaxis que se utilizan para utilizar las funciones de biblioteca de OpenGL. Ahora, intentemos entender estas dos funciones que hemos definido utilizando las funciones de la biblioteca OpenGL, una es init, una es crear línea. Así que, comencemos con init. Esto significa esencialmente inicializar y realizar una configuración de parámetro de tiempo. En nuestra función hemos utilizado tres rutinas de biblioteca OpenGL o funciones de biblioteca. ¿Qué hacen?
Ahora, uno es glClearColor, el primero con algún argumento, se utilizan cuatro argumentos. Se utiliza para establecer un color de fondo en nuestra ventana de visualización y este color se especifica con los componentes RGB.
Ahora, estos componentes RGB se especifican en los primeros tres argumentos en ese orden que significa que esto es R, esto es G, esto es B, con este conjunto particular de valores como todos sabemos que se obtendrá el blanco como el color de fondo, podemos establecer cualquier color de fondo. Por ejemplo, si nos ponemos todos 0, nos vamos a poner negro.
Ahora, también hay un cuarto parámetro que hemos establecido como 0.0. Ahora, esto se denomina valor alfa para el color especificado y se utiliza como parámetro de mezcla. En otras palabras, especifica la transparencia del color. Si estamos utilizando el valor 0.0 que significa que el color es totalmente transparente y 1.0 significa objetos totalmente opacos. Por lo tanto, indica transparencia.
Ahora, aquí estamos mostrando una línea que es un objeto 2D. Sin embargo, OpenGL no trata los objetos 2D por separado. Ahora, trata las fotos 2D como un caso especial de visualización en 3D. Por lo tanto, esencialmente se realizan todas las etapas de interconexión 3D.
Por lo tanto, tenemos que especificar el tipo de proyección y otros parámetros de visualización que se hace con estas dos funciones glMatrixMode, que es GL_PROJECTION y gluOrtho2D con algunos argumentos.
Ahora, esta función gluOrtho2D aquí la función tiene como prefijo GLU en lugar de GL. Por lo tanto, indica que esta función pertenece a GLU o a la utilidad OpenGL otra biblioteca auxiliar. Anteriormente hemos visto el kit de herramientas de utilidad GLUT OpenGL, ahora estamos viendo la utilidad OpenGL otra biblioteca auxiliar.
Y esta biblioteca proporciona rutinas para tareas complejas como la configuración de matrices de visualización y proyección, la descripción de objetos complejos con aproximaciones de línea y de polígono, el proceso de operaciones de representación de superficies y la visualización de splines con aproximaciones lineales, estos son algunos ejemplos de las tareas complejas que forman parte de la interconexión que se implementan en esta biblioteca auxiliar de programa de utilidad OpenGL.
Ahora, juntas estas dos funciones glMatrixMode y gluOrtho2D especifican una proyección ortogonal que se utilizará para correlacionar la línea desde el plano de vista a la pantalla. Ahora, ventana de plano de vista especificada en términos de esquina inferior izquierda y superior derecha de la ventana. Por lo tanto, estos argumentos especifican las esquinas inferior izquierda y superior derecha de la ventana y durante esta proyección cualquier cosa fuera de esta ventana se recortará como hemos discutido durante nuestra discusión de la interconexión.
Ahora, vamos a pasar a nuestra segunda función crear línea. Ahora, esta función es realmente crea la línea que queremos mostrar. La primera línea es glClear con algunos argumentos. Ahora, esta función se utiliza para mostrar la ventana con el color de fondo especificado. Ahora, los argumentos como pueden ver una constante simbólica de OpenGL indica valores de bits en color o el almacenamiento intermedio de renovación que se deben establecer en los valores de color de fondo especificados en la función glClearColor de función. Por lo tanto, esencialmente esta función indica lo que debe ser el color de fondo de la ventana de visualización.
Ahora, la función OpenGL también nos permite establecer el color del objeto con la función glColor3f. Por lo tanto, hay tres argumentos de nuevo que especifican los componentes RGB 'RGB', por lo que estas dos funciones se utilizan para establecer valores de color en el fondo, así como en el objeto.
Ahora, en la segunda función, este 3f indica que los tres componentes se especifican utilizando valores de coma flotante. En otras palabras, los valores pueden oscilar entre 0,0 y 1,0. Por lo tanto, en este caso particular estos tres valores denotan color verde.
A continuación tenemos un fragmento de código entre las dos funciones glBegin y glEnd, por lo que esto indica el segmento de línea que se debe trazar entre los puntos finales proporcionados en los argumentos. Por lo tanto, esta función esencialmente crea la línea entre estos dos puntos finales especificados con estos dos argumentos y las funciones glVertex2i llamadas dos veces.
Ahora, aquí este 2i en la función como se puede adivinar indica que los vértices se especifican por dos valores enteros que denotan las coordenadas X e Y, esto es bastante sencillo.
Ahora, el primer y segundo puntos finales se determinan en función de su orden en el código. Por lo tanto, esto siempre será tratado como el primer punto porque está apareciendo antes que el otro y este será el segundo punto. Por lo tanto, en la forma en que el código es escrito el primero y segundo puntos son determinados.
Y esta función glBegin con esta constante GL_LINES, así como la función glEnd indican que los vértices son puntos finales de línea.
Ahora, con todas estas funciones nuestro programa básico de creación de líneas está listo. Un punto a tener en cuenta aquí es que estas funciones se pueden almacenar en diferentes ubicaciones de la memoria dependiendo de la forma en que se implementa OpenGL.
Y necesitamos forzar al sistema a procesar todas estas funciones. Esto lo hacemos con la otra función glFlush como se muestra aquí. Por lo tanto, esto debería ser de nuevo la última línea de nuestro procedimiento de generación de imágenes que indica que todas estas funciones que hemos utilizado deben ser procesadas una tras otra.
Entonces, así es como podemos crear un programa usando OpenGL. Por lo tanto, en nuestro ejemplo hemos utilizado la biblioteca OpenGL en el establecimiento de lenguaje C y también hemos visto que sólo la biblioteca OpenGL no es suficiente, necesitamos algunas bibliotecas auxiliares, aquí hemos utilizado GLUT, así como las bibliotecas auxiliares GLU, GLUT es para GL Utility Toolkit que nos permite crear la ventana que es una operación dependiente de pantalla y GLU nos permite realizar otras tareas complejas que no están en la biblioteca de OpenGL.
Así que, con esto hemos llegado al final del tema. Por lo tanto, hemos aprendido varias cosas, el hardware de gráficos incluyendo la salida de entrada y la GPU, también empezamos con una arquitectura genérica de un sistema gráfico y luego hemos aprendido sobre varios IO y GPU y hoy hemos aprendido sobre el software de gráficos, cómo se crean los softwares, diferentes estándares y un programa de ejemplo con OpenGL, OpenGL se puede utilizar para escribir cualquier programa de gráficos. Ahora, con esta conferencia hemos llegado al final del curso. Por lo tanto, en la próxima conferencia resumiremos lo que hemos aprendido en este curso hasta ahora.
Lo que discuto hoy en día podemos encontrar en este libro, usted puede pasar por el capítulo 10, sección 10.4 para aprender sobre el software gráfico incluyendo el ejemplo de OpenGL. Así que, en la última conferencia resumiremos nuestro aprendizaje hasta ahora, así que les veremos en la conferencia final, hasta entonces gracias y adiós.