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

Aktuelle Zeit: So Jul 20, 2025 08:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 44 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 24, 2003 17:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
noch ne kleine frage:
ich hab z.b. nen buchstabe der sich immer an die viewport größe anpassen soll und z.b. immer VERHÄLTNISMÄßig 100 pixel weiter links als ClientWidth is...

mit was mach ich das am besten ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 24, 2003 17:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Schlechte Karten...Bitmapfonts lassen sich in ihrer Größe nicht anpassen.Die Größe hast du ja schliesslich beim Erstellen der Schriftart (z.B. 16px) festgelegt.Wenn du Fonts brauchst die du ganz normal Skalieren kannst, dann solltest du dir mal Tuts zum Thema Texturemapped Fonts ansehen.

Das Ausrichten am linken Rand ist allerdings wieder was sehr leichtes, und erfordert eigentlich nur ein ganz klein wenig Gehirnakrobatik :
Code:
  1.  
  2. glOrtho(0,ClientWidth,ClientHeight,0,-2,2);
  3. glRasterPos(100,100);
  4. // Text ausgeben
  5.  

Damit wird der Text immer 100 Pixel vom linken Bildrand aus entfernt ausgegeben.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 24, 2003 18:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Guest hat geschrieben:
ne das meinte ich nich...
größe spielt jetzt ma keine rolle, nur position...

also beispiel, ich hab nen schrift "objekt" standard mäßig auf 200,100
jetzt verkleiner ich das fenster.....
und jetzt darf das objekt nicht mehr auf 200,100 sein, sondern z.b. auf 140,70 oder was weiss ich
wenn ich das fenster vergrößer auf position 250,120 oder so

weisste was ich mein? also die proportionen irgendwie beibehalten

Ja, jetzt weiss ich was du meinst.
Und das Berechnen der Proportionen sollte jeder 4.Klässler ohne Probleme hinkriegen.Das ist ja schliesslich nicht mehr als ein paar Multiplikationen und Divisionen.Jeder der sich ernsthaft mit 3D-Grafik beschäftigt sollte sowas mit vollem Kopf und im Halbschlaf können...dazu braucht man kein Forum.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 25, 2003 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Guest hat geschrieben:
ja ich kanns entweder selbst berechnen oder mit ner funktion wie z.b. mit glgetIntegerv(...) rauskreigen (in width und height)
aber wenns keine gibt wird mir nix anderes übrigbleiben als das selbst zu schreiben

das wollte ich wissen :)

Warum brauchst du den ne Funktion um Width und Height herauszubekommen?Schliesslich gibts doch die ClientWidth und ClientHeight-Eigenschaften deines Fensters, die im Normalfall (sprich wenn du das DC des Fenster-Handles zur Erstellung deines Rendercontext genutzt hats) der Größe deines Viewports entsprechen.

Der Rest der Berechnung ist doch popelig.Du mußt dir dann nur ne Referenzauflösung holen, bei der deine Schrift an der Stelle 200/100 erscheinen soll, und mittels einfacher Divisionen und Multiplikationen kannst du diese Schrift dann entsprechend positionieren.

Allerdings bleibt dir das alles erspart, wenn du für den Orthomodus feste Dimensionen festlegst (z.B. glOrtho(0,640,480,0,-2,2)).Denn da übernimmt doch OpenGL für dich das Skalieren der Objektpositionen entsprechend der Auflösung.Das ist je letztendlich auch der Grund warum man den Orthomodus für die 2D-Darstellung nutzt, da man sich dann keine Gedanken um die Darstellung seiner GUI in verschiedenen Auflösungen machen muß.Die Anpassung geschieht ja dann automatisch durch OpenGL.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 14:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
1. wenn ich jetzt ne mischung aus 2d und 3d fonts hab, wie kann ich beide anzeigen in einem render durchgang?

also mit glOrtho 2D und wie kann ich das wieder zurücksetzen dass ich 3D anzeigen kann?
mit gluPerspective klappt des irgendwie net


2. wenn ich mitten drin vom fenstermodus in den vollbildmodus schalte zeigt es keine 3d schrift mehr an... woran liegt das?

3. wenn ich mitten drin vom fenstermodus in den vollbildmodus schalte lädt er genauso lange nochmal wie wenn ich das programm zum ersten mal starte (liegt das an der 3d font erzeugung ?)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 14:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
chuckylein hat geschrieben:
1. wenn ich jetzt ne mischung aus 2d und 3d fonts hab, wie kann ich beide anzeigen in einem render durchgang?

also mit glOrtho 2D und wie kann ich das wieder zurücksetzen dass ich 3D anzeigen kann?
mit gluPerspective klappt des irgendwie net


2. wenn ich mitten drin vom fenstermodus in den vollbildmodus schalte zeigt es keine 3d schrift mehr an... woran liegt das?

3. wenn ich mitten drin vom fenstermodus in den vollbildmodus schalte lädt er genauso lange nochmal wie wenn ich das programm zum ersten mal starte (liegt das an der 3d font erzeugung ?)

zu 1 :
Dazu gibst die Funktionen glPushMatrix und glPopMatrix.Bevor du in den Orthomodus wechselst, legst du sowohl die Perspektiven also auch Modelansichtsmatrix mittels glPushMatrix auf den Matrizenstack, schaltest in den Orthomodus, zeichnest deinen Font, und holst danach wieder die Perspektiven und Modelansichtsmatrix mittels glPopMatrix zurück.
Danach hast du wieder genau die Ansicht die auch vor dem Orthomodus eingestellt war.

zu 2 :
Dazu müsste man wissen, wie du umschaltest.Wenn du bei jedem Wechsel auch den Rendercontext neu erstellst, musst du auch die Schrift wieder neu erstellen.

zu 3 :
Wie oben...dazu müsste man halt wissen, wie du den Bildschirmmodus wechselst.Normalerweise wird dabei nichts neu geladen, sondern nur der Viewport an die geänderte Fenstergröße angepasst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 15:00 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
Code:
  1.   
  2. procedure DrawScene;
  3. begin
  4. glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  5.   glLoadIdentity;
  6.  
  7.   glMatrixMode(GL_PROJECTION);
  8.   glPushMatrix;
  9.      glLoadIdentity;
  10.      glOrtho(0.0,ClientWidth,ClientHeight,0,-1,1);
  11.  
  12.      glMatrixMode(GL_MODELVIEW);
  13.      glPushMatrix();
  14.         glLoadIdentity();
  15.         glRasterpos2i(5,15);
  16.         glColor3f(1.0,1.0,0.0);
  17.         fmt:=Format('%.1f',[fps_last]);
  18.         PrintText2D(font2dbase,fmt);
  19.  
  20.         glMatrixMode(GL_MODELVIEW);
  21.      glPopMatrix;
  22.      glMatrixMode(GL_PROJECTION);
  23.   glPopMatrix;    
  24.  
  25.   glMatrixMode(GL_PROJECTION);
  26.   glPushMatrix;
  27.      glLoadIdentity;
  28. //     gluPerspective(60.0,ClientWidth/ClientHeight,NearClipping,FarClipping);
  29.      glMatrixMode(GL_MODELVIEW);
  30.      glPushMatrix;
  31.         glLoadIdentity;
  32.  
  33.         glLoadIdentity();
  34.         glTranslatef(0.0,0.0,-5.0);
  35.         glRotatef(angle,1,-1,0.5);
  36.         glTranslatef(0.25,0.0,0.0);
  37.         glColor3f(0.0,0.7,1.0);
  38.         PrintText3D(font3dbase,'test');
  39.  
  40.         glLoadIdentity();
  41.         glTranslatef(0.0,0.0,-5.0);
  42.         glRotatef(angle,1,-1,0.5);
  43.         glTranslatef(0.0,-0.8,0.0);
  44.         glColor3f(0.0,1.0,0.7);
  45.         PrintText3D(font3dbase,'test2');
  46.  
  47.      glPopMatrix;
  48.   glMatrixMode(GL_PROJECTION);
  49.   glPopMatrix;
  50.   angle:=angle+speed*qpc_elapsed;
  51. end;
  52.  



das müsste doch eigentlich klappen oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 15:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Mal davon abgesehen, das dass was du da gepostet hast das schlimmste Stück Quellcode (in Sachen Formatierung und Klammern, könnte fast von nem C'ler stammen) ist, dürfte das funktionieren.
Allerdings war das nicht der Quellcode den ich wollte.Wird dein 3D-Text überhaupt angezeigt, wenn du ihn alleine ausgibt?Vielleicht verbirgt sich der Fehler ja auch in PrintText3D.

Ansonsten scheint die Sache mit Push und Pop in Ordnung zu sein...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 16:36 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
hehe bin C++ ler, aber der quelltext is auch nich "aufgeräumt"...
wenn ich nur 2d text ausgeben will klappts
wenn ich nur 3d text ausgeben will klappts
wenn ich sowohl 2d als auch 3d ausgeben will, wird nur 3d ausgegeben


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Was passiert denn, wenn du (was du ja ausgeklammert hast) die Perspektive vor dem Zeichnen deines 3D-Textes mittels gluPerspective wieder setzts?

Wenn das nichts bringt, dann versuch mal mit glPushAttrib(GL_ALL_ATTRIB_BITS) alle OpenGL-Attribute vor dem Zeichnen des 3D-Textes zu speichern, um sie danach mittels glPopAttrib; wieder herzustellen.

Wichtig wären vielleicht noch die Funktionen in denen du deinen 2D bzw. 3D-Text ausgibst.Vielleicht wird dort was gemacht, das dein Problem verursacht.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 17:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
mit glPush und glPopAttrib funzts jetzt, danke :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 17:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
chuckylein hat geschrieben:
mit glPush und glPopAttrib funzts jetzt, danke :)

Auch wenns damit funzt, vermeide die exzessive Benutzung dieser Funktionen, da das Speichern aller Attributs-Bits recht lange dauert und deinen Rendercode recht langsam machen kann!

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


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 5 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.008s | 16 Queries | GZIP : On ]