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

Aktuelle Zeit: Mi Jul 09, 2025 22:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Text wird nicht angezeigt
BeitragVerfasst: Mo Jul 31, 2006 13:57 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, ich schaffe es mal wieder net, gescheit text anzeigen zu lassen, hmpf, die anwendung ist komplett 2d, so erstelle ich die Font:
Code:
  1.  
  2. procedure TEngine.SetFont(Font: TFont);
  3. begin
  4.   // Displaylisten für 256 Zeichen erstellen
  5.   FontBase := glGenLists(96);
  6.   //Font auswählen
  7.   SelectObject(DC, Font.Handle);
  8.   // Displaylisten erstellen
  9.   wglUseFontBitmaps(DC, 0, 256, FontBase);
  10.  
  11.   FFontColor := Font.Color;
  12. end;
  13.  

und so zeichne ich:
Code:
  1.  
  2. procedure TEngine.TextOut(px, py: integer; ptext: string);
  3. begin
  4.   if (pText = '') then
  5.     exit;
  6.   glpushmatrix;
  7.     RGBf(FFontColor);
  8.     glscalef(Form.ClientWidth / Width, Form.ClientHeight / Height, 1);
  9.     glPushAttrib(GL_LIST_BIT);
  10.       glRasterPos2i(pX, pY);
  11.       glListBase(FontBase);
  12.       glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  13.     glPopAttrib;
  14.     RGBf(clwhite);
  15.   glpushmatrix;
  16. end;
  17.  

aber irgendwas mache ich falsch, scalef, ist dazu da, dass sich die schriftgröße der sich möglicherweise ändernden fenstergröße anpasst.

mfg und danke schonmal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 14:57 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Wenn du schon wglUseFontBitmaps(DC, 0, 256, FontBase); benutzt, solltest du dir vielleicht auch das Beispiel im Wiki anschauen?

Auch solltest du mal nach Fehlern überprüfen, mich würde es wundern, wenn keiner existiert. Jedenfalls wusste ich nicht, dass OpenGL 256 Displaylisten in 96 reinquetschen kann...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 15:16 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
das hat mich auch verwundert, aber im template ist es genauso, und da funzt es und bei 256 kann ich keine änderung feststellen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 15:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
i0n0s hat geschrieben:
Auch solltest du mal nach Fehlern überprüfen, mich würde es wundern, wenn keiner existiert. Jedenfalls wusste ich nicht, dass OpenGL 256 Displaylisten in 96 reinquetschen kann...

Witzig aber Wahr. wglUseFontBitmaps erweitert die Displaylisten ohne Kommentar auf 256. Sprich zu Anfangs hat man nur 96 und anschließend sind es 256.

Du kannst die Schriftgröße bei Bitmapfonts nicht verändern. Die sind immer so wie sie sind. Dadurch wirst du nur deine Koordinaten verändern. Und dann könnte es sein, dass diese aus dem Bildschirm herrausragen. Versuche einmal allen Schnickschnack wegzulassen. Also nur das nötigste und dann ein Text in der Mitte des Bildschirmes. Wenn das geht kannst du es stück für Stück erweitern bis es so ist wie du es haben willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 15:42 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Das mit dem 96 in dem Template ist ein Fehler der irgendwann da mal reingeraten ist.

Ansonsten solltest du auch mal schauen, ob deine übergebene Font richtig ist?
Notfalls einfach mal mit
Code:
  1. Font     := CreateFont(16, 0, 0, 0, FW_MEDIUM, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
  2.                        ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, PChar(pFontName));

ersetzen.

Auch ist in deiner Zeichenroutine in Zeile 15 ein glPushmatrix zuviel.

Achso, und auf Fehlercodes zu überprüfen ist immer nett.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 16:00 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich habs mal soweit reduziert:
Code:
  1.  
  2. procedure TEngine.SetFont(Font: TFont);
  3. var
  4.   testfont: HFONT;
  5. begin
  6.   // Displaylisten für 256 Zeichen erstellen
  7.   FontBase := glGenLists(256);
  8.  
  9.   testfont := CreateFont(16, 0, 0, 0, FW_MEDIUM, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
  10.                      ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, 'Arial');
  11.  
  12.   //Font auswählen
  13. //  SelectObject(DC, Font.Handle);
  14.   SelectObject(DC, testfont);
  15.   // Displaylisten erstellen
  16.   wglUseFontBitmaps(DC, 0, 255, FontBase);
  17.  
  18.   FFontColor := Font.Color;
  19. end;
  20.  
  21. procedure TEngine.TextOut(px, py: integer; ptext: string);
  22. begin
  23.   if (pText = '') then
  24.     exit;
  25.   glpushmatrix;
  26. //    RGBf(FFontColor);
  27. //    glscalef(Form.ClientWidth / Width, Form.ClientHeight / Height, 1);
  28.     glPushAttrib(GL_LIST_BIT);
  29. //      glRasterPos2i(pX, pY);
  30.       glRasterPos3f(10, 10, -1);
  31.       glListBase(FontBase);
  32.       glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  33.     glPopAttrib;
  34. //    RGBf(clwhite);
  35.   glpushmatrix;
  36. end;
  37.  

sehen tue ich nichts, ich teste den code mal außerhalb des projektes


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Lass mal bitte die PushMatrix Befehle weg. Das müsste wenn dann sowieso ein Push und ein Pop sein. Aber 2 Push sind definitiv fehlerhaft.

Das Generieren kannst du so auch lassen. Ich benutze immer die Klasse TFont und die bisher jedes mal funktioniert. Sonst sieht es aber eigentlich okay aus. Außer es befindet sich ein bisschen außerhalb des Bildes, dann zeichnet glBitmap nämlich nichts. Bzw solltest du auch mal dein glOrthoaufruf überprüfen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 17:21 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
in nem anderen prog bekomme ich das zum laufen (3D) aber hier irgendwie net Oo

und skalieren kann ich den text nicht ? weil dann hat die methode für mich wenig sinn, weil das sehr wichtig ist.

Code:
  1.  
  2.   glOrtho(0, Form.ClientWidth, 0, Form.ClientHeight, 0, maxdepth);
  3.  

ursprung hab ich links unten


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Es gibt die Möglichkeit, einen 3d-Font erstellen zu lassen, der könnte dann auch Skaliert werden:
Code:
  1. const
  2.   FNT_CHAR_COUNT    =   256;
  3.  
  4. function glInit3DFont(Name:String;DC:HDC; Height:integer;Extrusion:TGLfloat;Style:TFontStyles=[]; Mode:integer=WGL_FONT_POLYGONS):TGLuint;
  5. var
  6.   CustomFont:HFont;
  7.   w:integer;
  8.   agmf:array [0..255] of GLYPHMETRICSFLOAT ;
  9. begin
  10.   Result := glGenLists(FNT_CHAR_COUNT);
  11.   w:= IfThen(fsBold in Style,700,0);
  12.   CustomFont := CreateFont(Height,              // Höhe
  13.                            0,                   // Breite 0=Keine Vorgabe
  14.                            0,
  15.                            0,
  16.                            w,                         // Fett?
  17.                            Byte(fsItalic    in Style),// Kursiv?
  18.                            Byte(fsUnderline in Style),// Unterstrichen?
  19.                            Byte(fsStrikeout in Style),// Durchgestrichen?
  20.                            ANSI_CHARSET,
  21.                            OUT_TT_PRECIS,
  22.                            CLIP_DEFAULT_PRECIS,
  23.                            NONANTIALIASED_QUALITY,
  24.                            FF_DONTCARE or DEFAULT_PITCH,
  25.                            PChar(Name));        // Name der Schrift
  26.   SelectObject(DC, CustomFont);
  27.   wglUseFontOutlines(DC,
  28.                      0,   //Von Zeichen #0
  29.                      FNT_CHAR_COUNT-1, //Bis Zeichen #255
  30.                      Result,
  31.                      0, //So genau wie möglich
  32.                      Extrusion, //x LE tiefe Buchstaben
  33.                      Mode,//Linen keine Polygone
  34.                      @agmf);//Speichere dort die Informationen
  35.   DeleteObject(CustomFont);
  36. end;
  37.  

Aufruf zum Beispiel:
Code:
  1. var myFont:TGLUint;
  2. myFont:= glInitFont3d('Arial',DC,15,0.1);

Textausgabe:
Code:
  1.   glPushMatrix;
  2.     glListBase(myFont); //Liste auswählen
  3.     glCallLists(Length(Text), GL_UNSIGNED_BYTE, PChar(Text));//Entsprechende Listen aufrufen
  4.   glPopMatrix;

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 17:39 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
der hat dann aber auch polygone in die z ebene oder ? die extruktion, wenn ich die auf 0 stelle, sind die polygone dann weg, seh ich dann noch was ? ich möchte ja net unnötig mit polygonen um mich werfen die man dann eh net sieht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Theoretisch könnte es auch mit 0 gehen, weiß ich aber nicht.Ansonsten wird sich das wohl kaum vermeiden lassen. Allerdings sind die Geschwindigkeitseinbußen nicht so groß. Ich hatte mal als Test einen ziemlich langen Text ausgegeben (>1000 Zeichen), und die FPS sind kaum runtergegangen. Liegt wahrscheinlich da dran, dass Displaylisten verwendet werden.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 17:53 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
kann man nicht text aus quads aufbauen ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 01, 2006 00:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Seth hat geschrieben:
kann man nicht text aus quads aufbauen ?

Im Bomberman-Tutorial war was zum Thema Bitmapfonts(Unit BombermanFont.pas). Die sollten in dieser Implementation auch skalierbar sein, da sie auf Quads gezeichnet werden.
Ein Programm zum Fonts erstellen war auch im Tut erwähnt.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 01, 2006 07:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Jetzt mal ne ganz bescheidene Frage. Wie viele verschiedenen Größen brauchst du? Oder muss sich die Größe immer an das Fenster anpassen? Dann das wichtigste. Wozu brauchst du es? Also was bezwckst du damit etc. Ich denke wir sind an einen Punkt angelangt an dem wir sehr experimentell werden und mit allen Möglichkeiten um uns werfen.

Polygonfonts: Je nach qualitativen Einstellungen können die sehr wohl verdammt viel Leistung verschlingen. Wenn die Qualität nicht so hoch ist, dann sehe sie eckig und abgehackt aus. Abgesehen davon, dass sie nur aus Polygonen bestehen. Sie haben somit eine Vorder und eine Rückseite. Weiß jetzt nicht ob sie eine Tiefe haben, wenn die Extrusion 0 ist. Aber es wäre dämlich, wenn sie es täten. Aber diese Methode stammt vom Microsoft, damit stehen wieder alle Möglichkeiten offen. :twisted:

Texturfonts: Ich habe schon mehrfach mit Texturfonts gearbeitet (auch mehr oder weniger aktuell) und diese sollte man normal auch nicht in der Größe verändern. Dadurch erhält man sehr schnell einen riesesn haufen Matsch auf dem Schirm und solche Schrift zu lesen tut mir teilweise in den Augen weh. Wenn man sie unbedingt verändern können muss, dann muss man darauf achten, dass man gewisse Grundvorraussetzungen erfüllt und dass der Bereich in dem die Texturen vergrößert werden nicht zu groß ist. Denn sonst bekommt man dennoch wieder Matsch. Und die Generatoren mit denen man Texturfonts erstellen kann sind alle samt nicht in der Lage die Vorraussetzungen dafür zu erfüllen.

PS: Von dem Programm aus dem Tutorial würde ich besser die Finger lassen, da ich nicht nachvollziehen konnte wie er seine Buchstaben positioniert. Leider ist das nun mal für ein halbwegs sinnvolles Schriftbild eine nicht unwichtige Vorraussetzung.

PPS: Bitmapfonts in OpenGL richten sich nach der Pixelangabe deines Fensters und die wird von Windows vorgegeben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 01, 2006 08:48 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
am besten mit der fenstergröße, sinnvoll wäre das zumindest schrittweise, also für 640*480, dann ab 800*600, dann ab 1024*768 etc.... das beispiel aus dem bomberman tutorial hatte ich auch schon mal ausprobiert, aber da wurden mir die falschen buchstaben angezeigt, ich hatte es soweit fertig, hab ich hier auch mal gepostet, aber die buchstaben waren halt falsch.

hm hatte ich wohl doch net gepostet, oder es wurde net gesendet ^^ das würde erklären warum ich keine antwort bekommen hab. also texturefonts wären schon nett. einzeilig würde reichen, ich hab momentan nur den generator aus dem tut, aber ich würde dann wohl eh so ein tool schreiben und dem sdk beifügen müssen.

es geht ja darum, dass das ganze für den anwender der 2d möglichst kompfortable ist, das heißt, er kann unter einer auflösung von 640*480 entwickeln, pixelgenaue angaben machen und auf 1024*768 siehts dann genau so aus.


mfg


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.019s | 16 Queries | GZIP : On ]