[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.


Anmelden zum Antworten