1

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

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

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

我可以使用 Adob​​e 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);
4

1 回答 1

4

是的,您可以手动制作 mipmap 并自己上传。如果您使用的是 Illustrator,大概它有某种方法可以以特定分辨率输出图像。我对 Illustrator 不太熟悉,所以我不知道这部分是如何工作的。

获得各种分辨率后,您可以将它们作为主图像的一部分上传。您可以使用glTexImage2D()将原始图像上传到纹理。然后,您可以使用 上传其他 mipmap 级别glTexImage2D(),但将 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>);

有关详细信息,请参阅此页面上有关 mipmap 的部分

于 2013-08-25T07:11:23.590 回答