tel*_*one 5 textures ios opengl-es-2.0 premultiplied-alpha
我想从iOS中的文件加载4通道纹理数据,因此我将纹理视为(连续)地图
[0,1]x[0,1] -> [0,1]x[0,1]x[0,1]x[0,1]
Run Code Online (Sandbox Code Playgroud)
如果我使用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数据.我不喜欢系统试图比我自己聪明.
当您考虑 PVRTC 时,使用GLKit可能是一种选择。这包括GLKTextureLoader,它允许您加载纹理而无需预乘 alpha。使用例如:
+ (GLKTextureInfo *)textureWithContentsOfFile:(NSString *)fileName options:(NSDictionary *)textureOperations error:(NSError **)outError
Run Code Online (Sandbox Code Playgroud)
并传递一个包含以下内容的选项字典:
GLKTextureLoaderApplyPremultiplication = NO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |