当前位置: 首页 > 知识库问答 >
问题:

OpenGL中的MipMap

谷玉韵
2023-03-14

我很难让mipmaps正常工作。我使用的是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像素纹理的mipmaps数(原始纹理为256x256-因此在代码中此时为8)<代码>宽度和高度是原始纹理(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_NEARESTGL_NEAREST时,纹理工作正常(不使用mipmap)。所以,我看不出它怎么可能是任何其他代码——至少我想不出它可能是什么。

共有1个答案

范轶
2023-03-14

mipmap的值是8。你的图像是256x256。因此,您应该有9个级别的mipmap(256,128,64,32,16,8,4,2,1)。如果少了一个,你会失去你的纹理。

 类似资料:
  • 问题内容: 我想在Linux中打开不带X的OpenGL上下文。有什么办法吗? 我知道集成英特尔图形卡硬件是可能的,尽管大多数人的系统中都装有Nvidia卡。我想要一个适用于Nvidia卡的解决方案。 如果除了通过集成的Intel硬件没有别的方法,我想知道如何使用这些硬件是可以的。 X11协议本身太大且太复杂。它提供的鼠标/键盘/平板电脑输入多路复用对于现代程序来说太过淡了。我认为这是阻止Linux

  • 我试图在屏幕上显示灰度纹理。我通过 colorData是一个浮点数[512*512],其值介于0.0和1.0之间。 渲染时,我使用: 着色器。GetUniform位置是我们在大学使用的库的一个函数。它本质上与glGetUniform位置(着色器,“文本采样器”)相同,所以不要被它迷惑。 我通过三角形条渲染两个三角形。我的片段着色器是: 我知道三角形的渲染是正确的(例如,如果我使用vec4(1.0,

  • 在开始这段旅程之前我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。 OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于

  • OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域 中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处

  • OpenGL 是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

  • 最近的Android NDK r9推出了对OpenGL ES3.0的支持。有一个示例,它演示了如何从JNI/本机代码中使用OpenGL ES3.0。可以用两种不同的方式构建示例: null 初始化如下所示: 如何完全省略静态链接并从动态加载GLES 2或3?