¿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.
¿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.
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
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
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