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

Aktuelle Zeit: Do Jul 17, 2025 01:55

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 auf den Bildschirm, wie gehts?
BeitragVerfasst: So Feb 19, 2006 20:29 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Ich muss euch leider mal wieder belästigen. Wie die Überschrift schon sagt, will ich einfach nur text auf den Bildschirm bringen. Leider wird das in keinem Tutorial beschrieben und das Template hat mich mehr verwirrt als geholfen. Kann mir mal bitte einer erklären wie das geht, am besten mit einem kurzen Codebeispiel.

Danke!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 19, 2006 20:33 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Text ausgeben


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 20, 2006 21:18 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
WglUseFontBitmaps

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 21, 2006 21:48 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Neben den Tutorials sollte man auch immer die Kategorie Techniken_und_Algorithmen im Wiki durchgucken.
Werde einen entsprechenden Hinweis bei den Tutorials machen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 22, 2006 09:29 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Wenn Du grad dabei bist .. in vielen Tutorials funktionieren die Bilder nicht. Da ist immer nur ein Text ala 'Bild 3: blasülz' und wenn man den Link anklickt, dann kommt man auf eine Wiki-Seite,, die einem mitteilt, dass dieses Bild nirgendwo benutzt wird.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 22, 2006 12:27 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Der Fehler ist bekannt. Wir arbeiten daran... :wink:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 22, 2006 20:51 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
So weit so gut aber was genau mache ich jetzt mit wglUseFontBitmaps, nachdem ich ihm meine Liste übergeben habe? Wo muss ich in die Renderfunktion einbauen und wie bestimme ich welcher Text eingebaut wird?

Ein Beispiel wäre echt toll.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 01:25 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
guck nochmal ins Wiki. Das könnte dir weiterhelfen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 27, 2006 21:11 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Seltsam ,irgendwie funktioniert da nichts, dabei bin ich mir sicher alles richtig gemacht zu haben. Schaut euch mal bitte den Quellcode an:

Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglOpenGL;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.     procedure Render;
  15.     procedure OnIdle(Sender: TObject; var Done: Boolean);
  16.     procedure CreateLists;
  17.     procedure ShowText(var pText: string);
  18.   private
  19.     { Private declarations }
  20.  
  21.   public
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.   DC, RC :HDC;
  28.   FontLists: Cardinal;
  29. implementation
  30.  
  31. {$R *.dfm}
  32.  
  33.  
  34.  
  35.  
  36. procedure TForm1.CreateLists;
  37. var
  38.   CustomFont: HFont;
  39. begin
  40.   FontLists := glGenLists(256);
  41.     CustomFont := CreateFont(
  42.                            32,                  // Höhe
  43.                            0,                   // Breite 0=Keine Vorgabe
  44.                            0,
  45.                            0,
  46.                            0,                   // Fett?
  47.                            0,                   // Kursiv?
  48.                            0,                   // Unterstrichen?
  49.                            0,                   // Durchgestrichen?
  50.                            ANSI_CHARSET,
  51.                            OUT_TT_PRECIS,
  52.                            CLIP_DEFAULT_PRECIS,
  53.                            NONANTIALIASED_QUALITY,
  54.                            FF_DONTCARE or DEFAULT_PITCH,
  55.                            'Times New Roman');  // Name der Schrift
  56.  
  57.  
  58.   SelectObject(DC, CustomFont);
  59.   wglUseFontBitmaps (DC, 0, 255, FontLists);
  60. end;
  61.  
  62. procedure TForm1.ShowText;
  63. begin
  64.    glListBase(FontLists);
  65.    glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));
  66.    end;
  67.  
  68. procedure TForm1.FormCreate(Sender: TObject);
  69. begin
  70.  
  71. InitOpenGL;
  72. DC:=GetDC(Handle);
  73. RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  74. ActivateRenderingContext(DC, RC);
  75. glClearColor(0.0, 0.0, 0.0, 0.0);
  76. Application.OnIdle:=Onidle;
  77. end;
  78.  
  79. procedure TForm1.FormDestroy(Sender: TObject);
  80. begin
  81. DeactivateRenderingContext;
  82. DestroyRenderingContext(RC);
  83. ReleaseDC(Handle,DC);
  84. ChangeDisplaySettings(devmode(nil^), 0);
  85. end;
  86.  
  87. procedure TForm1.Render;
  88. var Text :string;
  89. begin
  90.  Text:= 'Bla';
  91.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  92.   glColor3f(1,0.5,0);
  93.   glRasterPos3f(-0.1,0,-1);
  94.   ShowText(Text);
  95.   Swapbuffers(DC);
  96. end;
  97.  
  98. procedure TForm1.Onidle(Sender: TObject; var Done: Boolean);
  99. begin
  100. Render;
  101. Done:= false;
  102. end;
  103. end.
  104.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 28, 2006 08:30 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Ich kann mich auch verguckt haben, aber Du rufst CreateLists nie auf.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 28, 2006 08:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Erstens das und Zweitens. Wo setzt du eigentlich deine Perspektive? Bzw den OrthoModus? Ohne diese Einstellung ist die Wahrscheinlichkeit, dass du dich noch in 3D befindest groß aber diese Entscheidung überlässt du dem Grafuktreiber. Also bitte den Modus setzen. Entweder im Render oder CPU Sparender in OnResize des Formulars.

Dann wäre es auch noch praktisch wenn du in der Methode ShowText auch noch eine Position setzt. Also Mittels RasterPos oder so. Dabei kannst du dich auch sonst befinden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 28, 2006 20:59 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Soweit so gut, das komische ist nur, dass kein Text mehr angezeight wird wenn ich ortho benutze! Ich habe die folgenden Zeilen an den Anfang meiner Render procedure gesetzt:
Code:
  1.  
  2.  glMatrixmode(GL_Projection);
  3.  glLoadidentity;
  4.  glOrtho(0,640,480,0,-1,1);
  5.  glMatrixMode(GL_Modelview);
  6.  glViewport(0, 0, ClientWidth, ClientHeight);
  7.  glLoadidentity;
  8.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 28, 2006 21:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Diese Ganze Vereinbarung ist am Besten im OnResize aufgehoben. Dieses Ereignis wird einmal am Anfang aufgerufen, und bei jeder Größenänderung. Viewport und Projektionsmatrix müssen ansonsten nicht geändert werden.

Dein Problem wird sicherlich die Tiefe der Szene sein. Du beschränkst deine Koordinaten auf das Intervall [-1,1]. Vermutlich besser wäre [0,100]. Probiers mal aus.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 10:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mishra: Erst einmal ein ganz herzliches Dankesschön von mir. Dein Problem hat mich gerade auf eine Idee gebracht die erschreckenderweise so etwas von genial einfach funktioniert. :-)

Um Text darzustellen genügt folgendes.
Code:
  1.   glRasterPos3f(10, 22, 0);
  2.   Text := 'Tröööött';
  3.  
  4.   glListBase(fFont);
  5.   glCallLists(Length(Text), GL_UNSIGNED_BYTE, PChar (Text));


Damit solltest du deinen Text sehen. Die RasterPos geht von unteren Linken Ecke des Textes aus. Wenn du also Position 0, 0 setzt dann ist dein Text gerade so außerhalb des sichtbaren Bereiches. Die Koordinaten von RasterPos richten sich danach wie groß die Auflösung ist die du bei glOrtho gesetzt hast. Wenn du dort also nur einen Bereich von 0 bis 1 angegeben hast dann darfst du bei RasterPos auch nur Werte im Bereich von 0 bis 1 angeben. im 2D Modus brauchst du normal mit den ZWerten so gut wie gar nichts machen. Also die kannst du immer auf 0 lassen. Bei glOrtho bbenutzte ich dann immer ganz gerne einen Bereich von -1 und 1. Aber 0 bis 100 wären da auch nicht falsch. Das ist reine Geschmackssache.

PS: Wenn dein Fenster in der Größe veränderbar ist dann empfehle ich dir bei glOrtho auch genau die Angaben zu tätigen die du auch bei glViewPort getätigt hast. Also dafür zu sorgen, dass eine Einheit genau 1 Pixel groß ist. Das macht das Positionieren etc. um längen einfacher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 20:07 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Bingo, das mit der Rasterposition wars. Freut mich wenn ich helfen konnte ^^

Edit: Ich habe das jetzt mal in ein anders Programm eingebaut, was in der Auflösung 1024 x 768 läuft. Dummerweise sehe ich dann wieder nur schwarz und mit die korrekten Einstellung für die Rasterposition habe ich noch nciht gefunden (diesmal wird Createlists garantiert aufgerufen). Da der Quellcode etwas umfangreich ist poste ich hier nur die Procedure, die den Text ausgeben soll:

Code:
  1.  
  2.  glMatrixMode(GL_Modelview);
  3.  glViewport(0, 0, ClientWidth, ClientHeight);
  4.  glLoadidentity;
  5.  glOrtho(0,1024,768,0,-1,1);
  6.   Text:= 'Das ist ein Test';
  7.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  8.   glColor3f(1,1,1);
  9.   glRasterPos3f(0.5,0.5,0);
  10.   ShowText(Text);
  11.   Swapbuffers(DC);
  12.  


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