ios - 手动创建MipMap图像(iOS OpenGL)

标签 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);

最佳答案

是的,您可以手动制作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/

相关文章:

ios - 重置 NSOperation

ios - 使用 UIPasteboard 从 UIWebView 获取图像

android - Android 和 OpenGL-ES 上的 FingerPaint

iphone - 如何使用 OpenGL ES 2.0 旋转对象?

objective-c - 将参数传递给 Objective C 中的 JSON Web 服务

ios - 我如何才能检测到用户是否仍然在 firebase 中有一个身份验证 session ?

ios - PHAsset 视频压缩 iOS swift

ios - 自定义着色器 SCNProgram iOS 9 Scenekit

ios - 在 OpenGL ES 中隐藏部分图像

opengl-es - glVertexAttribPointer 说明