Quelqu'un peut-il suggérer un guide pour apprendre le profil de base d'OpenGL 3.2?OpenGL 3.2 Guide du profil de base
Le SDK est difficile à lire, et la plupart des guides que j'ai vus n'enseignaient que l'ancienne méthode.
Quelqu'un peut-il suggérer un guide pour apprendre le profil de base d'OpenGL 3.2?OpenGL 3.2 Guide du profil de base
Le SDK est difficile à lire, et la plupart des guides que j'ai vus n'enseignaient que l'ancienne méthode.
Je ne sais pas bon guide mais je peux vous faire un résumé rapide
Je suppose que vous êtes déjà familier avec les bases de shaders, des tampons de sommets, etc. Si vous ne le faites pas, Je vous suggère de lire un guide sur les shaders d'abord au lieu, parce que tout OpenGL 3 est basé sur l'utilisation des shaders
a l'initialisation:
Créer et remplir des tampons sommet à l'aide glGenBuffers
, glBindBuffer(GL_ARRAY_BUFFER, bufferID)
et glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)
même pour les tampons d'index, sauf que vous utilisez GL_ELEMENT_ARRAY_BUFFER
au lieu de GL_ARRAY_BUFFER
créer des textures exactement comme vous l'avez fait dans les versions précédentes d'OpenGL (glGenTextures
, glBindTexture
, glTexImage2D
)
Créer des shaders à l'aide glCreateShader
, définissez leur code source GLSL en utilisant glShaderSource
et compilez-les avec glCompileShader
; vous pouvez vérifier si elle a réussi avec glGetShaderiv(shader, GL_COMPILE_STATUS, &out)
et récupérer des messages d'erreur en utilisant glGetShaderInfoLog
Créer des programmes (ie. un groupe de shaders liés ensemble, habituellement un vertex shader et un fragment shader) avec glCreateProgram
, se lient alors les shaders que vous voulez à l'aide glAttachShader
, puis lien le programme utilisant glLinkProgram
; comme shaders vous pouvez vérifier lier le succès avec glGetProgram
et glGetProgramInfoLog
Lorsque vous voulez dessiner:
Bind les tampons de sommet et de l'index à l'aide glBindBuffer
avec des arguments GL_ARRAY_BUFFER
et GL_ELEMENT_ARRAY_BUFFER
respectivement
Lier le programme avec glUseProgram
Maintenant, pour chaque variable variable dans vos shaders, vous devez appeler glVertexAttribPointer
dont la syntaxe est similaire à l'ancienne glVertexPointer
, glColorPointer
, etc.fonctions, à l'exception de son premier paramètre qui est un identifiant pour le variant; cet identificateur peut être récupéré en appelant glGetAttribLocation
sur un programme lié
Pour chaque variable uniforme dans vos shaders, vous devez appeler glUniform
; son premier paramètre est l'emplacement (également une sorte d'identifiant) de la variable uniforme, que vous pouvez récupérer en appelant glGetUniformLocation
(attention: si vous avez un tableau nommé "a", vous devez appeler la fonction avec "a [0] «)
pour chaque texture que vous voulez lier, vous devez appeler glActiveTexture
avec GL_TEXTUREi
(i étant différent pour chaque texture), puis glBindTexture
puis définir la valeur de l'uniforme i
Appel glDrawElements
Thi s est les choses de base que vous devez faire.
D'autres domaines, tels que la sélection, le blending, les viewports, etc. sont restés essentiellement les mêmes que dans les anciennes versions d'OpenGL
Je vous suggère également d'étudier this demo program (qui utilise des objets de tableau de sommet). Le fichier le plus intéressant est main.cpp
Hope this peut aider
L'un des meilleurs OpenGL moderne (noyau 3.2+) « courts résumés » J'ai vu dans un certain temps. Cela aura probablement encore plus de sens en venant de 1.x/2.x et en essayant de se mettre à jour grâce à de nouveaux tutoriels. Bon comme une carte mentale. – Aktau
Une chose qui m'a fait trébucher, c'est que vous devez utiliser VAO et VBO pour dessiner. Sinon, vous obtiendrez GL_INVALID_OPERATION lors de l'appel de glVertexAttribPointer. Au moins, c'était le cas sur Mac OS X. – YRH