Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 12:35

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glCopyTexSubImage2D alles gespiegelt
BeitragVerfasst: Fr Nov 14, 2008 17:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
ich benutze

Code:
  1. glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,1024-FTexture.Height,FTexture.Width,FTexture.Height);


und um die texture zu zeichnen

Code:
  1.  
  2. glBegin(GL_QUADS);
  3.   glTexCoord2f(0, 0); glVertex2f(0, 0);
  4.   glTexCoord2f(1, 0); glVertex2f(FTexture.Width, 0);
  5.   glTexCoord2f(1, 1); glVertex2f(FTexture.Width, FTexture.Height);
  6.   glTexCoord2f(0, 1); glVertex2f(0, FTexture.Height);
  7. glEnd;
  8.  


Ist es nomal das ich fogendes Ergebnis erhalte? Wenn ja was wäre die eleganteste Möglichkeit dies zu ändern??

Das ganze einfach wiefolgt zu zeichenen wäre etwas unbefridigend da ich die Position der einzelnen Zeichen richtig herum speichere...
Code:
  1.  
  2. glBegin(GL_QUADS);
  3.   glTexCoord2f(0, 1); glVertex2f(0, 0);
  4.   glTexCoord2f(1, 1); glVertex2f(FTexture.Width, 0);
  5.   glTexCoord2f(1, 0); glVertex2f(FTexture.Width, FTexture.Height);
  6.   glTexCoord2f(0, 0); glVertex2f(0, FTexture.Height);
  7. glEnd;
  8.  


Ich entschuldige mich wenn ich hier gerade absoluten Schwachsinn poste bin aber heute nicht wirklich auf der Höhe...

mfg FrenK


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo FrenK
Die Texturkoordinaten sehen OK aus. Vermutlich hängt es an den Einstellungen in glOrtho. Wenn Du so arbeitest, dass der Koordinatenursprung oben links ist (was ich aus dem Vertex schließe) dann sollte die Einstellung in glOrtho so aussehen: glOrtho(0,ViewPort[2],ViewPort[3],0,+1,-1);

Noch etwas fällt mir auf: das Viereck ist rechtsherum definiert. Normalerweise sollten die OpenGL-Primitiven links herum definiert sein. Scheint aber hier nicht wichtig zu sein,
Traude


EDIT: Ich meine das so (bin heute auch nicht so gut drauf :wink::

Code:
  1. glBegin(GL_QUADS);
  2.   glTexCoord2f(0, 0); glVertex2f(0, 0);
  3.   glTexCoord2f(0, 1); glVertex2f(0, FTexture.Height);
  4.   glTexCoord2f(1, 1); glVertex2f(FTexture.Width, FTexture.Height);
  5.   glTexCoord2f(1, 0); glVertex2f(FTexture.Width, 0);
  6. glEnd;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 20:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
glOrtho siht bei mir so aus von daher sollte das eigentlich stimmen
Code:
  1. glOrtho(0, 1280, 1024, 0, 1, -1)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 20:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Dann fällt mir nur noch der Texture Loader ein. Vielleicht lädt der Loader das Bild falsch herum?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 15, 2008 12:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Ich benutze keinen loder, das ist kein bmp oder so. Die Zeichen werden einmal zur laufzeit gerendert und dann in der Texture mit glCopy... gespeichert von dher muss das Problem irgendwo beim übertragen in die Texture liegen da wie man oben sieht die Zeichen ursprünglich richtig herum sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 15, 2008 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich wiederhole nochmal:
Du hast ein Bild auf dem Bildschirm, das richtig angezeigt wird. Dann benutzt Du

glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,1024-FTexture.Height,FTexture.Width,FTexture.Height);

um das Bild in eine Textur zu kopieren. Die Textur wird verkehrt angzeigt (oben und unten ist vertauscht).

Ich gehe jetzt mal ganz logisch vor. OpenGL hat normalerweise ein Koordinatensystem, dessen Y-Achse, wie in der Mathematik nach unten zu kleinere Zahlen hat und nach oben zu größere (soll heißen der Ursprung ist UNTEN links; aber eigentlich stimmt auch das nicht, der Ursprung ist dort, wo man ihn hinsetzt). Du hast es aber mittels glOrtho eingestellt wie in Windows: der Koordinatenursprung ist OBEN links. Ist ja auch die Standardeinstellung für den "Orthonormalbetrieb".

Für die Parameter x,y bei glCopyTexSubImage2D heißt es in der Originalspezifikation:
Zitat:
"Specify the window coordinates of the lower left corner of the rectangular region of pixels to be copied."

Auf deutsch: "Gibt die Fensterkoordinaten der linken unteren Ecke des rechteckigen Bereiches der zu kopierenden Pixel an."
(ich zitiere hier absichtlich die Original-Spezifikation und nicht unser WIKI, denn dort steht m.E. etwas, was aussieht als wenn es von der Spezifikation von glCopyTexSubImage1D kopiert worden wäre).

Jetzt haben wir aber oben und unten vertauscht mittels glOrtho.

Ich schlage daher vor, dass Du mal im glCopyTexSubImage2D für x,y die Parameter 0,0 eingibst. Bitte sei so nett und gib Bescheid, ob das jetzt die richtige Lösung ist oder nicht.


@Flash: Ich seh mir mal die ganzen glCopyTexImage.... Beschreibungen an. Aber erst morgen.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 16, 2008 10:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Dann bleibt die Texture schwartz da sich im bereich von (0,0) -> (width,height) nix befidet...
Das Problem ist ja das ich praktisch wie in der Spezifikation die Ecke unten links angebe und dann um width/height nach oben gehe er je doche die erste Zeile von der Ecke aus "oben" in der Texture ablegt und nicht unten wenn man das so weiterführt passt das erhaltenen Ergebnis ja schon.
Die frage die nun aufkommt ist aber wie bekomme ich es hin dass er wenn er von unten links ausgeht auch unten links in die Texture schreibt??


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 17, 2008 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich habe mir mal so ein Programm gebastelt. Folgendes habe ich gemacht:

1. Lossys glBitmap verwendet und zwei Texturen damit geladen.
Eine Textur war eine Texture-Font (siehe unten), und die zweite war eine Art Wassertextur; gleiche Größe, gleiches Pixelformat: 256X256, 24bpp. Lossy ist dafür bekannt, dass er großen Wert darauf legt, den Koordinatenursprung immer oben links anzusetzen.

2. Den Orthomodus so eingestellt:
Code:
  1. glOrtho(0,OGLPanel.Width,OGLPanel.Height,0,+1,-1);

Bei dieser Einstellung ist der Koordinatenursprung oben links.

3. Das Quad, auf dem die Textur liegt, geht von der Annahme aus, dass der Koordintenursprung oben links ist:
Code:
  1.    glBegin(GL_QUADS);
  2.       glTexCoord2f(0,0); glVertex2f(0,0);
  3.       glTexCoord2f(0,1); glVertex2f(0,OGLPanel.Height);
  4.       glTexCoord2f(1,1); glVertex2f(OGLPanel.Width,OGLPanel.Height);
  5.       glTexCoord2f(1,0); glVertex2f(OGLPanel.Width,0);
  6.    glEnd;


4.Dann habe ich einen Teil der Font-Textur richtig herum in die Wassertextur kopiert (auch glCopyTexSubImage2D kann jetzt davon ausgehen, dass der Koordinatenursprung oben links ist):

Code:
  1.    glCopyTexSubImage2D(GL_TEXTURE_2D,0,
  2.         50,50,    // Linke obere Ecke der Textur
  3.         0,0,       // Linke obere Ecke des kopierten Bereiches
  4.         128,128);   // Breite/Höhe des kopierten Bereiches


Das Bild der ersten Textur und des Ergebnisses habe ich unten angehängt.
Traude


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 18, 2008 20:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Fällt irgenjemand ein welchen Grund es geben könnte?? Ich bin ein wenig ratlos...wenn niemand mehr was einfällt werd ich wohl den Code posten müssen :(


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]