簡體   English   中英

OpenGL中的Mipmapping

[英]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)。 widthheight是原始紋理的尺寸(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM