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

Aktuelle Zeit: Sa Jul 19, 2025 23:34

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Okt 15, 2009 10:10 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Hallo alle DGLer,

Ich habe mal wieder ein kleines Problem. Naja, für mich gross, für Euch wahrscheinlich kleiner. Ich habe mich mal daran versucht die Textsuitebibliothek zu verwenden. Bei meinem Programm möchte ich gerne ein HudText als Beschriftung für ein Koordinatensystem verwenden. Ich bin dabei vorgegangen wie in dem Sample 3d-VCL, welches der Textsuite beiliegt.
Ich habe dabei ein feststehendes Koordinatensystem (dank http://www.delphigl.com/forum/viewtopic.php?t=8728). Sprich die Achsen werden dargestellt mein Text jedoch nicht. An der Stelle
tsTextBeginBlock(20, 20, w -40, h -40, TS_BLOCKFLAG_WORD_WRAP) habe ich es auch schon mit den Top und Left Parametern meines 4 geteilten Viewports versucht.

Code:
  1.  
  2.     //Teilbereich eines 4 geteilten Viewports
  3.     glViewport(vport[FNumberfigures-1,1], vport[FNumberfigures-1,2], min(w,h), min(w,h));
  4.  
  5.      glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  6.  
  7.      glMatrixMode(GL_PROJECTION);
  8.      glLoadIdentity;
  9.      gluPerspective(1, 1, NearClipping, FarClipping);
  10.  
  11.      glMatrixMode(GL_MODELVIEW);
  12.      glLoadIdentity;
  13.  
  14.      glEnable(GL_Lighting);
  15.      glEnable(GL_Light0);
  16.  
  17.  
  18.      //Matrixmanipulation für starres Achsensystem
  19.      for i:=0 to 3 do
  20.       for j:= 0 to 3 do
  21.          m[i][j] := 0;
  22.  
  23.      m[0][0] := 1;
  24.      m[1][1] := 1;
  25.      m[2][2] := 1;
  26.      m[3][3] := 1;
  27.      m[3][2] := -130;
  28.  
  29.  
  30.      glMultMatrixf(@m);
  31.  
  32.      // setting color or with glColor
  33.      tsTextColor3f(1, 1, 1);
  34.  
  35.      // set align to center
  36.      tsSetParameteri(TS_ALIGN, TS_ALIGN_BLOCK);
  37.  
  38.      tsSetParameteri(TS_VALIGN, TS_VALIGN_TOP);
  39.  
  40.      // draw Textblock
  41.      tsTextBeginBlock(20, 20, w -40, h -40, TS_BLOCKFLAG_WORD_WRAP);
  42.      // text out first char
  43.      tsFontBind(fFontID);
  44.      tsTextOutA('Hallo');
  45.      tsTextEndBlock;
  46.  
  47.  
  48.      //Achsen zeichnen
  49.      gltranslatef(-0.5,-0.5,0);
  50.      glBegin(GL_Lines);
  51.         glColor3f(1,0,0);glVertex3f(-0.5,-0.5,0);glVertex3f(-0.5,0.5,0);
  52.         glColor3f(0,1,0);glVertex3f(-0.5,-0.5,0);glVertex3f(0.5,-0.5,0);
  53.         glColor3f(0,0,1);glVertex3f(-0.5,-0.5,0);glVertex3f(0,-0.25,0);
  54.      glEnd;
  55.  


Vielleicht könnten Ihr mir einen kleinen Denkanstoss geben. Ansonsten muss ich wohl auf eine selbsterstellte Texttextur zurückgreifen. Ich denke jedoch, dass dies mit der Textsuite zu machen sein sollte.


P.S.: In diesem oberen Fall möchte ich natürlcih nur erst einmal einen Text darstellen, ohne Rücksicht auf Positionierung.

VG,

heavenssake


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 15, 2009 11:39 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Hallo alle zusammen,

ich habe nochmal etwas rumprobiert. Ich wollte mal ein zwei andere Objekte hinzufügen, sprich in den selben Viewport wie das Koordinatensystem. Bei Kugeln und Linien gibt es keine Probleme, aber sobald ich Quads,Cylinder oder Disks reinsetzen möchte, sehe ich diese nicht.

vielleicht hat das eine ja was mit dem anderen zu tun. Ich bin jedenfalls momentan komplett ratlos. :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 15, 2009 12:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn ich das gerade richtig in erinnerung habe, dann macht das hier:
Code:
  1. //Matrixmanipulation für starres Achsensystem
  2.      for i:=0 to 3 do
  3.       for j:= 0 to 3 do
  4.          m[i][j] := 0;
  5.  
  6.      m[0][0] := 1;
  7.      m[1][1] := 1;
  8.      m[2][2] := 1;
  9.      m[3][3] := 1;
  10.      m[3][2] := -130;
  11.  

einfach das selbe wie
Code:
  1.  
  2. glLoadIdentity;
  3. glTranslate(0,0,-130);
  4.  

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 15, 2009 12:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ohne das glLoadIdentity allerdings, weil er die Matrix mit glMultMatrix und nicht mit glLoadMatrix anwendet.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 15, 2009 12:40 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
ja, danke stimmt. :) Aber das Problem mit der Objekt- bzw. Textdarstellung habe ich nach wie vor. :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 15, 2009 14:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was die Textdarstellung angeht. Die Texte die aus der TextSuite kommen benutzen das Standardmaß von OpenGL für 1 Pixel. Alle Angaben bei der TextSuite beziehen sich auf Pixel. Wenn du also in 3D einen Text so direkt darstellst wird der ziemlich groß werden. Die Position 0, 0 auf die der Block sich bezieht ist immer der aktuelle Koordinatenursprung von OpenGL. Top und Left werden da noch mal drauf gerechnet. Und zwar ist das vergleichbar wie ein glTranslate(Top, Left, 0); Damit würde bei 20, 20 zwischen deinem Ursprung und dem Text ein gehöriges Stück Luft erzeugt werden. In dem Beispiel habe ich außerdem noch ein glScalef(0.1, 0.1, 0.1) um den Text auf sinnvolle Größe zu schrumpfen. Wobei sinnvoll dabei vollkommen relativ ist.

Um deine Textpositionierung zu erleichtern kann ich dir nur empfehlen an der Stelle an der sich dein Block befindet auch ein einfarbiges Quad zu zeichnen. Ähnlich wie ich das in dem Beispiel gemacht habe. Dadurch sieht man relativ einfach wo sich der Text eigentlich befinden müsste.
Code:
  1.   glBegin(GL_QUADS);
  2.     glVertex2i(         0,           0);
  3.     glVertex2i(fTextWidth,           0);
  4.     glVertex2i(fTextWidth, fTextHeight);
  5.     glVertex2i(         0, fTextHeight);
  6.   glEnd;
  7.  
  8.   tsTextBeginBlock(0, 0, fTextWidth, fTextHeight, TS_BLOCKFLAG_WORD_WRAP);
  9.     ...
  10.   tsTextEndBlock;


Achte bitte auch darauf, dass der Block ausreichend hoch ist. Sollte der Block eine negative Höhe haben so werden alle Zeilen gecliped. Also ausgelassen. Fehler überprüfen sollte selbstverständlich sein.

Außerdem solltest du beachten, dass der Text nicht beleuchtet werden kann. Also es werden keine Normalen gesetzt. Es könnte also auch gut sein, dass dein Text zwar da ist aber schlichtweg von OpenGL in den Schatten gestellt wird. Das ist Wörtlich zu verstehen. Und dunkler Text auf dunklem Grund ist schon ein bisschen fies. ;)


Für eine Achsenbeschreibung ist aber wohl vermutlich einzeiliger Text besser geeignet. Dazu bräuchtest du dann nur die Position setzen, Font binden und anschließend mittels tsTextOut deinen Text ausgeben. Die Grundlinie des Textes auf der linken Seite (sofern nicht verändert) gibt an der Stelle den Koordinatenursprung an. Und wird auch an der Stelle gezeichnet. Der Blockmodus würde zwar Zeilen umbrechen würde aber immer so etwas entsprechen wie TS_SINGLE_LINE_TOP. Obendrein kannst du im Singleline Modus auch noch reichlich Befehle sparen. Natürlich nur sofern dir einzeiliger Text ausreicht.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]