我在OpenGL中執行mipmapping時遇到問題。我正在使用OpenFrameworks並修改了ofTexture類來支持mipmap的創建和呈現。OpenGL Mipmapping:OpenGL如何決定地圖級別?
下面的代碼是從類(稍加修改爲清楚起見)的原始紋理創建代碼:
glEnable(texData.textureTarget);
glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
glTexSubImage2D(texData.textureTarget, 0, 0, 0, w, h, texData.glType, texData.pixelType, data);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glDisable(texData.textureTarget);
這是我的版本與紋理貼圖支持:
glEnable(texData.textureTarget);
glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
gluBuild2DMipmaps(texData.textureTarget, texData.glTypeInternal, w, h, texData.glType, texData.pixelType, data);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glDisable(texData.textureTarget);
的代碼不會產生錯誤(gluBuild2DMipmaps返回'0'),紋理渲染沒有問題。但是,我沒有看到任何區別。
我渲染的場景包含z = 0處的「平面,方形瓷磚」。這基本上是一個2D場景。在繪製貼圖之前使用「glScale()」放大和縮小。當我縮小時,瓦片紋理的像素開始「跳舞」,表明(據我所知)未經過濾的紋理查找。見:http://www.youtube.com/watch?v=b_As2Np3m8A 25秒。
我的問題是:因爲我不移動相機位置,但只使用整個場景的縮放比例,這是否意味着OpenGL無法決定合適的mipmap級別並使用完整的紋理大小(級別0)?
保羅
謝謝,我試過MIN/MAX_LOD選項,但再次沒有效果。但我注意到,glTexSubImage2D()不支持mipmapping。我已將其更改爲glTexImage2D()調用,並遵循有關自動生成mipmap的建議。仍然沒有成功,沒有視覺差異,像素仍然閃爍。我的驅動程序支持OpenGL2.1,因此它應該可以工作。我很困惑,嘿嘿。 – Droozle 2010-05-26 10:15:22