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

Aktuelle Zeit: Fr Jul 18, 2025 16:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Etwas beeinflusst meinen Text Oo
BeitragVerfasst: Di Mai 30, 2006 18:43 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, in dem opngl15 template ist ja ein textbeispiel so zusagen integriert, text generieren:
Code:
  1.  
  2. procedure TGLForm.BuildFont(pFontName : String);
  3. var
  4.  Font : HFONT;
  5. begin
  6. // Displaylisten für 256 Zeichen erstellen
  7. FontBase := glGenLists(96);
  8. // Fontobjekt erstellen
  9. Font     := CreateFont(28, 0, 0, 0, FW_MEDIUM, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
  10.                        ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, PChar(pFontName));
  11.  
  12. // Fontobjekt als aktuell setzen
  13. SelectObject(DC, Font);
  14. // Displaylisten erstellen
  15. wglUseFontBitmaps(DC, 0, 256, FontBase);
  16. // Fontobjekt wieder freigeben
  17. DeleteObject(Font)
  18. end;
  19.  


und anzeigen:
Code:
  1.  
  2. procedure TGLForm.PrintText(pX,pY : Integer; const pText : String);
  3. begin
  4. if (pText = '') then
  5.  exit;
  6. glPushAttrib(GL_LIST_BIT);
  7.  glRasterPos2i(pX, pY);
  8.  glListBase(FontBase);
  9.  glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  10. glPopAttrib;
  11. end;
  12.  


ausgeben tue ich diesen so:
Code:
  1.  
  2.   //TEXT ANZEIGEN
  3.   glDisable(GL_DEPTH_TEST);
  4.   glDisable(GL_TEXTURE_2D);
  5.   // In orthagonale (2D) Ansicht wechseln
  6.   glMatrixMode(GL_PROJECTION);
  7.   glLoadIdentity;
  8.   glOrtho(0,clientwidth,clientheight,0, -1,1);
  9.   glMatrixMode(GL_MODELVIEW);
  10.   glLoadIdentity;
  11.   scoretext := 'Score: ' + inttostr(player1.score) + ' : ' + inttostr(player2.score);
  12.   PrintText(30, 25, scoretext);
  13.   glEnable(GL_DEPTH_TEST);
  14.   glEnable(GL_TEXTURE_2D);
  15.  

jedoch ist der text IMMER grau, ich habs auch schon versucht vor rasterpos zu ändern, nicht tut sich, meine vermutung ist das irgendetwas (das licht ist es nicht) auf meinen text einfluss nimmt, weil im beispiel ist der so glaube ich weiß.

danke schonmal ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 30, 2006 18:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Hast du Texturen aktiviert? Die werden nämlich auch auf Text-Polygonen dargestellt, allerdings ohne Texturkoordinaten, das sieht dann so grau aus, wie wenn du auf ein Quad ohne Texturkoordinaten eine Textur zeichnen lässt.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 30, 2006 22:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie meinst du das? Wenn Texturierung deaktiviert ist, wird einfach alles in Farbe + Licht&Materialien (falls Licht an) gezeichnet.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 30, 2006 23:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Hast du schonmal versucht, explizit glDisable(GL_LIGHTING) zu machen? Manchmal ist das Licht an, obwohl es das gar nicht sollte.

Du versuchst übrigens, mit
Code:
  1. FontBase := glGenLists(96);
96 Listen zu erstellen,
dann aber
Code:
  1. wglUseFontBitmaps(DC, 0, 256, FontBase);
256 Zeichen da Rein zu machen. Könnte damit was zu tun haben, bin mir aber nicht sicher.

Vielleicht hat auch was mit ANTIALIASED_QUALITY zu tun, versuch doch mal mit NONANTIALIASED_QUALITY. Wenn die Schrift zu schmal ist, sieht man nur den Rand(und der ist in Graustufen).

Wenn das nichts hilft, versuch mal die Routinen hier:
Code:
  1.  
  2. {------------------------------------------------------------------}
  3. {  Font vorbereiten                                                }
  4. {------------------------------------------------------------------}
  5. function glInitFont(Name:String;DC:HDC; Height:integer;Style:TFontStyles=[]):TGLuint;
  6. var
  7.   CustomFont:HFont;
  8.   w:integer;
  9. begin
  10.   Result := glGenLists(256);
  11.   w:= IfThen(fsBold in Style,700,0);
  12.   (*CustomFont := GetStockObject (SYSTEM_FONT);*)//Eine Alternative zu CreateFont
  13.   CustomFont := CreateFont(Height,              // Höhe
  14.                            0, 0, 0,
  15.                            w,                         // Fett?
  16.                            Byte(fsItalic    in Style),// Kursiv?
  17.                            Byte(fsUnderline in Style),// Unterstrichen?
  18.                            Byte(fsStrikeout in Style),// Durchgestrichen?
  19.                            ANSI_CHARSET,
  20.                            OUT_TT_PRECIS,
  21.                            CLIP_DEFAULT_PRECIS,
  22.                            NONANTIALIASED_QUALITY,
  23.                            FF_DONTCARE or DEFAULT_PITCH,
  24.                            PChar(Name));        // Name der Schrift
  25.   SelectObject(DC, CustomFont);
  26.   wglUseFontBitmaps (DC, 0, 255, Result);
  27.   DeleteObject(CustomFont);
  28. end;
  29.  
  30. {------------------------------------------------------------------}
  31. {  Text ausgeben                                                   }
  32. {------------------------------------------------------------------}
  33. procedure glTextOut(Font:TGLuint; Text:String);
  34. begin
  35.   glPushMatrix;
  36.     glListBase(Font); //Liste auswählen
  37.     glCallLists(Length(Text), GL_UNSIGNED_BYTE, PChar(Text));//Entsprechende Listen aufrufen
  38.   glPopMatrix;
  39. end;
  40.  
  41.  
  42. //Benutzung:
  43. // Variable für den Font
  44.   var fnt:TGLUInt;
  45.  
  46. // Font vorbereiten(am Programmanfang)
  47.   Fnt:= glInitFont('Arial',DC,22,[fsItalic]);
  48.  
  49. // Ortho-Modus
  50. // Farbe, Position, TextOut()
  51.   glColor3f(0.0,1.0,0.0,1.0); // Grün
  52.   glRasterPos2d(50,50); glTextOut(fnt,'Das ist ein Test');
  53.  
  54.  


Das ist erstmal alles was mir dazu einfallen würde, aber was davon das jetzt ist.... keine Ahnung ;)

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 31, 2006 15:52 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
La Boda hat geschrieben:
Hast du Texturen aktiviert? Die werden nämlich auch auf Text-Polygonen dargestellt, allerdings ohne Texturkoordinaten, das sieht dann so grau aus, wie wenn du auf ein Quad ohne Texturkoordinaten eine Textur zeichnen lässt.


siehts doch im qt oben dass sie ausgemacht wurden vorm zeichnen, mit dem licht ausmachen hab ichs wie beschrieben schon probiert, und das mit den zeichen isses auch net, weil das so im template auch funzt.

was wäre diese zeile in delphi ?!
Code:
  1.  
  2. w:= IfThen(fsBold in Style,700,0);
  3.  


wäre das
Code:
  1.  
  2.   if (Bold in Style) then
  3.     w := 700 else
  4.        w := 0;
  5.  


?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 31, 2006 16:04 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ahh mit dem code und deaktiviertem lighting gehts, VIEEELEN DANK ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 31, 2006 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Seth hat geschrieben:
ahh mit dem code und deaktiviertem lighting gehts, VIEEELEN DANK ;)


Man hilft wo man kann :wink: !

PS :
Code:
  1. function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer;
  2. begin
  3.   if AValue then
  4.     Result := ATrue
  5.   else
  6.     Result := AFalse;
  7. end;
  8.  
Also warst du schon ganz richtig. Ist in der Unit Math von Delphi7 drin.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 02, 2006 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Martok hat geschrieben:
Hast du schonmal versucht, explizit glDisable(GL_LIGHTING) zu machen? Manchmal ist das Licht an, obwohl es das gar nicht sollte.

Du versuchst übrigens, mit
Code:
  1. FontBase := glGenLists(96);
96 Listen zu erstellen,
dann aber
Code:
  1. wglUseFontBitmaps(DC, 0, 256, FontBase);
256 Zeichen da Rein zu machen. Könnte damit was zu tun haben, bin mir aber nicht sicher.


Das ist schon so im Template... warum eigentlich?!

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 02, 2006 16:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
luketheduke hat geschrieben:
Das ist schon so im Template... warum eigentlich?!


Hab mir das auch gerade angeguckt, komisch. 96 Zeichen wäre gerade mal bis zum `-Zeichen, nichtmal Kleinbuchstaben wären da drin. Funktionieren die? Ich hab das Template nie benutzt, hatte schon mein eigenes...

Man müsste mal Sascha fragen(wie heißt der hier im Forum eigentlich?). Er wird schon seine Gründe für haben.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 02, 2006 20:41 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Sascha Willems ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 03, 2006 08:01 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Martok hat geschrieben:
luketheduke hat geschrieben:
Das ist schon so im Template... warum eigentlich?!


Hab mir das auch gerade angeguckt, komisch. 96 Zeichen wäre gerade mal bis zum `-Zeichen, nichtmal Kleinbuchstaben wären da drin. Funktionieren die? Ich hab das Template nie benutzt, hatte schon mein eigenes...

Man müsste mal Sascha fragen(wie heißt der hier im Forum eigentlich?). Er wird schon seine Gründe für haben.

Also wenn ich mich richtig erinnere, dann war ich derjenige, der damit angefangen hat ein Template zu schreiben, das von vornherein Text anzeigen kann - ursprünglich wurden damit die FPS, der Renderer, etc. angezeigt. Warum nur 96 Displaylists geholt werden weis ich allerdings nicht - ob das wirklich im Origianl schon so war? Allerdings stört es auch überhaupt nicht, die Namen der Display List Elemente selber festzulegen - das wird erst unangenehm, wenn jemand danach glGenLists wieder verwenden möchte. Wäre vielleicht nicht schlecht, wenn der Code an dieser Stelle nochmal genauer unter die Lupe genommen wird - vielleicht von jemand der im Gegensatz zu mir noch ein lauffähiges Delphi hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 03, 2006 16:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Zitat:
Also wenn ich mich richtig erinnere, dann war ich derjenige, der damit angefangen hat ein Template zu schreiben, das von vornherein Text anzeigen kann - ursprünglich wurden damit die FPS, der Renderer, etc. angezeigt

Achso, nur weil im Quellcode
History :
Version 1.0 - Initial Release (Sascha Willems)
steht. Ahja, ich sehe es gerade: das Template für 1.2 mit VCL ist von dir. OK :oops:.

Ich hab jetzt mal ein bisschen rumgespielt und festgestellt, dass auch ohne glGenLists(n) alles geht. Dann bekommt man allerdings bei einem eventuellen 2. Font Probleme. Es reicht meines Erachtens, überhaupt eine List anzufordern, um den ersten verfügbaren Namen zu erhalten. wglUseFontBitmaps() scheint die benötigten Listen automatisch anzufordern.
Der korrekte Wert (also 256) ist anscheinend nur wichtig, wenn nicht genug freie Listen zusammenhängend vorliegen, zum Beispiel nur 10 freie hintereinander, aber 256 gebraucht werden. Dann kann man mit glGetError einen Fehler feststellen, fieserweise gibt wglUseFontBitmaps trotzdem true zurück :evil:.

Es sind aber beide Templates mit Text(1.2VCL und 1.5VCL) nur mit 96 Listen geschrieben. Vielleicht sollte man das mal ändern, wenigstens das 1.5er?

Zitat:
vielleicht von jemand der im Gegensatz zu mir noch ein lauffähiges Delphi hat.

:?: Freepascal oder Problem?

_________________
Gott sei Dank bin ich Atheist!


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


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.011s | 16 Queries | GZIP : On ]