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

Aktuelle Zeit: So Apr 28, 2024 20:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zwei Konturen aufeinander
BeitragVerfasst: Do Jun 29, 2023 08:07 
Offline
DGL Member

Registriert: Mi Jun 28, 2023 15:58
Beiträge: 4
Programmiersprache: C++
Hallo liebes Forum,

ich bin realtiv neu in OpenGL und habe mit folgendem Problem zu kämpfen:

Ich habe ein Quader (mit GL_QUADS) auf bei Z = 0.0 gezeichnet. Möchte ich nun eine Linie, oder ein meinem Fall ein Kreuz, mit GL_LINES über mein Quader legen (Z = 1.0),
so wird dieses nur standardweise nur teilweise dargestellt (siehe Bild 1). Lösche ich das GL_DEPTH_BUFFER_BIT ist die Darstellung korrekt (siehe Bild 2), wobei mein Quader aber leider eine Transparenz erfährt (Siehe Bild 3, von unten betrachtet).

Wie kann ich diese Transparenz loswerden? Den Alpha-Kanal meiner Farben habe ich auf 1.0 gesetzt.

Mein Beispielcode (C++, da CPP-Builder aber Delphi-kompatibel) sieht wie folgt aus:

Code:
  1.  
  2. // Draw vertices to context
  3. glBegin(GL_QUADS);
  4. glColor4f(1.0, 0.0, 1.0, 1.0);
  5. glVertex3f(-1.0, -1.0, 0.0);
  6. glVertex3f(-1.0, +1.0, 0.0);
  7. glVertex3f(+1.0, +1.0, 0.0);
  8. glVertex3f(+1.0, -1.0, 0.0);
  9. glEnd();
  10.  
  11. // Clearing depth buffer (but resulting transparency!!!)
  12. glClear(GL_DEPTH_BUFFER_BIT);
  13.  
  14. glBegin(GL_LINES);
  15. glLineWidth(3.0);
  16. glColor4f(0.0, 0.0, 0.0, 1.0);
  17. glVertex3f(+0.0, -1.0, 1.0);
  18. glVertex3f(+0.0, +1.0, 1.0);
  19. glVertex3f(-1.0, +0.0, 1.0);
  20. glVertex3f(+1.0, +0.0, 1.0);
  21. glEnd();


Ich danke im Vorraus für Eure Hilfe :)



LG Tommy


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zwei Konturen aufeinander
BeitragVerfasst: Sa Jul 01, 2023 16:34 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Wenn du mit OpenGL anfängst, solltest du jetzt direkt einen Sprung auf OpenGL >= 3.1 machen. Ist zwar am Anfang erstmal ein großer Sprung, aber man gewöhnt sich schnell ein und kommt dann später auch in Richtung Vulkan gut weiter.

Bild 1 sieht für mich nach Z-Fighting aus: Wie hast du den Bereich deiner Z-Auflösung gewählt? Können die umberechneten Werte von Z=0 und Z=1 zu dicht beieinander liegen?

Mit dem Löschen des Depthbuffers setzt du alle Z-Werte zurück und deine Striche werden immer voll gezeichnet, da dort nichts mehr liegt bzw. es eben gelöscht wurde.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zwei Konturen aufeinander
BeitragVerfasst: Di Jul 04, 2023 11:21 
Offline
DGL Member

Registriert: Mi Jun 28, 2023 15:58
Beiträge: 4
Programmiersprache: C++
i0n0s hat geschrieben:
Wenn du mit OpenGL anfängst, solltest du jetzt direkt einen Sprung auf OpenGL >= 3.1 machen. Ist zwar am Anfang erstmal ein großer Sprung, aber man gewöhnt sich schnell ein und kommt dann später auch in Richtung Vulkan gut weiter.

Bild 1 sieht für mich nach Z-Fighting aus: Wie hast du den Bereich deiner Z-Auflösung gewählt? Können die umberechneten Werte von Z=0 und Z=1 zu dicht beieinander liegen?

Mit dem Löschen des Depthbuffers setzt du alle Z-Werte zurück und deine Striche werden immer voll gezeichnet, da dort nichts mehr liegt bzw. es eben gelöscht wurde.


Danke für deine Antwort! Auf OpenGl >= 3.1 habe ich tatsächlich schon mal einen Blick geworfen (wegen VAO/VBO). Ich finde den Code im Forum jedoch mit glBegin/glEnd kompakter und übersichtlicher.

Mein Problem ist mit Sicherheit das "Z-Fighting". :mrgreen:

Ich habe leider nicht genau verstanden, was du mit der Auflösung in Z meinst. Ich nirgends Parameter bezüglich der Auflösung geändert. Wie kann ich das beeinflussen? Sorry hier spricht ein Greendhorn 8)

Beste Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zwei Konturen aufeinander
BeitragVerfasst: Di Jul 04, 2023 19:22 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Bei glFrustum und glOrtho hast du znear, zfar. Diese definieren den Wertebereich der Z-Werte.
Code:
  1. (z - znear) / (zfar - znear)

Das ergibt einen Wertebereich von [0..1] für den Tiefenbuffer. Meine Vermutung ist, dass zfar und znear so groß/klein sind, dass z=0.0 und z=1.0 ziemlich ähnliche Werte ergeben.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zwei Konturen aufeinander
BeitragVerfasst: Mi Jul 05, 2023 12:36 
Offline
DGL Member

Registriert: Mi Jun 28, 2023 15:58
Beiträge: 4
Programmiersprache: C++
Ach so, okay. Ich bin noch nicht so ganz vertraut mit der Materie.

Ich nutze gluPerspective anstatt glFrustum/glOrtho wie folgt:

Code:
  1. gluPerspective(1.0, aspect, 0.001, 1000.0);


Kann es zu Schwierigkeiten kommen, da mein z_near bei 0.001 liegt und ich bei Z=0 beginne?
Allerdings habe ich versucht den Z-Werten einen Offset zu geben was leider keinen Effekt gehabt hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zwei Konturen aufeinander
BeitragVerfasst: Do Jul 06, 2023 09:18 
Offline
DGL Member

Registriert: Mi Jun 28, 2023 15:58
Beiträge: 4
Programmiersprache: C++
Ich habe mein Problem jetzt erkannt. Dank deinem Hinweis mit glOrtho! Vielen Dank für deine Hilfe!

Mein problem war folgendes: Ich wollte eine parallele Projektion und habe dafür den falschen Ansatz gewählt.
Ich habe gluPerspective mit einer extrem kleinen Apertur gewählt, um eine quasi-telezentrische Abbildung zu bekommen.
(Leider kannte ich zu dem Zeitpunkt die Funktion glOrtho noch nicht!)
Dadurch gab es jedoch einige Fehler/Probleme bei der Darstellung wie bspw. durch Z-Fighting.

Nun benutze ich glOrtho statt gluPerspective und alles funktioniert wunderbar und wie zu erwarten!

Vielen vielen Dank nochmals!!


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 19 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.032s | 17 Queries | GZIP : On ]