Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

22.06.2010, 18:07

glPixelStorei(GL_PACK_INVERT_MESA, GL_TRUE) -> Variante für glCopyTexSubImage2D

Hallo,
eben gerade habe ich gesehen, dass man mit dem folgenden Funktionsaufruf in OpenGL die Pixel Daten, die mit glReadPixels ermittelt wurde,
vertikal flippen kann:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
unsigned char* PixelBuffer = new unsigned char[ScreenWidth * ScreenHeight * 3];

// Hier mit kann man die Pixel durch glReadPixels gelesenen Pixel Daten vertikal spiegeln.
// Vermutlich GPU beschleunigt - hoffentlich :-)
glPixelStorei(GL_PACK_INVERT_MESA, GL_TRUE);

glReadPixels(0, 0, ScreenWidth, ScreenHeight, GL_RGB, UNSIGNED_BYTE, PixelBuffer);

delete [] PixelBuffer;

Kann mir jemand sagen, ob es eine ähnliche Funktion bzw. Variante für glCopyTexSubImage2D und FrameBufferObjects gibt?
Das ist nämlich eines der wenigen Dinge, die mich an OpenGL wirklich stören, dass das Koordinaten System auf der Y-Achse gespiegelt ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

22.06.2010, 18:34

Render halt einfach verkehrt rum in deine Textur? Abgesehen davon: So sind die Dinge nunmal in OpenGL, kann man nix machen. Ich finde jedenfalls nicht dass man zusätzlichen Overhead in Kauf nehmen sollte nur weil man eine bestimmte Konvention gern anders rum hätte...

kiba

Alter Hase

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

3

24.06.2010, 16:20

vll sollstest du mal die Rechnung versuchen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
GLint viewport[4] = {0};
glGetIntegerv(GL_VIEWPORT, viewport);

GLint left = x;
//GLint top = y;
GLint right = x+width;
GLint bottom = y+height;

// translate from top left to bottom left coordinate system
glReadPixels(left, viewport[3] - bottom, right - left, bottom,GL_RGB, UNSIGNED_BYTE, PixelBuffer);

Hier geht er jetzt von der größe des Viewports aus , weiß jetzt nich ob der glReadPixels von der Viewport Position aus geht.

Werbeanzeige