目前我正在使用以下代码加载纹理:
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);
答案 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。