2010-12-01 54 views
14

Je travaille avec OpenGL depuis environ un an et j'ai appris beaucoup de choses. Malheureusement, la façon dont je l'ai appris était l'ancienne méthode pre 3.x, c'est-à-dire le mode immédiat, les shaders par défaut, les matrices, etc. J'ai plus ou moins une idée de ce qui a changé depuis. Je ne comprends pas totalement certaines des nouvelles façons de faire les choses. D'après ce que j'ai compris, ils se sont débarrassés des piles matricielles, ce qui signifie que vous devez garder une trace de vos propres matrices de transformation, ce qui ne semble pas trop compliqué. Ils se sont également débarrassés du mode immédiat, ce qui signifie que vous devez maintenant utiliser des VBO ou des VAO (ne jamais savoir lequel, peut-être les deux ...) pour envoyer le pixel/normal/texture, etc. informations au programme de shader. Je ne comprends pas vraiment la façon dont ces objets fonctionnent, je pense que vous devez y mettre toutes les informations, et fournir une sorte de n'importe quel type pour montrer les séparateurs entre les coordonnées de pixel, normales et de texture. Quelqu'un pourrait-il expliquer brièvement comment cela fonctionne réellement (ou m'envoyer un lien qui l'explique)? J'ai essayé wikipedia et googling, mais je me suis retrouvé encore pas tout à fait les comprendre.Fonctionnalités OpenGL 3.1-4.1 nouvelles et obsolètes

Un autre point sur lequel j'aimerais en savoir plus est celui des shaders, car je ne les ai jamais utilisés. Je ne vais pas demander comment les coder ou quoi que ce soit, juste ce qu'il faut y aller et ce que opengl fait encore pour vous. Plus précisément, que devez-vous faire dans les shaders pour obtenir un programme de rendu de base? Je sais que vous devez faire tous les calculs de ligthing et utiliser vos matrices pour calculer la position réelle du vertex. Mais opengl s'occupe-t-il encore de l'élimination de la face arrière, de l'écrêtage, du remplissage des polygones et d'autres problèmes de niveau inférieur, ou devez-vous les coder dans les shaders (ou n'appartiennent-ils pas aux shaders)?

Répondre

9

Étant donné que le mode immédiat est déconseillé, une application «triangle bonjour» est un peu plus complexe. Il y a un bon tutoriel sur OpenGL moderne ici:

http://arcsynthesis.org/gltut/

Vous devriez le lire attentivement. Gardez à l'esprit qu'il n'utilise pas d'objets VAO, vous devrez donc en prendre connaissance ailleurs. Les VAO ne changent pas grand chose, donc vous n'aurez pas à désapprendre les choses du tutoriel mentionné pour les utiliser.

Et à propos de votre deuxième question ... Votre vertex shader sera exécuté par OpenGL pour chaque sommet. Votre travail consiste à calculer la position finale du vertex et à préparer les données (comme les normales, les données de lumière ...) à envoyer au fragment shader, étant donné les attributs du vertex et d'autres données que vous envoyez au shader (uniformes - vous lirez dans le tutoriel). Le fragment shader sera exécuté par fragment et dans fragment shader vous calculez la couleur finale de chaque fragment.

Vous pouvez voir ici:

http://www.opengl.org/sdk/docs/man4/

que des choses comme, glPolygonMode et glCullFace sont toujours là.

+0

Merci pour la réponse. Je vais certainement jeter un coup d'oeil à ce lien une fois que j'ai une chance. Et je savais ce que devrait faire ech shader, comme dans ce que vous avez écrit, je ne savais pas si vous deviez décider de ce que vous deviez dessiner ou si opengl le faisait toujours pour vous et tout ce que vous deviez faire était la position du vertex/pixel vous-même (ce qui semble être le cas, dieu merci). Très utile réponse +1 – Zepee

+0

Vous êtes les bienvenus – Bojan

+0

Votre lien vers le tutoriel est maintenant cassé. – Ruslan