Registriert: Do Nov 17, 2005 14:40 Beiträge: 63 Wohnort: Dötlingen
hallo community,
ich habe mich heute an skyboxen versucht, und bin dabei leider auf ein problem gestoßen. an sich funktioniert alles ganz gut, aber an den kanten, wo die einzelnen quads der skybox aufeinandertreffen, entstehen immer hässliche fehler. im tutorial "skyboxen" löst sascha dieses problem indem er den TextureWrap auf GL_CLAMP_TO_EDGE setzt. ich schreiber aber in c++ und da scheint es diese konstante im glheader nicht zu geben. hat jemand eine idee wie ich trotzdem zu einem schönen ergebnis kommen kann?
Wenn ich als TextureWrap GL_REPEAT setze kommt es zu weißen, unregelmäßigen Streifen, benutze ich GL_CLAMP trennen schwarze linien die texturen, was bei einer skybox natürlich nicht erwünscht ist. mir ist auch aufgefallen, dass wenn ich die texturen mit GL_NEAREST filtere gar keine störungen an den kanten auftreten, allerdings sieht dann ja die ganze textur hässlich aus so solls ja auch nich sein... Bilder dazu im Anhang
Joshua
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Um GL_CLAMP einzusetzen kannst du mir mal den border-Parameter von glTexImage2D anschauen.
Wenn du den auf 1 setzt, kannst du eine Farbe angeben auf die geclampt wird. Ich bin mir grad nicht sicher, aber es könnte sein dass du für den Rand die Textur entsprechend verkleinern musst um hinterher einen 2^n-Wert zu erhalten.
Diese Farbe übergibst du dann an die Textur mittels glTexParameter und der Konstanten GL_TEXTURE_BORDER_COLOR.
Edit: Mir fällt grad auf dass das dein Problem eigentlich nicht wirklich löst, wenn der Streifen ne andere Farbe bekommt. Ansonsten bin ich grad etwas ratlos.
Registriert: Do Nov 17, 2005 14:40 Beiträge: 63 Wohnort: Dötlingen
das hilft leider nicht weiter. selbst wenn ich genau die himmelsfarbe treffen würde, ginge dann ein blauer streifen durch die wolken...
ich weiß ja selbst nicht was dieses GL_CLAMP_TO_EDGE macht, denn es funktioniert anscheinend nicht in c++. aber vielleicht heißt die konstante nur anders oder so...
ich hab mir mal die glBMP angeguckt und da kann man bei SetTextureWrap drei Konstanten als Parameter übergeben: GL_REPEAT, GL_CLAMP und GL_CLAMP_TO_EDGE. GL_REPEAT und GL_CLAMP funktionieren bei mir auch, nur das benötigte GL_CLAMP_TO_EDGE ist unbekannt...
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
GL_CLAMP_TO_EDGE ist doch nichts weiter als eine Konstante. Vielleicht ist sie in deinem Header einfach nicht definiert. Aber du kannst sie nachtragen. GL_CLAMP_TO_EDGE steht für den Wert 0x812F.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Nov 17, 2005 14:40 Beiträge: 63 Wohnort: Dötlingen
vielen dank, es geht und sieht herrlich aus hätte nicht gedacht, dass das so einfach geht, aber wenn das so ist, dann werde ich meine glheader mal ein bisschen aufwerten, erstmal GL_BGR reinschreiben
Ich gluabe das Problem ist dass GL_CLAMP_TO_EDGE zu OpenGL 1.2 gehört und daher nicht im Standard-Header enthalten ist. Du musst also eventuell noch GL/glext.h einbinden.
Registriert: Do Nov 17, 2005 14:40 Beiträge: 63 Wohnort: Dötlingen
okay, danke, so geht das auch. jetzt weiß ich auch wo der ganze fehlende opengl-kram ist, diesen header hatte ich bisher noch gar nicht realisiert, weil ich ihn bisher auch noch nicht gebraucht habe
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.