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

Aktuelle Zeit: Di Jul 15, 2025 21:02

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Jan 29, 2005 20:26 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Ich erstelle in dem nachfolgenden Code aus einem Bild, 256x256, mit 16 Zeilen und 16 Spalten eine Schrift. Das funktioniert auch wunderbar.

Code:
  1.  
  2. procedure TGL2DTextureFont.BuildFont(aDC : HDC; const aTexture : String; aWidth : Integer = -1);
  3. var
  4.   iList            : Integer;
  5.   ix, iy           : Integer;
  6.   cx, cy           : TGLFloat;
  7.   cwx, cwy         : TGLFloat;
  8.   iWidth, iHeight  : Integer;
  9. begin
  10.   if not FileExists(aTexture) then begin
  11.     raise Exception.CreateFmt('Font "%s" nicht gefunden!', [aTexture]);
  12.   end;
  13.  
  14.   fTexture.LoadFromFile(aTexture);
  15.   if fHasAlphaColor then begin
  16.     fTexture.AddAlphaFromColorKey(fAlphaRed, fAlphaGreen, fAlphaBlue);
  17.   end;
  18.  
  19.   iWidth  := fTexture.Width div fColCount;
  20.   iHeight := fTexture.Height div fRowCount;
  21.  
  22.   fTexture.BuildMipMaps := False;
  23.   fTexture.SetFilter(GL_LINEAR, GL_LINEAR);
  24.   fTexture.FlipVert;
  25.   fTexture.GenTexture();
  26.  
  27.   // Creating Display Lists
  28.   fBase := glGenLists(fColCount * fRowCount);
  29.   fTexture.Bind;
  30.  
  31.   cwx   := ((1.0 * iWidth) / fTexture.Width);
  32.   cwy   := ((1.0 * iHeight) / fTexture.Height);
  33.   iList := 0;
  34.   for iy := 0 to Pred(fRowCount) do begin
  35.     for ix := 0 to Pred(fColCount) do begin
  36.       cx := ix * cwx;                       // X Position Of Character
  37.       cy := 1 - iy * cwy;                   // Y Position Of Character
  38.  
  39.       glNewList(fBase + iList, GL_COMPILE);
  40.         glBegin(GL_QUADS);                  
  41.  
  42.           glTexCoord2f(cx, cy - cwy);       // Texture Coord (Bottom Left)
  43.           glVertex2i(0, 0);                 // Vertex Coord (Bottom Left)
  44.  
  45.           glTexCoord2f(cx + cwx, cy - cwy); // Texture Coord (Bottom Right)
  46.           glVertex2i(iWidth, 0);            // Vertex Coord (Bottom Right)
  47.  
  48.           glTexCoord2f(cx + cwx, cy);       // Texture Coord (Top Right)
  49.           glVertex2i(iWidth, iHeight);      // Vertex Coord (Top Right)
  50.  
  51.           glTexCoord2f(cx, cy);             // Texture Coord (Top Left)
  52.           glVertex2i(0, iHeight);           // Vertex Coord (Top Left)
  53.  
  54.         glEnd();                            
  55.         if (aWidth > 0) then begin
  56.           glTranslated(aWidth, 0, 0);
  57.         end else begin
  58.           glTranslated(iWidth, 0, 0);
  59.         end;
  60.       glEndList();                          
  61.       Inc(iList);
  62.     end;
  63.   end;
  64. end;
  65.  


Gezeichnet wird das ganze wie folgt:
Code:
  1.  
  2. procedure TGL2DTextureFont.Write(X, Y, Z : TGLFloat; const aText : String);
  3. begin
  4.   glPushAttrib(GL_TEXTURE_2D);
  5.   glPushAttrib(GL_DEPTH_TEST);
  6.   glLoadIdentity();                    
  7.   glTranslated(x, y, 0);              
  8.  
  9.   glEnable(GL_TEXTURE_2D);
  10.   glDisable(GL_DEPTH_TEST);
  11.   fTexture.Bind;
  12.  
  13.   glPushAttrib(GL_BLEND);
  14.   glEnable(GL_BLEND);
  15.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
  16.  
  17.   glColor3f(1.0, 1.0, 1.0);
  18.   glListBase(fBase - Ord(fFirstChar));
  19.   // Write The Text To The Screen
  20.   glCallLists(Length(aText), GL_UNSIGNED_BYTE, PCHAR(aText));
  21.  
  22.   glPopAttrib;
  23.   glPopAttrib;
  24.   glPopAttrib;
  25. end;
  26.  


Jetzt möchte eine Schrift laden, die erst mit dem Leerzeichen beginnt und nur 64 Zeichen in einer Zeile hat. Die Textur hat 1 Zeile und 64 Spalten. Wenn ich diese verwende, werden mir nur leere weisse Felder angezeigt. Ich sitze schon einige Tagen dran und finden den Fehler einfach nicht.

Hat jemand eine Ahnung was ich verkehrt mache?

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 29, 2005 23:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
1 Zeile und 64 Spalten. Liegt es vielleicht daran, dass die Textur keine Potenz von 2 ist? Also deren Höhe und Breite?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 30, 2005 10:42 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Stimmt, mal wieder nicht daran gedacht. Ich werde das gleich heute Nachmittag ausprobieren, bin zur Zeit in der Arbeit.

Danke für den Schlag gegen die vordere Hirnplatte, äh Stirn.

Gruß
KidPaddle

PS. Ich wuste gar nicht das ich das Wort "Bimtap", siehe Titel, kenne....

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 30, 2005 19:46 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Das war def Fehler. Jetzt wird die Textur korrekt angezeigt.

Vielen Dank.

Gruß
KidPaddle

_________________
http://www.seban.de


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.010s | 17 Queries | GZIP : On ]