我想从 iOS 中的文件加载 4 通道纹理数据,所以我将纹理视为(连续)贴图
[0,1]x[0,1] -> [0,1]x[0,1]x[0,1]x[0,1]
如果我使用 fileformat .png
,XCode/iOS 将文件视为图像,因此将每个组件rgb
与a
(预乘 alpha)相乘,从而破坏我的数据。我应该如何解决这个问题?例子可能是
- 使用两个带有组件的纹理
rgb
(3 通道) - 除法后阿尔法
- 使用其他文件格式
其中,我认为最好的解决方案是使用另一种文件格式。GL 压缩文件格式 (PVRTC?) 不是 Apple 平台独立的,并且似乎具有低分辨率(4 位)(参考)。
编辑:如果我自己在下面的回答是正确的,则无法在 iOS 中获取 png 的 4 通道数据。由于 OpenGL 是关于创建图像而不是呈现图像,因此应该可以以某种方式加载 4 通道数据。png 是图像的文件格式(压缩取决于所有 4 个通道但是一个通道的压缩独立于其他通道),所以有人可能会争辩说我应该使用另一种文件格式。那么我应该使用哪些其他压缩文件格式,哪些易于在 iOS 中读取/集成?
更新:“组合”提到了一种加载 4 通道非预乘纹理的方法,所以我必须给他正确的答案。但是,该解决方案有一些我不喜欢的限制。我的下一个问题是“从 iOS 中的 png 文件访问原始 4 通道数据”:)
我认为这是一个糟糕的库设计,无法读取 4 通道 png 数据。我不喜欢系统试图比我自己更聪明。