[Windows,OpenGL,SFML] scharfe Kanten mit glTexCoord2f (Pixel ausserhalb des ausgew. Bereichs "schwappen" ueber
-
Hallo,
der Titel ist nicht sonderlich toll gewaehlt, aber mir fehlen da momentan die Begrifflichkeiten um das korrekt zu beschreiben.
Screenshot vom Problem: http://xccv.de/jing/2011-09-05_1616.png
Wie man sieht kommen bei den Quadraten weiter hinten ein roter Bereich hinzu.Textur: http://xccv.de/jing/2011-09-05_1620.png
Die Textur ist ein 256x256 Pixel grosses Bild. Der gruene Punkt links oben liegt bei genau 64, 16. Der rechts unten bei 79, 31.//Laden der Textur:
GLuint tex = 0; { Image Image; if (!Image.LoadFromFile("e:\\terrain.png")) return EXIT_FAILURE; glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, 4, Image.GetWidth(), Image.GetHeight(), 1, GL_RGBA, GL_UNSIGNED_BYTE, Image.GetPixelsPtr()); printf("%d %d\n", Image.GetWidth(), Image.GetHeight()); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0x812F); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 0x812F); //gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Image.GetWidth(), Image.GetHeight(), GL_RGBA, GL_UNSIGNED_BYTE, Image.GetPixelsPtr()); }
glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, 1.0*width/height, 0.1, 1000.0); glMatrixMode(GL_MODELVIEW); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, tex); glColor4f(1.f, 1.f, 1.f, 1.f);
Zeichnen:
glNewList(1, GL_COMPILE); for(int xx=0;xx<300;xx+=2) { for(int zz=0;zz>-2000;zz-=1) { if(Randomizer::Random(0, 3) != 0) continue; glBegin(GL_QUADS); const float s = 1.0f / 256; glTexCoord2f(s*64, s*31); glVertex3f(xx, 0, zz); // links unten glTexCoord2f(s*64, s*16); glVertex3f(xx, 1, zz); // links oben glTexCoord2f(s*79, s*16); glVertex3f(xx + 1, 1, zz); // rechts oben glTexCoord2f(s*79, s*31); glVertex3f(xx + 1, 0, zz); // rechts unten glEnd(); } } glEndList();
Nehme ich statt glTexImage2D => gluBuild2DMipmaps, dann ist die Textur in der richtigen Groesse auf dem Quadrat. Aber auch wieder ein roter Rand ist zu sehen:
http://xccv.de/jing/2011-09-05_1634.png
Gibt es da irgendein Flag fuer scharfe Kanten? Also so dass nicht die benachbarten Pixel mit in die Textur hinueberschwappen? Oder was mache ich falsch?
Statt const float s = 1.0f / 256; habe ich auch erst 1.0f / 16 probiert, mit dem gleichen Erfolg, nur falls Hinweise da aufkommen.
Vielen Dank!
Oliver
-
Durch Update auf SFML2 ist der Fehler verschwunden. Aber keine Ahnung so recht warum.