手动创建MipMap图像(iOS OpenGL)

时间:2013-08-25 05:58:29

标签: ios opengl-es

目前我正在使用以下代码加载纹理:

GLKTextureInfo * t = [GLKTextureLoader textureWithContentsOfFile:path options:@{GLKTextureLoaderGenerateMipmaps: [NSNumber numberWithBool:YES]} error:&error];

但是当我缩小图像(锯齿状的边缘)时,结果并不那么好。

我可以使用Adobe Illustrator等图像软件创建自己的mipmap吗?但这样做的规则是什么? 如何使用代码加载此图像?

谢谢!

- 已编辑 -

感谢您的回答,我使用了它:

GLuint texName;
glGenTextures(1, &texName);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

// load image data here
...

// set up mipmap
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData0);
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 128,128, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData1);
...
glTexImage2D(GL_TEXTURE_2D, 8, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData8);

1 个答案:

答案 0 :(得分:3)

是的,您可以手动制作mipmap并自行上传。如果您使用的是Illustrator,可能会有一些方法以特定分辨率输出图像。我对Illustrator并不熟悉,所以我不知道那部分是如何运作的。

获得各种分辨率后,您可以将其作为主图像的一部分上传。您可以使用glTexImage2D()将原始图像上传到纹理。然后,您可以使用glTexImage2D()上传其他mipmap级别,但将level参数设置为其他值。例如:

glTexImage2D (GL_TEXTURE_2D, level, etc...);

其中level是此特定图片的mipmap级别。请注意,您可能必须为mipmap正确设置各种纹理参数,例如:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, <whatever the max is here>);

有关详细信息,请参阅section on mipmaps on this page