Autor Beitrag
Pdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7
BeitragVerfasst: Di 27.09.05 13:16 
Hi leute!

Ich wollte nur mal wissen, ob man einen einfachen text in opengla nazeigen kann (nix 3d oder besonderes muster einfach normalen text) hab schon gesucht aber das hat mir net wirklich was gebracht!

Moderiert von user profile iconTino: Titel geändert.

_________________
Wenn alles steht und nix mehr looft, denn isses was von Meikrosooft
NeoInDerMATRIX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 245

Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
BeitragVerfasst: Di 27.09.05 19:29 
Hi,

schau mal bei NeHe oder DelphiGL dort sind entsprechende Tut's vorhanden.

Cu
Neo
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 28.09.05 08:20 
Bei Text in OpenGL muss man zwischen 3 Arten unterscheiden.

1. 3D Text. Dabei werden echte Modele mit Polygonen erstellt. Diese Schriften kannst du mittels wglUseFontOutlines erzeugen.

2. 2D Text mittels Bitmaps. Hierbei wird die Schrift mittels wglUseFontBitmaps erstellt. Es handelt sich hierbei um eine echte BIT-map (bewusst so beknackt geschrieben). Man könnte es auch mit einem 1 BitsPerPixel Windows Bitmap vergleichen. Diese können nur in 2D Modus von OpenGL verwendet werden und sind nur in der Größe vorhanden in der sie erstellt wurden.

u.

3. 2D mittels Texturen. Hierfür muss extern ein Bild erstellt werden, die alle möglichen Zeichen der Schrift enthält. Diese Zeichen werden dann mittels normalen Flächen dargestellt. Entsprechend ist diese Schrift nicht an den 2D oder an den 3D Modus gebunden. Sie kann in beiden verwendet werden. Diese Art der Schrift sind zweifelsohne die Flexibelste. Aufgrund des hohen Komplexibilitätsgrad gibt es leider auch keine Sinnvolle AllInOne Lösung. Aber daran arbeite ich derzeit mit Hochdruck. ;-)

In Spielen benutzt man ausschließlich die Textur Schriften.

Ich habe eine Unit (glText) geschrieben die bereits die drei Arten als Klassen kapselt. Diese kannst du auf der Projektseite von meinem VU Meter downloaden. Siehe unten die glText. In den Bilden vom VU Meter die kleinen Texte wurden mit Bitmapfonts erstellt. Der DGL OpenGL Header wird in jedem Fall genötigt. Solltest du die Texturefonts nicht benötigen so kannst du die Unit glBitmap und die Klasse TglTextureText auskommentieren. Oder eben die glBitmap mit downloaden.

Sollte Interesse an Texturfonts bestehen kann ich auch mein altes Generierungstool (genau so unperfekt wie alle anderen) mit Hochladen.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Pdd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7
BeitragVerfasst: Mi 28.09.05 12:32 
danke ich schaus mir mal an, ist da ne hilfe o. ä. dfabei wo die befehle dreinnestehen?

und was sit das für ein generator, wenn man damit die Buchstaben erstellen kann könntest du mir das auch noch geben? Danke!

_________________
Wenn alles steht und nix mehr looft, denn isses was von Meikrosooft
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 28.09.05 13:12 
Hilfe ist nicht dabei aber ich denke mal das ist alles recht einleuchtend. Wenn nicht hier mal ein kleines Beispiel für Bitmapfonts.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
type
  TForm1 = class(TForm)
    ...
  private
    FFont: TglBitmapText;
  end;

implematation

procedure TForm1.FormShow(Sender: TObject);  // Oder wo auch immer OpenGL initialisiert wird.
begin
  // OpenGL Initialisieren
  // Wichtig! Du musst dann den DGL OpenGL Header verwenden. Sonst geht es nicht!

  FFont := TglBitmapText.Create(FDC); 
  // FDC ist der DeviceContext der Zeichenfläche. 
  // Wird auch zum erstellen des Contextes benutzt
  FFont.Font.Name := 'Tahoma';
  FFont.Font.Size := 8;
  FFont.Font.Style := [fsBold];
  FFont.BuildFont;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FFont.Free;
end;

procedure TForm1.Draw;
begin
  // Sonst etwas zeichnen.
  ...

  // Hier müssen wir uns im 2D Modus befinden.
  glRasterPos2i(ClientWidth - 10013);   // positionieren
  FFont.PrintText('100%');                // zeichnen

  glRasterPos2i(ClientWidth - 100 + 712 + (ClientHeight - 20) * 25 div 100);
  FFont.PrintText('75%');

  ...
end;


Der Generator ist nur für Texturfonts von nöten. Wenn du nicht vor hast den Text in 3D zu benutzen oder ihn nicht grafisch verändern möchtest, dann würde es entsprechend auch keine Sinn machen dafür Texturen zu benutzen. Vor allem, da der Quellcode ein wenig (nicht viel) komplexer wird und du zusätzlichen Speicher für eine Textur opfern musst. Werde aber versuchen heute Abend das Programm noch hochzuladen. Poste dann morgen den Link. Geht leider nicht früher.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Pdd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7
BeitragVerfasst: Mi 28.09.05 13:24 
hm.. habs ausprobiert aber gltext ist untermalt und alle befehle die mit dem text zu tun haben sind auch rot , woradn könnte das liegen?


ausblenden Delphi-Quelltext
1:
2:
3:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dglopengl, StdCtrls, gltext, textures, glbitmap;

_________________
Wenn alles steht und nix mehr looft, denn isses was von Meikrosooft
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 28.09.05 13:41 
Hmmm. Delphi 2005. Keine Ahnung was der damit sagen will. Drück mal Kompilieren und lasse dir mal einen Fehler zurückgeben. Sonst würde ich lediglich darauf tippen, dass er die Datei nicht gefunden hat. Wenn sich diese nicht im Projektverzeichnis befindet musst du ihr Verzeichnis in die Suchpfade aufnehmen.

PS: die Textures könntest du rein theoretisch weglassen, da die glBitmap mindestens genau so viel kann wie die Textures. Eine komplette Hilfe zur glBitmap gibts hier. ;-)

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Pdd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7
BeitragVerfasst: Mi 28.09.05 13:44 
dateine sind im projektverzeichniss und mit textures und dglopengl funtzt auch! ich probiers ma mit delphi 6

_________________
Wenn alles steht und nix mehr looft, denn isses was von Meikrosooft
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 29.09.05 08:30 
Pdd: Hat das denn mit D6 funktioniert? Hattest du mal ausprobiert was der Kompiler dazu sagt?


Wie versprochen habe ich das Tool hochgeladen.

Ein paar Anmerkungen gibt es noch. Das Programm habe ich nie zu 100% fertiggestellt also fehlen überall noch diverse Kleinigkeiten, die Benutzerfreundlichkeit und der Funktionsumfang lassen auch zu wünschen übrig. "File" -> "Close" funktioniert nicht. Das Program muss über das Kreuz geschlossen werden. Es ist nur in der lage 32 Bit (RGBA) TGAs zu speichern. Und entsprechend die Breiten der einzellnen Zeichen. Die TGAs können aus unbekannten Gründen leider nicht in Gimp eingeladen werden. Mit der glBitmap funktioniert es allerdings Problemlos. Anmerkungen, Wünsche und Kritiken zu Allem sind gerne will kommen. Allerdings werde ich ich an dem Program nichts mehr machen, da das alles umfangreich neu entwickelt wird. ;-)

Hier ein kleines Sample für Texturefonts.

ausblenden Font erzeugen
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  fFont := TglTextureText.Create;
  fFont.Texture := TglBitmap2D.Create;
  fFont.Texture.SetFilter(GL_LINEAR, GL_LINEAR);
  fFont.Texture.MipMap := mmNone;
  fFont.Texture.LoadFromFile('Tahoma.tga');
  fFont.Texture.GenTexture;

  fFont.CharSpacing := 1;
  fFont.ReadCharWidthsFromIni(ExtractFilePath(ParamStr(0)) + 'Tahoma.ini''Char Widths');
  fFont.BuildFont;

Die glBitmap muss getrennt erstellt werden, da es auch möglich ist, dass sich mehrere Fonts ein und die selbe Textur teilen können.

ausblenden Frei geben
1:
2:
  fFont.Texture.Free;
  fFont.Free;

Entsprechend muss dann auch die Textur und die Fontklasse die diese benutzt getrennt frei gegeben werden.

ausblenden Zeichnen
1:
2:
3:
4:
  glPushMatrix;
    glTranslatef(20200);
    fFont.PrintText('Blahh');
  glPopMatrix;

Das glPushMatrix dient dazu um die aktuelle Matrix zu sichern und das glPopMatrix stellt diese dann wieder her. Durch das glTranslatef und durch das PrintText wird die in der Matrix gespeicherte Position verändert. Aus diesem Grund sollte man die Position speichern und wieder herstellen. Zu mindest wenn man mehrere Texte sinnvoll anordnen möchte. Das glTranslatef dient dazu um unseren Text zu positionieren.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.