2010-12-01 3 views
14

Ich arbeite seit etwa einem Jahr mit OpenGL und habe eine Menge gelernt. Leider habe ich die alte pre 3.x-Methode, dh den unmittelbaren Modus, Standard-Shader, Matrix-Stacks usw. gelernt. Ich habe mehr oder weniger eine Vorstellung davon, was sich von damals bis heute geändert hat, indem ich mir die OpenGL-Spezifikationen ansehe Ich verstehe einige der neuen Arten, Dinge zu tun, nicht völlig.OpenGL 3.1-4.1 neue und veraltete Funktionen

Von meinem Verständnis haben sie Matrixstacks losgeworden, was bedeutet, dass Sie Ihre eigenen Transformationsmatrizen verfolgen müssen, was nicht zu kompliziert erscheint. Sie haben auch den sofortigen Modus losgeworden, was bedeutet, dass Sie jetzt VBOs oder VAOs verwenden müssen (nie wissen, welche, vielleicht beide ...), um das Pixel/Normal/Textur, etc. Informationen zum Shader-Programm. Ich verstehe nicht wirklich, wie diese Objekte funktionieren, ich denke, Sie müssen alle Informationen in sie einfügen und eine Art von Offset zur Verfügung stellen, um die Separatoren zwischen Pixel-, Normal- und Texturkoordinaten zu zeigen. Könnte jemand kurz erklären, wie das eigentlich funktioniert (oder mir einen Link schicken, der es erklärt)? Ich habe Wikipedia ausprobiert und gegoogelt, aber ich habe sie immer noch nicht verstanden.

Ein weiterer Punkt, über den ich mehr wissen möchte, sind Shader, da ich sie nie benutzt habe. Ich werde nicht fragen, wie man sie oder irgendetwas programmiert, was genau dort hineingeht und was opengl noch für dich tut. Genauer gesagt, was müssten Sie in den Shadern tun, um ein grundlegendes Rendering-Programm zu erhalten? Ich weiß, dass Sie alle Berechnungen durchführen müssen und Ihre Matrizen verwenden müssen, um die reale Eckpunktposition zu berechnen. Aber kümmert sich opengl immer noch um die Rückseitenkeulung, Zeilenbegrenzung, Polygonfüllung und andere Probleme auf niedrigerer Ebene, oder müssen Sie sie in den Shadern (oder gehören sie nicht in die Shader)?

Antwort

9

Da der direkte Modus veraltet ist, ist die Anwendung eines "Hallo Dreiecks" ein wenig komplizierter. Es ist ein gutes Tutorial auf modernen OpenGL hier:

http://arcsynthesis.org/gltut/

Sie sollten es gründlich lesen. Denken Sie daran, dass VAOs nicht verwendet werden, so dass Sie danach irgendwo anders darüber lesen müssen. VAOs ändern die Dinge nicht viel, so dass Sie die Dinge aus dem erwähnten Tutorial nicht verlernen müssen, um sie zu verwenden.

Und über Ihre zweite Frage ... Ihr Vertex Shader wird von OpenGL für jeden Vertex ausgeführt werden. Ihre Aufgabe ist es, die endgültige Position des Scheitelpunktes zu berechnen und Daten (wie Normale, Lichtdaten ...) vorzubereiten, die an den Fragment-Shader gesendet werden, vorausgesetzt die Attribute von Scheitelpunkt und anderen Daten, die Sie an Shader senden (Uniformen - Sie lesen darüber es im Tutorial). Der Fragment-Shader wird pro Fragment ausgeführt und im Fragment-Shader berechnen Sie die endgültige Farbe jedes Fragments.

Sie können hier sehen:

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

, dass Dinge wie, glPolygonMode und glCullFace sind immer noch da.

+0

Danke für die Antwort. Ich werde mir den Link definitiv ansehen, sobald ich eine Chance habe. Und ich wusste, was Echoshader tun sollten, wie in dem, was du geschrieben hast, war einfach nicht sicher, ob du entscheiden musst, was du zeichnest oder ob Opengl das für dich getan hat und du nur die Scheitelposition/Pixelfarbe brauchst du selbst (das scheint der Fall zu sein, Gott sei Dank). Sehr hilfreiche Antwort +1 – Zepee

+0

Sie sind herzlich willkommen – Bojan

+0

Ihr Link zum Tutorial ist jetzt kaputt. – Ruslan