[英]Mipmapping in OpenGL
使mipmap正常工作非常麻煩。 我正在使用OpenGL 1.1,並且沒有glu,因此我正在使用以下紋理初始化代碼:
glGenTextures(1,&texname); glBindTexture(GL_TEXTURE_2D,texname); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST); w=width;h=height; for(int i=0;i<mipmaps;i++,w/=2,h/=2) glTexImage2D(GL_TEXTURE_2D,i,GL_RGBA8,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,tex[i]);
變量:
// data types: unsigned long int *tex[20]; int mipmaps, width, height, w, h; GLuint texname;
tex
是一個數組,其中包含紋理mipmap像素數組的列表。 正確處理了mipmap(我分別對其進行了測試)。 mipmaps
是將原始圖像縮小為1x1像素紋理的mipmap的數量(原始紋理為256x256-因此在代碼中為8)。 width
和height
是原始紋理的尺寸(256x256)。
結果是它甚至不使用紋理。 一切都顯示為淺灰色(由於光照而呈灰色)。
有什么我要忘記的嗎? 我已經檢查了此參考資料 ,但找不到任何沖突。
其他詳細信息:總的來說,我將啟用GL_DEPTH_TEST,GL_TEXTURE_2D,GL_LIGHTING,GL_CULL_FACE,GL_FOG(以及GL_LIGHT0,GL_LIGHT1可能沒有什么不同)。 另外,如果可能與Mesa 3D的OpenGL(Mesa 4.0版轉換為OpenGL 1.3版)一起使用,則可以使用它。
編輯:
問題是,當我將GL_NEAREST_MIPMAP_NEAREST更改為GL_NEAREST時,紋理工作正常(不使用mipmap)。 因此,我看不到其他任何代碼-至少我想不到其他任何代碼。
mipmaps的值為8。您的圖像為256x256。 因此,您應該具有9個級別的mipmapping(256、128、64、32、16、8、4、2、1)。 如果丟失了,您將失去質感。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.