2010-09-19 6 views
8

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.

Répondre

28

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

+0

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

+2

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

Questions connexes