在iOS中加载4通道纹理数据

我想从iOS中的文件加载4通道纹理数据,因此我将纹理视为(连续)地图
[0,1]x[0,1] -> [0,1]

如果我使用fileformat .png,XCode / iOS会将文件视为图像,因此将每个组件rgb与(预乘的alpha)相乘,从而破坏我的数据.我该怎么解决这个问题?例子可能是

>使用两个纹理与组件rgb(3通道)
> postdivide alpha
>使用其他文件格式

其中,我认为最好的解决方案是使用其他文件格式. GL压缩文件格式(PVRTC?)不是Apple平台独立的,并且似乎是低分辨率(4位)(reference).

编辑:
如果我自己的答案是真的,那么就无法在iOS中获得png的4通道数据.由于OpenGL是关于创建图像而不是呈现图像,因此应该可以以某种方式加载4通道数据. png是图像的文件格式(压缩取决于所有4个通道,但是一个通道的压缩独立于其他通道),因此有人可能会说我应该使用其他文件格式.那么我应该使用哪种其他压缩文件格式,哪些易于在iOS中阅读/集成?

更新:“组合”提到了一种加载4通道非预乘纹理的方法,所以我不得不给他正确的答案.但是,该解决方案有一些我不喜欢的限制.我的下一个问题是“从iOS中的png文件访问原始4通道数据”:)

我认为这是一个糟糕的库设计,无法读取4通道png数据.我不喜欢系统试图比我自己聪明.

解决方法

当您考虑PVRTC时,可以选择使用 GLKit.这包括 GLKTextureLoader,它允许您加载纹理而不预先乘以alpha.使用例如:
+ (GLKTextureInfo *)textureWithContentsOfFile:(NSString *)fileName options:(NSDictionary *)textureOperations error:(NSError **)outError

并传递包含以下内容的选项字典

GLKTextureLoaderApplyPremultiplication = NO

以上是来客网为你收集整理的在iOS中加载4通道纹理数据全部内容,希望文章能够帮你解决在iOS中加载4通道纹理数据所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。