Hoe beeld BACK van OpenGL te laden?

Ik ben erin geslaagd om een ​​afbeelding naar OpenGL te laden als een textuur (ik gebruik Gdk :: Pixbuf van de GTKmm-bibliotheek), maar ik heb geen idee hoe ik een aangepast beeld van OpenGL kan krijgen en het in Gdk :: Pixbuf ...

Ik wil afbeeldingen in OpenGL aanpassen en ze opslaan op de harde schijf.

Er is een code:

Glib::RefPtr pixmap = Gdk::Pixbuf::create_from_file("image.jpg");
GLuint texture[1];
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pixmap->get_width(), pixmap->get_height(), 0,      GL_RGB, GL_UNSIGNED_BYTE, pixmap->get_pixels() );
4
Welkom bij StackOverflow, ik hoop dat je de Veelgestelde vragen hebt gelezen.
toegevoegd de auteur Christian Rau, de bron

3 antwoord

Zolang u OpenGL ES niet gebruikt, maar echte OpenGL-desktop, kunt u glGetTexImage .

4
toegevoegd

Geef getextureerde quad aan de framebuffer en vervolgens glReadPixels() .

4
toegevoegd
@Damon De textuurgegevens kunnen worden gewijzigd door render-to-texture te gebruiken, d.w.z. rendering naar een framebuffer met een bijgevoegde textuur. Het lezen van de textuurgegevens is daarom in sommige gevallen logisch.
toegevoegd de auteur Gigo, de bron
Omdat hij OpenGL ES niet heeft getagd, is het tekenen van een getextureerde quad geen goed alternatief voor het gebruik van glGetTexImage .
toegevoegd de auteur Christian Rau, de bron
@Damon Misschien.
toegevoegd de auteur Christian Rau, de bron
@ChristianRau: Maar sinds het OP zei "wil je afbeeldingen in OpenGL wijzigen", is glGetTexImage waarschijnlijk niet wat je zoekt, omdat het alleen de texture-afbeelding leest die eerder is geüpload (dit is een van de functies die ik nooit heb begrepen waarom ze bestaan). Om iets "aangepast" terug te lezen, is er iets nodig als het tekenen van een getextureerde quad (met een soort "bewerking", waarschijnlijk een arcering), zoals genpfault suggereerde.
toegevoegd de auteur Damon, de bron
@Gigo: Misschien is het moeilijk te zeggen, omdat we niet weten wat precies het OP wil ("wijzigen" is niet erg concreet). Natuurlijk kun je b. teken wat geometrie bovenop een bestaande afbeelding, dat is prima. Maar het gebruikelijke idee van "een afbeelding aanpassen" is iets anders, het betekent normaal gesproken het lezen van de afbeelding en het toepassen van een soort van convolutie of zo. Het lezen en schrijven naar dezelfde afbeelding is ongedefinieerd (behalve atomaire ops gebruiken, die traag zijn of expicit-synchronisatie gebruiken met een leveranciersextensie). Dat betekent meestal dat je een andere structuur wilt lezen, niet dezelfde.
toegevoegd de auteur Damon, de bron

Als u de tekenoproep wilt vermijden, kunt u een framebuffer maken en de textuur aan een kleurbijlage koppelen en vervolgens glReadPixels gebruiken

0
toegevoegd