Einrichten von OpenGL Mehrere Render-Targets

Ich habe gesehen, eine Menge material zu diesem Thema, aber es gibt einige Unterschiede zwischen den Beispielen, die ich gefunden habe, und ich habe eine harte Zeit, sich ein solides Verständnis von den richtigen Prozess. Hoffentlich kann mir jemand sagen ob ich auf dem richtigen Weg. Ich sollte auch erwähnen, ich Tue dies auf OS X Snow Leopard und der neuesten version von Xcode 3.

Für den sake des Beispiels, sagen wir mal, dass ich schreiben will zwei Ziele, eine für normale und eine für Farbe. Dazu erstelle ich einen framebuffer und binden zwei Texturen, sowie eine Tiefe textur:

glGenFramebuffersEXT(1, &mFBO);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);

glGenTextures(1, &mTexColor);
glBindTexture(GL_TEXTURE_2D, mTexColor);
//<texture params>
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTexColor, 0);

glGenTextures(1, &mTexNormal);
glBindTexture(GL_TEXTURE_2D, mTexNormal);
//<Texture params>
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, mTexNormal, 0);

glGenTextures(1, &mTexDepth);
glBindTexture(GL_TEXTURE_2D, mTexDepth);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, w, h, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, mTexDepth, 0);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)

Vor dem Rendern, würde ich binden den framebuffer und dann wieder tun:

GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT };
glDrawBuffers(2, buffers);

Dies würde bedeuten, weitere draw-calls ziehen würde, um meine framebuffer. (Ich glaube?)

Ich würde dann meine Shader und ziehen die Szene. In meiner vertex-shader würde ich Prozess normals/Positionen/Farben als üblich, und übergeben Sie die Daten an den fragment-shader. Das fragment würde dann etwas wie:

gl_FragData[0] = OutputColor;
gl_FragData[1] = OutputNormal;

Ich an dieser Stelle sollen zwei Texturen, eine mit Farben aller gerenderten Objekte und eine mit normalen. Ist all dies korrekt? Soll ich jetzt auch die Texturen, wie jede andere, die sagen, macht Sie zu einem Vollbild, quad, richtig?

InformationsquelleAutor der Frage TaylorP | 2011-08-26

Schreibe einen Kommentar