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

Aktuelle Zeit: Do Jul 17, 2025 05:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Nochmal Text auf Sphere darstellen
BeitragVerfasst: Sa Mär 04, 2006 11:27 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ich fasse das ganze mal zusammen und am ende ist auch ein Bsp.

Also ich erstelle die Font :

Code:
  1.  
  2. procedure TForm1.BuildFont(pFontName : String);
  3. var
  4.  Font : HFONT;
  5. begin
  6.   // Displaylisten für 256 Zeichen erstellen
  7.   FontBase := glGenLists(256);
  8.   // Fontobjekt erstellen
  9.   Font := CreateFont(
  10.                            12,                  // Höhe
  11.                            0,                   // Breite 0=Keine Vorgabe
  12.                            0,
  13.                            0,
  14.                            0,                   // Fett?
  15.                            0,                   // Kursiv?
  16.                            0,                   // Unterstrichen?
  17.                            0,                   // Durchgestrichen?
  18.                            ANSI_CHARSET,
  19.                            OUT_TT_PRECIS,
  20.                            CLIP_DEFAULT_PRECIS,
  21.                            NONANTIALIASED_QUALITY,
  22.                            FF_DONTCARE or DEFAULT_PITCH,
  23.                            'ARIAL'); // Name der Schrift
  24.   glEnable(GL_POINT_SMOOTH);
  25.  
  26.   // Fontobjekt als aktuell setzen
  27.   SelectObject(DC, Font);
  28.   wglUseFontOutlines(DC,
  29.                      0,   //Von Zeichen #0
  30.                      255, //Bis Zeichen #255
  31.                      FontBase,
  32.                      0, //So genau wie möglich
  33.                      0.2, //0.2 LE tiefe Buchstaben
  34.                      WGL_FONT_LINES,//Linen keine Polygone WGL_FONT_Polygons,//
  35.                      @agmf);//Speichere dort die Informationen
  36.  
  37.   // Displaylisten erstellen
  38.   wglUseFontBitmaps(DC, 0, 256, FontBase);
  39.   // Fontobjekt wieder freigeben
  40.   DeleteObject(Font)
  41. end;
  42.  


so wird der Text ausgegeben :

Code:
  1.  
  2. procedure TForm1.PrintText(pX,pY,pZ : single; const pText : String);
  3. begin
  4.   if (pText = '') then
  5.    exit;
  6.  
  7.   glPushAttrib(GL_ALL_ATTRIB_BITS);
  8.   // glDisable(GL_DEPHT_TEST);
  9.   glPushAttrib(GL_LIST_BIT);
  10.    glRasterPos3f(pX, pY, pZ);
  11.    glListBase(FontBase);
  12.    glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  13.   glPopAttrib;
  14.   // glEnable(GL_DEPTH_TEST);
  15.   glPopAttrib;
  16.  
  17. end;
  18.  


Das ergebnis ist immer noch das der Text links neben der Sphere in der Sphere verschwindet.
wenn ich den auskommentierten Depth Test abschalte sieht man zwar den Text richtig, aber man kann durch meine Sphere durchschauen. Die Sphere hat ja ne Texture und die ist dann plötzlich durchsichtig :-(


Was kann ich tun ?
Matthias

http://www.starflight-virtual.de/horst/Project2.rar


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 13:35 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du must die Sphere mit angeschaltenenm Depth-Test rendern. Dann musst du den Depthtest deaktivieren, und die Beschriftung rendern. ABER: Dadurch wird auch der Text sichtbar der eigentlich auf der Rückseite der Kugel ist.

Abhilfe könntest du schaffen, indem du den Text nach entfernung zur Kamera sortierst. Dann renderst du nur nochd en Text der vor der Mitte der Kugel ist.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 13:46 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

also scheint das nicht anders zu gehen.
Danke für den Vorschlag, aber wie soll ich rausbekommen was nun vor der Mitte der Kugel ist ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 13:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nun du könntest den Abstand Kugelzentrum<->Kamera berechnen. Alles was näher ist, ist auch sichtbar. (Satz des Pythagoras geht auch in 3D: distanz = wurzel ( xdiff² + ydiff + zdiff²)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 14:08 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

:-) :-) Das ist ja echt toll, aber ????

Also die Kugel hat als koordinatenmittelpunkt immer 0,0,0. Also die wird nicht verschoben.
Woher bekomm ich denn die Kameraposition ?
Falls Du Dir das beispiel runtergeladen hast hast Du gesehen das die Kugel auch herangezoomt wird.

Ich weiss aber als erstes mal nicht wie ich auf die werte kommen soll.
Also wo ist denn meine Kamera ????

Ich bin Anfänger sollte ich vielleicht mal noch erwähnen. Mach das erst seit 3-4 Tagen :-)

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 14:36 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ich habs .. hab das über FarClipping gemacht.
So sieht man das was "hinter" der Kugel ist ja auch nicht :-)

Danke
Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 21:02 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Öhmmm...Was hast du genau gemacht?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 21:21 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ich verändere den Zoom nicht mehr mi glTranslate sondern mit glScale.
So konnte ich das Farclipping so einstellen das es genau bei der hälfte der kugel einsetzt,
So ist alles was "hinter" der Erde ist unsichtbar :-)

Matthias

Ps.: Manchmal sieht man eben den Wald vor Bäumen nicht.
Trotzdem würde ich das gerne mal hinbekommen mit den anderen schriften .
Interesse halt :-) und der Lerneffekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 00:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmmm...also so doll is die Variante jetzt nicht find ich. Sie mag zwar funktionieren, aber ist doch sehr begrenzt. Jetzt stell dir mal vor du wölltest hinter der Kugel noch was anderes hinmachen was sehrwohl sichtbar sein soll.

Versuchs nochmal mit der Distanzberechnung.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 08:54 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

jap, da hast Du Recht.
Bis auf das die Variante funktioniert finde ich die auch nicht wirklich gut. Nicht zuletzt weil mir die Vorstellung eines Sternenhimmels im Hintergrund im Kopf rumspukt.

Jedoch, wie schon gesagt, ich WEISS NICHT WIE ICH DAS MACHEN SOLL ???
Kannst Du mir nicht wenigstens mal den Weg aufzeigen, welche Befehle ich in welcher Reihenfolge brauche ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 10:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

Ich gehe mal davon aus, dass du dein Kugel über die X- und Y-Achse drehst. D.h. du wirst irgendwo die Drehwinkel gespeichert haben...
Aus diesen kannst du dir deinen Blickvektor errechnen mit folgender formel:

Code:
  1.  
  2. x = -sin(rotY) * cos(rotX);
  3. y = sin(rotX);
  4. z = -cos(rotY) * cos(rotX);
  5.  


Wenn du dann den Blickvektor hast kannst du ihn mit den Punktvektorn deiner Sphere multiplizieren um heraus zu finden wo der andere Punkt steht...

Wenn du also am Punkt P1 etwas darstellen willst, aber nicht weisst ob der Punkt überhaupt sichtbar ist machst du folgendes:

Code:
  1.  
  2. if ( P1 * Blickvektor <= 0)
  3.     // sichtbar
  4. else
  5.     // nicht sichtbar
  6.  


Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 12:55 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

das problem ist nur das die Schrift auch in den Listen steht,
also nur einmal gezeichnet wird.
Also funktioniert das so nicht, denke ich jedenfalls.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 13:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

Mach doch 2 Listen...
1. eine Liste für die Kugel selber
2. eine Liste für die Schrift

die Liste für die Schrift blendest du dann aus wenn der Mauszeiger zum drehen geklickt wurde und kompilierst du neu wenn er wieder los gelassen wird ...

Ich habe mir das Prog mal angeschaut und das Drehen der Kugel war ohnehin extrem langsam bei vielen Texten ...
Dadurch würdest du das Drehen immer nur auf die Listen-Kugel beschränken ...

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 19:45 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

jup, werd ich testen. Hab aber heute ein bischen wenig Zeit, Danke !!

Andere Frage mal noch....Du hast gesagt das Du Dir das angesehen hast.
Hast Du bemerkt das die Linien ( cbFir.Checked ) irgendwie so komisch flackern, als ob sie
teilweise hinter der Texture der Sphere verschwinden ?

Woher oder wie kommt das ?

Ich hab das jetzige nochmal hochgeladen....

Matthias

http://www.starflight-virtual.de/horst/Project2.rar


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 19:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Jup ... ist mir aufgefallen ...
Das nennt sich z-fighting ... kommt daher, dass die Linien und die Sphere genau auf einander liegen.
Da musst du glDepthTest(GL_LEQUAL) einstellen ...
Wenn das nicht hilft musst du glPolygonOffset benutzen...

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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 | 14 Queries | GZIP : On ]