glViewPort(0,0,256,256) bei einer Textur von 256*256 Pixeln.
Zum Inititalisierungszeitpunkt weise ich den Texturen R,A->0.4 und B,G->0 zu und im Shader setze ich dann R,G->0 und B,A -> 1.0 Heraus kommt das Bild im Anhang. Ich poste einfach mal den relevanten Code ('tex' und 'fbo' springen immer zwischen 0 und 1; die Textur/Framebuffer mit selbem Index (tex oder fbo) gehören immer zusammen)
Code: glTranslatef(0,0,-1); glPushAttrib(GL_VIEWPORT_BIT); glViewport(0,0,Size,Size); //Size = 256 FPhysShader.Use; glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, partikelbuffer[tex]); glBindFramebuffer(GL_FRAMEBUFFER, partikel_framebuffer[fbo]); glDrawBuffers(1, @buffers); //Hab ich aus ner anderen Quelle, buffers beinhaltet GL_COLOR_ATTACHMENT0 glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(0,0); glTexCoord2f(0,1); glVertex2f(0,1); glTexCoord2f(1,1); glVertex2f(1,1); glTexCoord2f(1,0); glVertex2f(1,0); glEnd(); glBindFramebuffer(GL_FRAMEBUFFER, 0); //Framebuffer ausschalten TShader.KillAllShader; //Physik-Shader abschalten glPopAttrib; glClear(GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT); //Jetzt testweise rendern lassen glBindTexture(GL_TEXTURE_2D, partikelbuffer[fbo]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(-0.5,-0.5); glTexCoord2f(0,1); glVertex2f(-0.5,0.5); glTexCoord2f(1,1); glVertex2f(0.5,0.5); glTexCoord2f(1,0); glVertex2f(0.5,-0.5); glEnd(); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_FLOAT, @a); for i := 0 to Pixels-1 do //Pixels = 256*256 begin if (a[i] > 0.5) then ShowMessage(IntToStr(i)); // Wird NIE erreicht, obwohl ja das Quad teilweise blau, also die B Werte = 1 > 0.5 sind... end;
Dateianhänge: |
screen.png [22.61 KiB]
Noch nie heruntergeladen
|
|