Seite 1 von 1
OpenGL Polygon Uebergaenge
Verfasst: 09.12.2012, 17:47
von adapto
Hallo *,
wenn ich zwei Polygone in OpenGL mit verschiedenen Farben zeichne und diese in eine Textur rendere wird an der Kante zwischen den beien geglaettet bzw OpenGL erzeugt an manchen Stellen einen Farbuebergang (siehe Bild), obwohl ich folgende Bedingungen gesetzt habe:
Code: Alles auswählen
glShadeModel(GL_FLAT);
glDisable(GL_LIGHTING);
glDisable(GL_MULTISAMPLE);
glDisable(GL_BLEND);
glDisable(GL_ALPHA_TEST);
Hat jemand eine Idee wie ich das deaktivieren kann?
Danke und Gruss,
adapto
Re: OpenGL Polygon Uebergaenge
Verfasst: 09.12.2012, 19:27
von Youka
Du meinst das Anti-aliasing über Multisampling, welches du mit glDisable(GL_MULTISAMPLE) deaktivieren möchtest.
Leider lässt sich über diesen Weg automatisches Multisampling nicht deaktivieren, da dein Kontext mit dieser Eigenschaft erstellt wurde und darauf beharrt.
Du könntest deinen Kontext ohne Multisampling erstellen oder über FBOs ohne Multisampling auf die Textur rendern.
Re: OpenGL Polygon Uebergaenge
Verfasst: 09.12.2012, 19:55
von adapto
Ich erzeuge einen eigenen Framebuffer und dann schalte ich das Multisampling aus. Also bevor ich in die Textur rendere mache ich folgendes:
Code: Alles auswählen
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glGenRenderbuffers(1, &dbo);
glBindRenderbuffer(GL_RENDERBUFFER, dbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, Width, Height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, dbo);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
und danach schalte ich den angegebenen Rest aus.
Danke.
P.s.: Der Context ist auch ohne Multisampling initialisiert:
Code: Alles auswählen
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
Re: OpenGL Polygon Uebergaenge
Verfasst: 10.12.2012, 11:41
von Youka
Dann würde ich meinen, dieser Farbverlauf auf deinem Bild im ersten Post entsteht beim Zeichnen deiner Textur auf ein Objekt, wobei die Textur mit einem bilinearen Filter skaliert wird.
Schau dir mal
glTexParameter, darunter den Bereich
GL_TEXTURE_MIN_FILTER, an.
Re: OpenGL Polygon Uebergaenge
Verfasst: 10.12.2012, 12:31
von adapto
Ich benutze hier keine Texturen sondern koloriere nur die Polygone.
Re: OpenGL Polygon Uebergaenge
Verfasst: 10.12.2012, 16:08
von PlainOldCJ
Hi,
was Youka meinte ist glaube ich folgendes:
Mit
Code: Alles auswählen
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0);
zeichnest du in eine Textur.
Wie zeichnest du dann den Inhalt dieser Textur auf den Bildschirm?
Re: OpenGL Polygon Uebergaenge
Verfasst: 10.12.2012, 17:16
von adapto
Achso... Ich speichere die Textur vorerst in eine Datei und schaue sie mir in Photoshop an :)
Aber kann es sein, das dabei dann etwas nicht stimmt:
Code: Alles auswählen
glReadPixels(0, 0,Width, Height, GL_RGB, GL_UNSIGNED_BYTE, pRGB);
Re: OpenGL Polygon Uebergaenge
Verfasst: 10.12.2012, 18:07
von adapto
Youka hat geschrieben:Dann würde ich meinen, dieser Farbverlauf auf deinem Bild im ersten Post entsteht beim Zeichnen deiner Textur auf ein Objekt, wobei die Textur mit einem bilinearen Filter skaliert wird.
Schau dir mal
glTexParameter, darunter den Bereich
GL_TEXTURE_MIN_FILTER, an.
Ok. Ich habe GL_TEXTURE_MIN_FILTER und GL_TEXTURE_MAG_FILTER auf GL_NEAREST gesetzt, aber es aendert sich leider auch hierbei nichts. Ich aendere die Texturgroesse nicht, sondern speichere sie direkt in eine Datei um diesen Fehler auszuschliessen.
Re: OpenGL Polygon Uebergaenge
Verfasst: 11.12.2012, 13:02
von joeydee
Versuch mal Antialiasing über den Treiber komplett auszuschalten, ob es das Problem trifft.
Und vielleicht ist hier noch was dabei:
glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
glDisable(GL_POLYGON_SMOOTH);//schaltet das erstere glaube ich sowieso aus, OGL ist lange her...
Versuch auch mal probehalber was mit Lines passiert (und den entsprechenden GL_LINES-Einstellungen)
Re: OpenGL Polygon Uebergaenge
Verfasst: 11.12.2012, 14:32
von adapto
Also bei dem ATI Treiber ist Aliasing auf "use application settings" eingestellt.
Mit glHint konnte ich auch keine Aenderung herbeifuehren. Wenn ich mit GL_LINES arbeite habe ich genau das gleiche Problem.
Danke.
Re: OpenGL Polygon Uebergaenge
Verfasst: 13.12.2012, 12:43
von joeydee
Das heißt also, eine einzelne Linie wird auch immer mit AA gezeichnet? Wie siehts auf dem Bildschirm aus, also ohne die gespeicherte Textur, ist AA an oder aus (manueller Screenshot)? Oder taucht das erst auf der Textur auf? Kannst du probehalber AA über den Treiber zwingend deaktivieren - wie siehts dann aus? Dann weißt du wenigstens ob du in der richtigen Richtung suchst.
Re: OpenGL Polygon Uebergaenge
Verfasst: 23.12.2012, 17:03
von adapto
Ich habe das Problem jetzt lange verdraengt weil ich noch was anderes programmieren musste, aber jetzt stehe ich wieder davor und komme nicht weiter. Also bei dem AMD Control Center kann man nur auf "Use Application Settings" setzen, man kann das nicht direkt ausschalten. Und wenn ich direkt in den Bildschirm rendere, dann passt das Bild nicht da rein da die aufloesung so gross ist. Das Bild wird dann herunterskaliert.
Re: OpenGL Polygon Uebergaenge
Verfasst: 23.12.2012, 21:21
von adapto
Und jetzt etwas ganz Verruecktes! Wenn man die Rendertextur von RGB auf RGBA umstellt, dann funktioniert es so wie gewollt. Hat vielleicht jemand eine Erklaerung dafuer?