que programacion open librerias libreria library graficas ejemplos bibliotecas opengl graphics direct3d

programacion - opengl 2019



¿Cuál es el propósito de una biblioteca de gráficos como OpenGL? (4)

Muchos videojuegos usan bibliotecas como OpenGL.

Lo primero y más importante: OpenGL no es una biblioteca por sí misma, sino una API (especificación). La API de OpenGL puede implementarse en forma de una biblioteca de software, pero en estos días es mucho más común implementar OpenGL en forma de un controlador que convierte las llamadas de función de OpenGL en comandos de control a un procesador de gráficos que se encuentra en una tarjeta gráfica (GPU).

Todos los tutoriales que he visto de tales bibliotecas demuestran cómo escribir código que le dice a la computadora que dibuje algo.

Sí. Esto se debe a que hay que dibujar cosas para hacer uso de ellas.

Lo que pasa es que en los juegos en estos días todo se modela utilizando software como Zbrush, Maya o 3ds Max.

En este punto, los modelos solo consisten en una gran lista de números y otros números que indican cómo los otros números forman algún tipo de geometría. Esos números no son una especie de imagen lista para usar.

Los modelos tienen textura y son buenos para ir.

Son un grupo de números, y lo que tienen son algunos números adicionales que controlan la textura. Las texturas mismas son a su vez solo números.

Parece que todo lo que necesitas hacer es escribir un bucle de animación que dibuje los modelos

¿Y cómo crees que va a pasar este dibujo? No hay magia "aquí tienes un modelo, muéstralo" función. Porque, por un lado, la forma en que los números que componen un modelo puede tener algún tipo de significado. Así que algún programa debe dar sentido a esos números. Y eso es un renderizador.

y actualiza repetidamente en lugar de programar realmente el código para dibujar cada pequeña cosa.

De nuevo, no hay una función mágica de "dibujar". Dibujar un modelo implica repasar cada uno de sus números, consiste en, y convertirlos en comandos de dibujo a la GPU.

Eso requeriría mucho tiempo y haría a los modelos inútiles.

Cómo son inútiles los modelos, cuando son lo que controla la emisión de comandos a OpenGL. ¿O crees que OpenGL se usa para "crear" modelos?

Entonces, ¿dónde entran OpenGL o Direct 3D en relación con los videojuegos y el arte en 3D?

Se utiliza para convertir los números en un modelo 3D, ya que se guarda lejos de un modelador, en algo agradable a la vista.

¿Qué es tan crucial cuando ya se han creado todos los gráficos?

Los gráficos aún no se crean, cuando el modelo está hecho. Lo que se crea es un modelo y algunos datos auxiliares en forma de texturas y sombreados, que luego se convierten en gráficos en tiempo real, en el momento de la ejecución del programa.

¿Y solo hay que cargar y dibujar?

Nuevamente, después de ser cargado, un modelo es solo un grupo de números. Y dibujar significa, convertir esos números en algo para mirar, lo que requiere enviar comandos de dibujo al procesador de gráficos (GPU), lo que sucede utilizando una API como OpenGL o Direct3D.

¿Se utilizan principalmente para sombreadores y efectos?

Se utilizan para convertir los números generados por un programa de modelado 3D (Blender, Maya, ZBrush) en una imagen real.

Me doy cuenta de que esta es probablemente una pregunta ridícula, pero antes de tratar de averiguar qué bibliotecas usar para qué proyectos, creo que tiene sentido entender primero el propósito de dichas bibliotecas.

Muchos videojuegos usan bibliotecas como OpenGL. Todos los tutoriales que he visto de tales bibliotecas demuestran cómo escribir código que le dice a la computadora que dibuje algo. Lo que pasa es que en los juegos en estos días todo se modela utilizando software como Zbrush, Maya o 3ds Max. Los modelos tienen textura y son buenos para ir. Parece que todo lo que necesitas hacer es escribir un ciclo de animación que dibuje los modelos y las actualizaciones repetidamente en lugar de programar el código para que dibuje cada cosa. Eso requeriría mucho tiempo y haría a los modelos inútiles. Entonces, ¿dónde entran OpenGL o Direct 3D en relación con los videojuegos y el arte en 3D? ¿Qué es tan importante cuando ya se han creado todos los gráficos y solo hay que cargarlos y dibujarlos? ¿Se utilizan principalmente para sombreadores y efectos?

Esta pregunta puede demostrar lo nueva que soy para esto, pero es una pregunta que nunca había escuchado. Estoy empezando a aprender programación y entiendo bastante bien el código y la lógica, pero no entiendo en absoluto las bibliotecas de gráficos o ciertos marcos y los tutoriales no ayudan.


Parece que todo lo que necesitas hacer es escribir un ciclo de animación que dibuje los modelos y las actualizaciones repetidamente en lugar de programar el código para que dibuje cada cosa.

Todo lo que sucede en una computadora lo hace porque un programa de alguna forma le dice exactamente qué hacer . Las letras de las que está compuesto este mensaje solo aparecen porque el navegador de su elección descargó este archivo a través de TCP / IP a través de un protocolo HTTP, descodificó su texto codificado en UTF-8, interpretó ese texto como lo define el XML, HTML, JavaScript. , y así sucesivamente, y luego muestra la parte visible según lo define el estándar de Unicode para el diseño del texto y de acuerdo con HTML y otros, utilizando las capacidades de visualización y ventanas de su sistema operativo o administrador de ventanas o lo que sea.

Cada parte de esa operación, desde la descarga del archivo hasta su visualización, se rige por un código. Cada píxel que está mirando en la pantalla está donde está porque algún código lo puso allí.

HTML solo no significa nada No puedes simplemente tomar un archivo HTML y enviarlo a la pantalla. Algún código debe interpretarlo . Puedes interpretar HTML como un archivo de texto, pero si lo haces, pierde todo el formato y puedes ver todas las etiquetas. Un navegador web puede interpretarlo como HTML apropiado, en cuyo caso puede ver el formato. Pero en todos los casos, el significado del archivo HTML está determinado por la forma en que se utiliza .

La parte de "dibuja el modelo" de su algoritmo propuesto debe ser realizada por alguien . Si no escribe ese código, entonces debe usar una biblioteca o algún otro sistema que haga que aparezca el modelo. ¿Y qué hace esa biblioteca? ¿Cómo hace que aparezca el modelo?

Un modelo, como una página web HTML, no tiene sentido por sí mismo . O para decirlo de otra manera, su algoritmo puede reducirse a esto:

  1. Animar el modelo.
  2. ????
  3. ¡Lucro!

Le falta un componente clave: cómo interpretar realmente el modelo y hacer que aparezca en la pantalla. OpenGL / D3D / a rasterizador de software / etc es vital para esa tarea.


Antes de OpenGL y DirectX, los juegos tenían que usar instrucciones especiales dependiendo de la tarjeta gráfica que tuvieras. Cuando compró un juego nuevo, tenía que comprobar cuidadosamente si su tarjeta era compatible o no podría usar el juego.

OpenGL y DirectX es una API estandarizada para las tarjetas gráficas. Una biblioteca es entregada por el fabricante de la tarjeta. Si siguen la especificación, tiene la garantía de que los juegos funcionarán (si también siguen la misma especificación).


Tienes datos. Como un modelo, con vértices, normales y texturas. Como @datenwolf dijo anteriormente, esos son solo números que se encuentran en el disco duro o en la memoria RAM, no colores en la pantalla.

Su CPU (que es donde se ejecuta el programa que escribe) no puede hablar directamente con la pantalla. En su lugar, envía los datos que desea dibujar a la GPU. La GPU luego dibuja los datos. Las API de gráficos como OpenGL y Direct3D permiten que los programas que se ejecutan en la CPU envíen datos a la GPU y personalicen cómo la GPU la dibuja. Esta es una simplificación general, pero parece que solo necesita una descripción general.

En última instancia, cada programa de gráficos debe pasar por una API de gráficos. Cuando dibuja una imagen, por ejemplo, envía a la GPU la imagen y la GPU la dibuja en la pantalla. Dibujar un texto? Enviar los datos a la GPU. La GPU lo dibuja. Recuerda, tu código no puede hablar a la pantalla. PUEDE hablar con la GPU a través de OpenGL o Direct3D, y la GPU luego dibuja los datos.