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 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.
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.
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.
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.
Mitglieder in diesem Forum: 0 Mitglieder und 14 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.