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

Aktuelle Zeit: Mi Jul 16, 2025 17:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Okt 10, 2007 16:18 
Offline
DGL Member

Registriert: Di Sep 04, 2007 12:23
Beiträge: 2
Hallo zusammen,

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 10, 2007 17:16 
Offline
DGL Member
Benutzeravatar

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.
Code:
  1. glEnable(GL_CULL_FACE);

Bzw mit glDisable wieder zulassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 10, 2007 17:38 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 10, 2007 18:34 
Offline
DGL Member
Benutzeravatar

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:
  1. 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.  
  2.   // 1. Für deine Vorderseiten
  3.   //   Entweder:
  4.   glCullFace(GL_BACK); // Zeichnet die Rückseite NICHT
  5.   //   Oder:
  6.   glFrontFace(GL_CCW);
  7.   // 2. Für deine Rückseiten
  8.   //   Entweder:
  9.   glCullFace(GL_FRONT); // Zeichnet die Frontseite NICHT
  10.   //   Oder:
  11.   glFrontFace(GL_CW);
  12.  


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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 10, 2007 18:47 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 10, 2007 19:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Oh sorry, ich hatte nicht genau genug gelesen. :oops: Ok, aber meine Methode (vorteil such :wink: :D ) erspart das umdrehen der Koordinaten :wink:

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 10, 2007 22:14 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 11, 2007 09:07 
Offline
DGL Member

Registriert: Di Sep 04, 2007 12:23
Beiträge: 2
Danke Jungs für die schnellen Antworten!

Gruß
hbklink


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 11, 2007 13:28 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 11, 2007 16:03 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
.. 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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]