[OpenGL] "Abstand" zwischen Texturen
-
Ich wollte gerade einmal eine Skybox schreiben, und dabei ist mir aufgefallen, dass die Texturen nicht bündig aneinander liegen. Das heißt, man sieht die Kanten der Box (ein 1 bis 2 Pixel breiten Streifen). Woran liegt das und wie kann ich es unterbinden?
Meine Funktion zum Erstellen der Texturen:
// ... glGenTextures(1, &textur); glBindTexture(GL_TEXTURE_2D, textur); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, Konv->w, Konv->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, Konv->pixels); // ...
-
Entweder an den Textur-Koordinaten oder weil der Linear-Filter die Ränder "verwischt" (Kommt auf die Textur an).
-
In der Tat sieht es bei genauem Hinsehen so aus, als wäre jeweils eine Pixelspalte vom linken an den rechten Rand gerutscht oder umgekehrt. Aber wie kann das passieren? Und was soll ich dagegen tun?
// ... (pos = 1.0f) glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-pos, -pos, -pos); glTexCoord2f(0, 1); glVertex3f(-pos, pos, -pos); glTexCoord2f(1, 1); glVertex3f( pos, pos, -pos); glTexCoord2f(1, 0); glVertex3f( pos, -pos, -pos); glEnd(); glBindTexture(GL_TEXTURE_2D, mTextur[1]); glBegin(GL_QUADS); glTexCoord2f(1, 0); glVertex3f(-pos, -pos, pos); glTexCoord2f(1, 1); glVertex3f(-pos, pos, pos); glTexCoord2f(0, 1); glVertex3f( pos, pos, pos); glTexCoord2f(0, 0); glVertex3f( pos, -pos, pos); glEnd(); //...
-
du behandelst die Ränder falsch: CLAMP
-
Ich habe also ...
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);...beim Erstellen der Texturen eingefügt und der Fehler ist behoben.
Danke!
-
Heute musste ich feststellen, dass auf manchen Grafikkarten (speziell habe ich es bei einer GF 5200 gesehen, bei einer zweiten GF 5200 war das Problem nicht da) wieder ein 1-Pixel-breiter, schwarzer Streifen zwischen den Texturen ist.
Wo könnte hier das Problem liegen, wie kann ich etwas dagegen tun?