Fehler bei der Anzeige von OpenGL Grafiken[c++]



  • Hallo alleseits,
    Ich bin gerade dabei eine Tileengine mit OpenGL zu schreiben. Daher ich lade ein Bild in denn meine Tiles drin sind ein. Daraufhin erstelle ich eine Karte mit 20*15 Rechtecken, auf welche denn die jeweiligen Tiles abgebildet werden sollen. Funktioniert bisher ganz gut nur entsteht dabei ein kleines Problem das weg muss.

    http://img128.imageshack.us/my.php?image=fehlerbu3.jpg Wie man hier sehen kann funktioniert das ganze auch schon recht gut nur, dass zwischen denn einzelnen Tiles diese Striche entstehen. Diese kommen von denn Tiles die daneben liegen. Eigendlich ist das Programm so eingestellt, das die Tiles 8*8 Pixel groß sind und nur dieser Bereich angezeigt werden soll, doch aus irgendeinem Grund zeigt er noch einen gequetschten Pixel der anliegenden Tiles an. Ich bin mir eigentlich sicher, dass es irgendeine Funktion von OpenGL ist die dieses Spektakel verursacht, nur weiß ich leider nicht welche. Ich hoffe ihr könnt mir weiterhelfen. Hier habt ihr zudem die Codes:

    int OGL::InitGL()
    {
    	glEnable(GL_TEXTURE_2D);
    	glShadeModel(GL_FLAT);
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    	glClearDepth(1.0f);
    	glEnable(GL_DEPTH_TEST);
    	glDepthFunc(GL_LEQUAL);
    	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    	return true;
    }
    
    int OGL::ReSizeGLScene(GLsizei width, GLsizei height)
    {
    
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glViewport(0, 0, (GLsizei) width, (GLsizei) height);
    	gluOrtho2D(0.0f, 20.0f, 0.0f, 15.0f);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	return true;
    }
    
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    for (int i=0; i<10; i++)
    {
       for (int j=0; j<10; j++)
       {
            tile = map[i][j];
            glBegin(GL_QUADS);
    	glTexCoord2f(0.0f+0.125f*tile, 0.875f);glVertex2f( 0.0f+j,  9.0f-i);
    	glTexCoord2f(0.125f+0.125f*tile, 0.875f);glVertex2f( 1.0f+j,  9.0f-i);
    	glTexCoord2f(0.125f+0.125f*tile, 1.0f);glVertex2f( 1.0f+j,  10.0f-i);
    	glTexCoord2f(0.0f+0.125f*tile, 1.0f);glVertex2f( 0.0f+j,  10.0f-i);
    	glEnd();
       }
    }
    


  • Das kommt vermutlich vom Filtering. Schalt das doch mal ab.



  • Vielen Dank lag wirklich an der Filterung.
    Nachdem ich die Textur gebunden habe musste ich die Filterung auf GL_NEAREST setzen und nicht GL_LINEAR.

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    

    Hätte auch selbst drauf kommen können^^.


Anmelden zum Antworten