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

Aktuelle Zeit: Fr Jul 18, 2025 08:03

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Gebrauch von glPolygonOffset
BeitragVerfasst: Di Apr 01, 2008 08:54 
Offline
DGL Member

Registriert: Fr Feb 29, 2008 11:57
Beiträge: 16
Hallo,
ich möchte Körper mit hervorgehobenen Kanten zeichnen. Damit die Kanten auch immer schön sichtbar sind, will ich
glPolyOffset ( faktor , unit ) verwenden. Was sind das für Parameter die diese Routine braucht? Aus den Beschreibungen zum Parameter "faktor" , die ich gefunden habe, werde ich nicht schlau. Durch rumprobieren habe ich gefunden, dass es für einen Körper mit ( 0.5 , 0.5 ) funktioniert.
Was nimmt man da für Werte ? Ich will die offsets möglichst klein halten. Gerade so, dass sie den gewünschten Effekt bringen.
Ich habe mit meine verwendeten Werten jetzt nämlich ein Problem mit relativ "dünnen" Objekte, die aufeinander liegen.
Hir gibt es den Effekt, dass Kanten eines hinteren Objekts durch die Flächen eines davor liegenden "durchbrechen".
Ich denke, es kommt in der Situation auf eine feine Abstimmung der Offsets an.

Hat jemand ´ne Ahnung was die parameter von glPolyOffset wirklich bedeuten ? Wo kann man da was gescheites nachlesen ?

Danke für jede Hilfestellung !


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 12:05 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Hi,

ich hab davon zwar keine Ahnung, aber besser eine Antwort als keine :)

Versuchs mal im wiki: http://wiki.delphigl.com/index.php/glPolygonOffset oder schau dich mal auf der OpenGL-Seite um, da müssten auch ein paar Dokumentationen zu finden sein!


Grüße,

Rüdiger


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 12:20 
Offline
DGL Member

Registriert: Fr Feb 29, 2008 11:57
Beiträge: 16
Danke für die Antwort. Wenigstens eine Antwort :-)
Den Wiki Eintrag hab ich natürlich als erstes gelesen. Aber ehrlich : Der ist doch sehr schwammig.
Da kommt nicht gescheit raus, wie man die zwei Parameter von glPolygonOffset geschickt benutzt.

Gruß Andreas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Manchmal passiert es, dass Fragen übersehen werden und dann irgendwie in Vergessenheit geraten. :oops:

Aber auch ich habe keine genaue Ahnung was man genau einsetzen muss. Das letzte Mal das ich PolygonOffset benutzt habe ist auch schon ein paar Jahre her. Aber da habe ich es auch mit experimenteller Informatik gelöst. Was aber nicht unbedingt ein schöner Ansatz ist. Aber durch PolygonOffset hatte ich wiederrum dann andere Problem. In denen genau das Offset nicht erwünscht war.

Je nachdem was du machen möchtest genügt es vielleicht auch schon die Depthfunc anzupassen? Normal wird diese auf GL_LESS gestellt. Also alle Objekte müssen eine geringere Tiefe haben als bereits bestehende. Alternativ kannst du auch GL_LEQUAL benutzt. Dabei muss die Tiefe kleiner oder gleich sein. Das PolygonOffset macht ähnliches nur viel stärker. Was bei mir nicht immer ein Vorteil war.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 12:43 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Das ist doch ganz einfach:
Beim Zeichnen eines jeden Polygons/Linie/Punktes wird für jeden Pixel ein Tiefenwert errechnet. Um nun zu ermitteln, ob der Pixel zu zeichnen ist, wird ein Tiefentest durchgeführt. Gelingt der, wird der Pixel gezeichnet und der neue Wert in den Puffer übernommen.
Das PolygonOffset macht nun nix anderes, als den errechneten Tiefenwert des Pixels zu korrigieren, bevor der Test durchgeführt wird.
Der erste Parameter wird mit dem Tiefenwert multipliziert, der zweite aufaddiert, und zwar NACHDEM der Tiefenwert auf [0;1] für den Puffer skaliert wurde.
Das ominöse r in der Formel dient dazu, den Festen Wert zu normalisieren, d.h. er wird so klein gewählt, dass eine Angabe von 1 in units gerade noch so Auswirkung hat. Das r hängt also von znear und zfar ab, braucht Dich aber nicht zu interessieren.

Fazit: mit einer Angabe von 0,5 im zweiten Parameter schiebst Du deinen Rahmen eine halbe Einhet nach vorne, wirst also das z-fighting nich los. Hier solltest Du mind. eine 1 angeben. Die Angabe von 0,5 im ersten Parameter sorgt dafür, dass Deine Rahmen halb so weit vom Betrachter weg sind, als die eigentlichen Boxen. Hier wäre auch eine 1 angebracht.

_________________
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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.007s | 15 Queries | GZIP : On ]