目前,我正在使用此代码加载纹理:
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);
最佳答案
是的,您可以手动制作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。
关于ios - 手动创建MipMap图像(iOS OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426208/