2012-06-06 24 views
8

Estoy tratando de aprender OpenGL. Tengo experiencia con C y C++, establezco un entorno de construcción y todo ese jazz, pero estoy tratando de descubrir un buen punto de partida.OpenGL Core y compatibilidad

Conozco la línea de función fija prominente en OpenGL < = 2.1, y parece relativamente fácil comenzar. Sin embargo, el perfil principal que OpenGL empuja en OpenGL> = 3.1 hace que quiera mantenerse alejado del FFP debido a la depreciación. Pero estoy confundido sobre cómo funciona todo en 3.1 y superior. En 2.1 y abajo tienes tu glBegin (GL_WHATEVER) y glEND() cuando estás dibujando formas. Lo primero que noté al mirar a través de la API de perfil central es que esas dos llamadas a función ya no están. Me doy cuenta de que probablemente haya un reemplazo simple, pero es bastante impactante ver algo tan (aparentemente útil) sacado de una tarea tan básica. Casi parece que desaprobaba printf() de la biblioteca estándar c. Y cuando trabajo en el libro rojo más nuevo, todavía usan el viejo código obsoleto que complica aún más mi pensamiento.

Al leer varias respuestas a preguntas similares veo el típico "basado en sombreado" o "todo está hecho con sombreadores", etc. Si quiero dibujar un simple cuadrado blanco sobre un fondo negro (el primer ejemplo en el el Libro Rojo más nuevo), no entiendo cómo un sombreador es relevante para dibujar un cuadro. ¿No deberían hacer ... bueno ... sombrear? Intenté comprar el Libro Naranja y el Libro Azul, pero no quiero gastar más dinero en algo que esconderá todo detrás de una biblioteca (el Libro Azul) o algo que va a hablar sobre la programación de un sombreador para realizar algunas tareas de iluminación en un entorno 3D (el Libro Naranja).

Entonces, ¿dónde empiezo? ¿Cómo dibujo un cuadro (o un cubo o una pirámide o lo que sea) utilizando únicamente el perfil central? No estoy pidiendo un fragmento de código aquí, estoy buscando un tutorial expansivo o un libro o algo que alguien pueda señalarme. Si esto ha sido respondido previamente y no lo encontré, por favor redirigirme.

+4

Le recomendaría que busque un buen "libro" en OpenGL moderno. Mi primera recomendación sería http://www.arcsynthesis.org/gltut/, que es en línea y gratuita. Eso debería hacerte comenzar. – Bart

+1

También puede usar la tubería programable en 2.0. La función fija es mala e ineficiente independientemente de la versión. –

+0

@CatPlusPlus Esa es la PRIMERA vez que escucho de alguien referirse a la tubería de función fija como ineficiente. :) Es posible que desee reconsiderar esa palabra.Crappy - Estoy de acuerdo con. – Ani

Respuesta

11

La razón de la repentina "complejidad" en el perfil del núcleo es el hecho de que la tubería de funcionalidad fija no era representativa de lo que la GPU realmente hace por usted. Gran parte de la funcionalidad se realizó en la CPU, y solo el dibujo real ocurrió en la GPU. El otro problema con la tubería fija es que es una batalla perdida. ¡La tubería fija tiene tantos mandos e interruptores! Entonces, no solo es dolorosamente complicado, nunca se mantendrá al ritmo de la interminable demanda de nuevas formas de dibujar escenas. Ingrese GLSL, y usted tiene la capacidad de decirle a la GPU exactamente cómo desea dibujar su escena. Esto cambia el poder para el desarrollador y libera a todos de tener que esperar por las actualizaciones de OpenGL para nuevos conmutadores/perillas.

Ahora, con respecto a su frustración con la pérdida repentina de glBegin y glEND ... hay marcos simples que imitan su comportamiento en el nuevo perfil central, y eso es algo bueno. De nuevo, cambia el poder de los desarrolladores para elegir cómo se acercan a la tubería. Sin embargo, no hay nada de malo en practicar 3D en el FFP. Primero debe aprender conceptos y matemáticas tridimensionales. Esos conceptos se aplican independientemente de la API. (Matriz matemática salvará su vida tanto en OpenGL como en Direct3D.) Entonces, primero practica con triángulos y colores simples. Luego pasas a las texturas (con coordenadas de textura). Luego agrega las normales (con iluminación). Luego, después de que comprenda todos esos conceptos, deja de usar glBegin/glEnd y comienza a agrupar grandes cantidades de datos de vértices en búferes. No entenderás glDrawElements todo bien si no entiendes glBegin/glEnd de todos modos. Por lo tanto, está bien aprender sobre esas herramientas.

+0

estoy de acuerdo, creo que el camino a seguir es leer a través de la primera edición del libro rojo (1993 creo) luego salta al último libro de naranjas o lo que sea el calor de 2015 ... bueno aprender los conceptos básicos de un momento en que opengl tenía solo 120 funciones. –

+0

Gracias por esto; es una de las mejores respuestas que he visto en mi vida. Durante mucho tiempo, me he estado preguntando sinceramente cómo toda la comunidad OpenGL parece haber perdido la cabeza: todo el mundo repitió sin pensar el mantra "la tubería fija era mala, no deberías usarla" mientras defiende una alternativa mucho más complicada con una increíble curva de aprendizaje empinada y absolutamente ninguna ventaja evidente para la gran mayoría de los usuarios. Esto es lo primero que he leído que da una idea de lo que podría ser realmente problemático sobre la tubería fija, y se obtiene una imagen general clara y sensata. –

+0

De nada. Me alegro de poder ayudar. – TheBuzzSaw