2012-11-20 24 views
2

我想使用Slick的Texture類將兩個不同的紋理綁定到一個立方體。 的問題是,我綁定到立方體的第一紋理顯示正確的,即按像素而另外一個我綁定到立方體的兩側是模糊的,因爲如果我沒有進入一個光滑的紋理模糊,一個不是

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

這是如果要同時紋理是「模糊」正如你所說,你需要在每個紋理單獨綁定,並調用以下功能呈現立方體

public void render(){ 
    float x = coordinate.x; 
    float y = coordinate.y; 
    float z = coordinate.z; 

    top.bind(); 
    glBegin(GL_QUADS); 

     //TOP 
     glNormal3f(0f, 1f, 0f); 
     glTexCoord2f(0f, 0f); 
     glVertex3f(x,y,z); 
     glTexCoord2f(0f, 1f); 
     glVertex3f(x, y, z+1); 
     glTexCoord2f(1f, 1f); 
     glVertex3f(x+1, y, z+1); 
     glTexCoord2f(1f, 0f); 
     glVertex3f(x+1, y, z); 
    glEnd(); 

    bottom.bind(); 
    glBegin(GL_QUADS); 
     //BOTTOM 
     glNormal3f(0f, -1f, 0f); 
     glTexCoord2f(0f, 0f); 
     glVertex3f(x,y-1,z); 
     glTexCoord2f(0f, 1f); 
     glVertex3f(x, y-1, z+1); 
     glTexCoord2f(1f, 1f); 
     glVertex3f(x+1, y-1, z+1); 
     glTexCoord2f(1f, 0f); 
     glVertex3f(x+1, y-1, z); 
    glEnd(); 

    sides.bind(); 
    glBegin(GL_QUADS); 
     //BACK 
     glNormal3f(0,0,-1); 
     glTexCoord2f(0f, 0f); 
     glVertex3f(x,y,z); 
     glTexCoord2f(1f, 0f); 
     glVertex3f(x+1, y, z); 
     glTexCoord2f(1f, 1f); 
     glVertex3f(x+1, y-1, z); 
     glTexCoord2f(0f, 1f); 
     glVertex3f(x, y-1, z); 

     //FRONT 
     glNormal3f(0,0,1); 
     glTexCoord2f(0f, 0f); 
     glVertex3f(x,y,z+1); 
     glTexCoord2f(1f, 0f); 
     glVertex3f(x+1, y, z+1); 
     glTexCoord2f(1f, 1f); 
     glVertex3f(x+1, y-1, z+1); 
     glTexCoord2f(0f, 1f); 
     glVertex3f(x, y-1, z+1); 

     //LEFT 
     glNormal3f(-1,0,0); 
     glTexCoord2f(0f, 0f); 
     glVertex3f(x,y,z); 
     glTexCoord2f(0f, 1f); 
     glVertex3f(x, y-1, z); 
     glTexCoord2f(1f, 1f); 
     glVertex3f(x, y-1, z+1); 
     glTexCoord2f(1f, 0f); 
     glVertex3f(x, y, z+1); 

     //RIGHT 
     glNormal3f(1,0,0); 
     glTexCoord2f(0f, 0f); 
     glVertex3f(x+1,y,z); 
     glTexCoord2f(0f, 1f); 
     glVertex3f(x+1, y-1, z); 
     glTexCoord2f(1f, 1f); 
     glVertex3f(x+1, y-1, z+1); 
     glTexCoord2f(1f, 0f); 
     glVertex3f(x+1, y, z+1); 
    glEnd(); 

} 
+0

您是否爲這兩種紋理調用glTexParameteri? –

+0

我必須嗎?我應該在哪裏致電?加載紋理後? – user1839433

+1

是的,你需要爲每個紋理。這不是一個全球性的設置。在調用glBindTexture之後執行它。 –

回答

2

的代碼。

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

如果你要他們像素化/「不模糊」,你可以改用以下函數。

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

請記住,您需要單獨調用它們,就像這樣。

texture1.bind(); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

texture2.bind(); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
+0

我認爲你有最近和線性混合起來。線性提供了「模糊」的效果,而最接近的提供了像素效果。 圖像過濾:http://slick.ninjacave.com/wiki/index.php?title=Image#Image_Filtering – Samich

+0

@Samich感謝您指出這一點,它只是我的一個錯字。 – Vallentin