2010-09-19 12 views
8

¿Alguien puede sugerir una guía para aprender el perfil de núcleo de OpenGL 3.2?OpenGL 3.2 Core Profile Guide

El SDK es difícil de leer, y la mayoría de las guías que he visto solo enseñan el método anterior.

Respuesta

28

no sé cualquier buena guía pero puedo hacer un resumen rápido

Vamos a suponer que usted ya está familiarizado con los conceptos básicos de los sombreadores de vértices, tampones, etc. Si no lo hace, le sugiero que lea una guía sobre shaders primer lugar, porque todo OpenGL 3 se basa en el uso de shaders

en la inicialización:

  • Crear y llenar buffers de vértices usando glGenBuffers, glBindBuffer(GL_ARRAY_BUFFER, bufferID) y glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)

  • Lo mismo para los búferes de índice, excepto que se utiliza GL_ELEMENT_ARRAY_BUFFER en lugar de GL_ARRAY_BUFFER

  • Crear texturas exactamente igual que se hacía en versiones anteriores de OpenGL (glGenTextures, glBindTexture, glTexImage2D)

  • Crea shaders utilizando glCreateShader, establezca su código fuente GLSL usando glShaderSource, y compílelos con glCompileShader; se puede comprobar si tenía éxito con glGetShaderiv(shader, GL_COMPILE_STATUS, &out) y recuperar mensajes de error utilizando glGetShaderInfoLog

  • programas crean (es decir. un grupo de shaders unidas entre sí, por lo general un vertex shader y uno fragment shader) con glCreateProgram, a continuación, se unen los shaders que desea realizar con glAttachShader, luego enlace el programa que usa glLinkProgram; al igual que los shaders se puede comprobar la vinculación de éxito con glGetProgram y glGetProgramInfoLog

Cuando se desea dibujar:

  • obligar a la cima y del índice de tampones que usan glBindBuffer con argumentos GL_ARRAY_BUFFER y GL_ELEMENT_ARRAY_BUFFER respectivamente

  • Enlazar el programa con glUseProgram

  • Ahora, para cada variable variable en sus sombreadores, debe llamar al glVertexAttribPointer, cuya sintaxis es similar al legado glVertexPointer, glColorPointer, etc.funciones, a excepción de su primer parámetro que es un identificador para la variación; este identificador se puede recuperar llamando al glGetAttribLocation en un programa vinculado

  • Para cada variable uniforme en sus sombreadores, debe llamar al glUniform; su primer parámetro es la ubicación (también un tipo de identificador) de la variable uniforme, que puede recuperar llamando al glGetUniformLocation (advertencia: si tiene una matriz llamada "a", debe llamar a la función con "a [0] ")

  • para cada textura que desea enlazar, usted tiene que llamar glActiveTexture con GL_TEXTUREi (i ser diferente para cada textura), entonces glBindTexture y luego ajustar el valor del uniforme a lo

  • Call glDrawElements

Thi s es lo básico que tienes que hacer. Por supuesto, hay otras cosas, como objetos de matriz de vértices, búferes uniformes, etc. pero solo son para fines de optimización

Otros dominios como el descarte, combinación, ventanas gráficas, etc. se mantuvieron casi igual que en las versiones anteriores de OpenGL

También sugiero que estudie this demo program (que usa objetos de matriz de vértices). El archivo más interesante es main.cpp

Esperamos que esto pueda ayudar a

+0

Uno de los mejores OpenGL moderna (núcleo 3.2+) "breves resúmenes" que he visto en mucho tiempo. Probablemente tenga aún más sentido cuando provenga de 1.x/2.x e intente actualizarse a través de tutoriales más nuevos. Bueno como un mapa mental. – Aktau

+2

Una cosa que me hizo tropezar fue que debes usar VAO y VBO para dibujar. De lo contrario, obtendrás GL_INVALID_OPERATION cuando llames a glVertexAttribPointer. Al menos ese fue el caso en Mac OS X. – YRH