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

Aktuelle Zeit: So Jul 06, 2025 18:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jan 22, 2003 21:11 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

ich kriegs einfach nicht hin. Ich verschiedene Wege ausprobiert und keines brachte das gewünschte Ergebnis.

Die Schrift erstelle ich mit:

Code:
  1.  
  2.  
  3. procedure TGLBitmapFont.BuildFont(Size : Integer; Bold : Boolean; const aFont : String = 'Comic Sans MS');
  4.  
  5. var
  6.  
  7.   pFont            : array[0..63] of Char;
  8.  
  9.   oFont            : HFont;
  10.  
  11.   iBold            : Word;
  12.  
  13. begin
  14.  
  15.   fBase := glGenLists(256);
  16.  
  17.   StrPCopy(pFont, aFont);
  18.  
  19.  
  20.  
  21.   iBold := 0;
  22.  
  23.   if Bold then begin
  24.  
  25.     iBold := FW_BOLD;
  26.  
  27.   end;
  28.  
  29.  
  30.  
  31.   fFont := CreateFont(-Size, 0, 0, 0, iBold, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, pFont);
  32.  
  33.   try
  34.  
  35.     oFont := SelectObject(Owner.DC, fFont);
  36.  
  37.     try
  38.  
  39.       wglUseFontBitmaps(Owner.DC, 0, 256, fBase);
  40.  
  41.     finally
  42.  
  43.       SelectObject(Owner.DC, oFont);
  44.  
  45.     end;
  46.  
  47.   except
  48.  
  49.     DeleteObject(fFont);
  50.  
  51.     fFont := 0;
  52.  
  53.     raise;
  54.  
  55.   end;
  56.  
  57. end;
  58.  
  59.  
  60.  
  61. procedure TGLBitmapFont.Write(X, Y : Integer; const aText : String);
  62.  
  63. var
  64.  
  65.   pText            : array[0..255] of Char;
  66.  
  67. begin
  68.  
  69.   if (aText = '') then begin
  70.  
  71.     Exit;
  72.  
  73.   end;
  74.  
  75.  
  76.  
  77.   StrPLCopy(pText, aText, SizeOf(pText) - 1);
  78.  
  79.   glPushAttrib(GL_LIST_BIT);
  80.  
  81.   glListBase(fBase);
  82.  
  83.   glCallLists(Length(pText), GL_UNSIGNED_BYTE, @pText);
  84.  
  85.   glPopAttrib();
  86.  
  87. end;
  88.  
  89.  


In meiner OpenGL - Anwendungen gehe ich wie folgt vor:

Code:
  1.  
  2.  
  3.   // Zeichne die Karte
  4.  
  5.   SwitchTo2DMode;
  6.  
  7.   try
  8.  
  9.     fFont.Write(50, 50, 'Test');
  10.  
  11.     fMap.Render2DMap(fPosition);
  12.  
  13.   finally
  14.  
  15.     Reset3DMode;
  16.  
  17.   end;
  18.  
  19.  


Wobei die beiden funktionen SwitchTo2DMode und Reset3DMode wie folgt implementiert sind:

Code:
  1.  
  2.  
  3. procedure TOGLApplication.SwitchTo2DMode;
  4.  
  5. begin
  6.  
  7.   if (fOrthoView = 0) then begin
  8.  
  9.     glPushAttrib(GL_ALL_ATTRIB_BITS);
  10.  
  11.     glDisable(GL_LIGHTING);
  12.  
  13.     glDisable(GL_DEPTH_TEST);
  14.  
  15.     glDisable(GL_TEXTURE_2D);
  16.  
  17.  
  18.  
  19.     glMatrixMode(GL_PROJECTION);
  20.  
  21.     glLoadIdentity;
  22.  
  23.     glOrtho(0, Width, Height, 0, -1, 1);
  24.  
  25.     glMatrixMode(GL_MODELVIEW);
  26.  
  27.     glLoadIdentity;
  28.  
  29.   end;
  30.  
  31.   Inc(fOrthoView);
  32.  
  33. end;
  34.  
  35.  
  36.  
  37. procedure TOGLApplication.Reset3DMode;
  38.  
  39. begin
  40.  
  41.   if (fOrthoView > 0) then begin
  42.  
  43.     Dec(fOrthoView);
  44.  
  45.     if (fOrthoView = 0) then begin
  46.  
  47.       ResizeWindow(Width, Height);
  48.  
  49.       glPopAttrib;
  50.  
  51.     end;
  52.  
  53.   end;
  54.  
  55. end;
  56.  
  57.  


Leider sehe ich nichts. Als naechstes habe ich die Texture-Font Unit von Nehe, die z. B. SOS in RenderToTex verwendet, eingebunden. Nachfolgend der Screenshot:

Bild

Ich sehe leider nur das gelbe Rechteck oben links.

Wer hat eine Idee, woran das liegt?

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 23, 2003 08:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich hab deinen Quellcode mal grade überflogen, und dabei sind mir deine String->PChar-Wandlungen aufgefallen, die du etwas kompliziert machst.In Delphi kann man mittels PChar(String) ganz leicht einen String->PChar-Typecast machen, ohne dabei umständlich Zwischenvariablen oder StringCopy-Routinen nutzen zu müssen.

Ändere also mal folgende Zeile in deiner Textuausgabe :
Code:
  1.  
  2.  
  3. glCallLists(Length(pText), GL_UNSIGNED_BYTE, @pText);
  4.  
  5.  

durch diese hier :
Code:
  1.  
  2.  
  3. glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  4.  
  5.  

und probiers mal damit.Wenn ich das so mache wie du, dann klappts bei mir mit der Bitmapschrift nämlich auch nicht, während die von mir genutzte Methode ohne Probleme funzt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 23, 2003 20:02 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

danke, der Fehler lag im @ - Zeichen, damit habe ich einen die Adresse zu dem Pointer übergeben und nicht worauf er zeigen soll. :oops:

Jetzt wird der Text dargestellt, aber die Positionsangaben, dich ich mit glTranslatef(100, 10, 0) setze, werden ignoriert. Auch jegliche Farbe wird ignoriert. Seltsamer weise wird die Karte oben rechts korrekt positioniert.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 23, 2003 22:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Jetzt wird der Text dargestellt, aber die Positionsangaben, dich ich mit glTranslatef(100, 10, 0) setze, werden ignoriert.  

Nimm statt glTranslatef im Ortho-Modus besser glRasterPos2f, das sollte funktionieren.

Zitat:
Auch jegliche Farbe wird ignoriert. Seltsamer weise wird die Karte oben rechts korrekt positioniert.

Wie und wo setzt du denn die Textfarbe.Ein Codeschnippsel wäre vielleicht ganz hilfreich.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 24, 2003 20:24 
Hi,

ich habe unter www.seban.de/download/dungeon1.zip das gesamte Projekt abgelegt, da ich glaube, das ein Seiteneffekt aus einer anderen Unit, die Probleme verursachen. Die Datei ist ca. 284KB gross.

Falls jemand Zeit und Lust hat, wäre es Klasse, wenn er mir sagen könnte, wo das Problem ist.

Die Unit OGLMain initialisiert mein Fenster und OpenGL und verwaltet den FPS - Counter und Zeitvariablen.

Die Unit uEasyMap stellt die Karte dar und fuehrt die Kollisionsabfrage durch.

Die Unit uFont sollte die Schrift erstellen und anzeigen.

Die Unit uParticles stellt ein einfaches Partikelsystem dar.

Alle anderen Units sind Standardunits, die häufig in OpenGL - Anwendungen verwendet werden und sind nur der Vollständigkeitshalber mit eingebunden worden. Es werden keine externen Bibliotheken verwendet.

Wäre Klasse, wenn mir jemand weiterhelfen könnte. Danke im Voraus.

KidPaddle


Nach oben
  
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 23 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.013s | 15 Queries | GZIP : On ]