2015-01-06 302 views
0

我正在使用最新版本的OpenGL。但是,當我創建使用下面的函數是用C++紋理:OpenGL渲染紋理不清

GLuint Texture::Generate2dTexture(int width, int height, char* data, int length) 
{ 
    GLuint textureIndex; 

    glGenTextures(1, &textureIndex); 
    glBindTexture(GL_TEXTURE_2D, textureIndex); 
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, data); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    return textureIndex; 
} 

和渲染使用:

void Renderer::DrawRectangle(GLuint textureID, RECTD rect) 
{ 
    glBindTexture(GL_TEXTURE_2D, textureID); 
    glBegin(GL_QUADS); 
    { 
     glTexCoord2f(0.0f, 1.0f); 
     glVertex2d(rect.left, rect.top); 
     glTexCoord2f(0.0f, 0.0f); 
     glVertex2d(rect.left, rect.bottom); 
     glTexCoord2f(1.0f, 0.0f); 
     glVertex2d(rect.right, rect.bottom); 
     glTexCoord2f(1.0f, 1.0f); 
     glVertex2d(rect.right, rect.top); 
    } 
    glEnd(); 
} 

他們出現在渲染之後不清楚。它看起來與由M $製作的圖像查看器中的外觀完全不同。

什麼原因導致發生以及如何避免風險?

+2

最新版本,仍然使用直接渲染? –

+0

我想你的意思是「模糊」的「不清楚」。如果是這樣的話,那是因爲OpenGL的雙線性插值。如果你不想插值發生,使用GL_NEAREST而不是GL_LINEAR。但是,除非將像素與像素對齊,否則紋理很可能看起來非常難看。 – Tibo

+0

@ratchetfreak idk,我只是用這樣的代碼 – PENGUINLIONG

回答

1

檢查圖片的尺寸。大多數圖像加載器會期望圖像以2的冪次呈現。因此,8x8像素的圖像應該看起來清晰(而不是伸出或亂碼)。嘗試剪切圖像到32x32或128x128等,看看是否有幫助。如果你想要的圖像無法表示高度=寬度,你仍然可以調整畫布,使其像128x128一樣,然後使用UV座標獲取想要的紋理部分。另外,我認爲如果你禁用雙線性過濾,任何模糊都應該注意: glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

請注意這不是一個確定的答案 - 我沒有足夠的代表評論...

+0

true,許多GL 3.x和GL 4。 x卡片在使用NPOT2圖像時會遇到很多問題,特別是在使用不推薦使用的管道時,因爲它們不會修復已棄用API的驅動程序的錯誤 – GameDeveloper