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

Aktuelle Zeit: Sa Jul 05, 2025 08:48

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturen verdreht mit glOrtho
BeitragVerfasst: Mi Aug 21, 2013 10:27 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Hallo Ihr alle,

Ich dachte ich hätte mittlerweile ein bischen Erfahrung mit OpenGL und dennoch scheine ich an einer ziemlich blöden, wahrscheinlich einfachen Sache zu scheitern. Nämlich der Anzeige einer Textur in 2d. Die Textur wird zwar angezeigt, jedoch komplett verdreht. Ich dachte dies liegt an den Texturkoordinaten, jedoch weiss ich nicht wirklich was ich dort falsch mache. Ich habe noch das Bild angehangen. Sieht irgendwie wie auf der Hälfte gespiegelt aus.
Ich danke schon mal im vorraus für die Hilfe. Achja ich habe schon eine ganze Weile gesucht und nichts gefunden was mir helfen könnte.

Hier ist mein Quelltext:

Code:
  1.  
  2. //Initialisierung der Textur
  3. function TMain.InitializeTexture(const aTexture: TByte1dArray): integer;
  4. begin
  5.    glGenTextures(1,@result);
  6.    glBindTexture(GL_TEXTURE_2D,result);
  7.  
  8.     // set the texture parameters
  9.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  10.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  11.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  12.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  13.    glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,FTextureWidth,FTextureHeight,0,GL_RGB,GL_UNSIGNED_BYTE,@atexture[0]);
  14. end;
  15.  
  16. //Quad  zeichnen
  17. procedure DrawQuad(pX, pY, pZ, pWidth, pHeight : Single);
  18. begin
  19.    glBegin(GL_QUADS);
  20.       glTexCoord2f(0,0); glVertex3f(pX-pWidth/2, pY-pHeight/2, -pZ);
  21.       glTexCoord2f(1,0); glVertex3f(pX+pWidth/2, pY-pHeight/2, -pZ);
  22.       glTexCoord2f(1,1); glVertex3f(pX+pWidth/2, pY+pHeight/2, -pZ);
  23.       glTexCoord2f(0,1); glVertex3f(pX-pWidth/2, pY+pHeight/2, -pZ);
  24.    glEnd;
  25. end;
  26.  
  27. //Textur laden
  28. procedure TMain.LoadTexture(aGraphic:TGraphic);
  29. var Size : integer;
  30.     i,k,ix,iy,iz    : integer;
  31.     tmpcounter : integer;
  32.     aTexture:TByte1dArray;
  33. begin
  34.    FTextureWidth:=aGraphic.Width;
  35.    FTextureHeight:=aGraphic.Height;
  36.    setlength(aTexture,aGraphic.Width*aGraphic.Height*3);
  37.    tmpcounter := 0;
  38.    i:=0;
  39.    for iy := 0 to aGraphic.Height-1 do
  40.       for ix:=0 to aGraphic.Width-1 do
  41.       begin
  42.          aTexture[i]:=GetRValue(aGraphic.Pixels[ix,iy]);
  43.          inc(i);
  44.          aTexture[i]:=GetGValue(aGraphic.Pixels[ix,iy]);
  45.          inc(i);
  46.          aTexture[i]:=GetBValue(aGraphic.Pixels[ix,iy]);
  47.          inc(i);
  48.       end;
  49.    FTextureID:=InitializeTexture(aTexture);
  50. end;
  51.  
  52. //Und meine Renderfunktion
  53. procedure Main.Render;
  54. begin
  55.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  56.  
  57.    glMatrixMode (GL_PROJECTION);
  58.    glLoadIdentity();
  59.    glViewport(0,0,Fwidth,Fheight);
  60.    glOrtho (0, Fwidth, 0, FHeight, 0, 1);
  61.    glMatrixMode(GL_MODELVIEW);
  62.  
  63.    glBindTexture(GL_TEXTURE_2D,FTextureId);
  64.    glBegin(GL_Quads);
  65.       glTexCoord2f(0,0);glVertex2f(0,FTextureHeight);
  66.       glTexCoord2f(1,0);glVertex2f(FtextureWidth,FTextureHeight);
  67.       glTexCoord2f(1,1);glVertex2f(FTextureWidth,0);
  68.       glTexCoord2f(0,1);glVertex2f(0,0);
  69.     glEnd;
  70.     SwapBuffers(FDC);
  71. end;
  72.  
  73.  


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen verdreht mit glOrtho
BeitragVerfasst: Mi Aug 21, 2013 10:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Wenn ich nichts übersehen habe geht der sichtbare Screen von 0 bis fWidth (X) bzw. fHeight (Y). Dabei kannst du die Texturkoordinaten genau wie die Vertexkoordinaten behandeln. Also, alles was bei Vertex 0 ist muss auch bei den Texturkoordinaten zu 0 gesetzt werden.
Code:
  1.  
  2.   glTexCoord2f(0,1); glVertex2f(0,FTextureHeight);
  3.   glTexCoord2f(1,1); glVertex2f(FtextureWidth,FTextureHeight);
  4.   glTexCoord2f(1,0); glVertex2f(FTextureWidth,0);
  5.   glTexCoord2f(0,0); glVertex2f(0,0);
  6.  

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen verdreht mit glOrtho
BeitragVerfasst: Mi Aug 21, 2013 12:04 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Erstmal vielen Dank für Deine Antwort. Leider hat das nichts gebracht ausser dass die Textur nun um 180° gedreht ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen verdreht mit glOrtho
BeitragVerfasst: Mi Aug 21, 2013 12:19 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
So ich hab's jetzt. Also das Problem ereignete sich immer wenn ich als Übergabeparameter für die Textur
GL_RGB statt GL_RGBA verwende, sprich

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,FTextureWidth,FTextureHeight,0,GL_RGB,GL_UNSIGNED_BYTE,@atexture[0]);

statt

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,FTextureWidth,FTextureHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,@atexture[0]);

Vielleicht weiss ja jemand was der Grund dafür ist, dass dies nicht funktionierte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen verdreht mit glOrtho
BeitragVerfasst: Mi Aug 21, 2013 14:22 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Wenn du eine Textur mit dem Format RGB hast, sind die Pixeldaten so aufgebaut:

RGB RGB RGB RGB RGB ...

Wenn du OpenGL aber sagst, dass es RGBA sein soll, liest OpenGL ein:

RGBA RGBA RGBA ...

also:

RGBR GBRG BRGB RGBR ...

ist also eher zufällig, dass sie wie "gespiegelt" aussah.

Im Bspcode von oben steht aber GL_RGB und nicht GL_RGBA...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 15 Queries | GZIP : On ]