wie kann ich Vorder- und Rückseite eines Polygons unterschiedliche Farben zuweisen?
Ist wahrscheinlich ne total bescheuerte Frage, aber leider hab ich bisher noch keine lösung dafür gefunden.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Herzlich willkommen im Forum.
Das geht so ohne weiteres nicht, denn du kannst einem Polygon keine Farbe zuweisen sonern nur den Punkten einer Fläche und somit hat vorder und Rückseite immer die gleiche Farbe.
Du musst also deine Fläche zwei mal zeichnen. Ein mal mit der Oberseite nach "vorne" und einmal mit der Oberseite nach hinten. Wenn du dann die Rückseiten deaktivierst, hat es den Anschein als sei es nur eine Fläche. Obwohl es in Wirklichkeit 2 sind.
Das Zeichnen der Rückseite kannst du wie folgt verhindern.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Rein theoretisch wäre das möglich. Im OpenGL-Fragmentshader gibt es die Variable gl_FrontFacing mit der man feststellen kann ob das aktuelle Fragment zu einer Primitiven gehört die nach vorne oder nach hinten zeigt. Man könnte dann also im Shader auf diese Variable prüfen und dann je nach Fall eine andere Farbe wählen. Allerdings wird gl_FrontFacing nicht von allen Implementationen unterstützt. und man landet im schlimmsten Fall im Softwaremodus.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Lossy eX hat geschrieben:
Das Zeichnen der Rückseite kannst du wie folgt verhindern.
Code:
glEnable(GL_CULL_FACE);
Bzw mit glDisable wieder zulassen.
Um unnötiges Doppelzeichnen und eventuell Z-Fighting oder gar fehlgeschlagenen Tiefentest zu vermeiden, würde ich eher das umstellen der Front/Back-Erkennung auf CW/CWW oder das umschalten des Cullings generell:
Code:
// 1. Für deine Vorderseiten
// Entweder:
glCullFace(GL_BACK);// Zeichnet die Rückseite NICHT
// Oder:
glFrontFace(GL_CCW);
// 2. Für deine Rückseiten
// Entweder:
glCullFace(GL_FRONT);// Zeichnet die Frontseite NICHT
// Oder:
glFrontFace(GL_CW);
Du solltest immer nur eine der beiden Methoden verwenden, da es sonst zur verwirrung oder fehlern kommen kann.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Lord Horazont: Verstehe ich nicht ganz. So musst du doch auch 2 Mal zeichnen und hast zusätzlich noch state changes die du in jedem Fall wieder zurücksetzen musst. Und Z-Fighting schließt sich eigentlich aus, da sowieso nur eine von beiden Seiten sichtbar ist.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Oh sorry, ich hatte nicht genau genug gelesen. Ok, aber meine Methode (vorteil such ) erspart das umdrehen der Koordinaten
Ich hatte nur das glEnable(...) gesehen und dachte, du wolltest nur einmal die Fläche ohne und einmal mit BFC zeichnen, das hätte dann natürlich zu problemen führen können.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
glFrontFace(GL_CW);
Danke für die Funktion. Die kannte ich noch gar nicht. Ich dachte schon dass ich frontfaceculling aktivieren muss, nur weil ich ein linkshändiges Koordinatensystem habe.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Frontfaceculling? Es gibt in OGL nur Backface-Culling. Die Frage ist einfach nur wo hinten ist.
Es lohnt sich vielleicht einfach mal im Wiki die Funktionsübersicht durchzulesen. Einfach um mal zu gucken obs interessant klingende FUnktionen gibt die man noch nicht gesehen hat. Wenn DGL sowas hat, sollte man das auch nutzen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
.. und warum kann ich dann bei glCullFace GL_FRONT oder GL_BACK angeben?
_________________ 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 8 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.