OpenGL ES

第三节—关于GLKit中的纹理

2020-09-15  本文已影响0人  L_Ares

本文为L_Ares个人写作,包括图片皆为个人亲自操作,如需转载请表明原文出处。

一、GLKTextureInfo

GLKTextureInfo : 纹理信息。

它继承于NSObject,并且实现了NSNSCopying协议,其定义的常见的属性全部为readonly(只读),下面介绍一下这些属性。

二、GLTextureLoader

GLTextureLoader : 加载纹理。

它简化了从各种资源文件中加载纹理的处理。

1.初始化

(1). 初始化一个新的纹理加载到对象中

- (instancetype)initWithSharegroup:(EAGLSharegroup *)sharegroup;

(2). 初始化一个新的纹理加载对象

- (instancetype)initWithShareContext:(NSOpenGLContext *)context;

2.加载纹理

关于纹理的加载有两种可能。并且在GLKit中,我们可以使用.png.jpg这样格式的文件作为纹理图,因为在GLKit的纹理加载过程中会做解压缩的操作,而使用纹理需要使用位图。这个解压缩的操作是利用CoreGraphic完成的,如果不用GLKit了,那么这个把压缩图片还原成位图的操作要自己实现。

<1>从文件中创建纹理

(1). 从文件同步加载2D纹理图像,并根据数据创建新的纹理。当操作正确完成时,会返回一个GLKTextureInfo(纹理信息对象),失败则会返回error信息或者nil:

+ (nullable GLKTextureInfo *)textureWithContentsOfFile: options: error: ;

(2). 从文件中异步加载2D纹理图像,并根据数据创建新的纹理。如果队列给NULL,会直接使用主队列。可以附带一个block块,完成其中操作。

- (void)textureWithContentsOfFile: options: queue: completionHandler: ; 

<2>从URL创建纹理

(1). 从URL同步加载2D纹理图像,并根据数据创建新的纹理。

+ (nullable GLKTextureInfo *)textureWithContentsOfURL: options: error: ;

(2). 从URL异步加载2D纹理图像,并根据数据创建新的纹理。

- (void)textureWithContentsOfURL: options: queue: completionHandler: ;

<3>从内存中创建纹理

如果你的内存中本身已经有了这个图片,就可以直接从内存中加载。

(1). 从内存空间中同步加载2D纹理图像,并根据数据创建新的纹理。

+ (nullable GLKTextureInfo *)textureWithContentsOfData: options: error: ;

(2). 从内存空间中异步加载2D纹理图像,并根据数据创建新的纹理。

- (void)textureWithContentsOfData: options: queue: completionHandler: ;

<4>从CGImageRef创建纹理

(1). 从CGImageRef同步加载2D纹理图像,并根据数据创建新的纹理。

+ (nullable GLKTextureInfo *)textureWithCGImage: options: error: ;

(2). 从CGImageRef异步加载2D纹理图像,并根据数据创建新的纹理。

- (void)textureWithCGImage: options: queue: completionHandler: ;

<5>文件创建立方体纹理

(1). 从文件同步加载单个或者6张立体纹理图像,并根据数据创建新的纹理。

如果Files后面时NSArray,则代表加载多张,如果是NSString则代表加载单张。

面的顺序:右(+x),左(-x),上(+y),下(-y),前(+z),后(-z)。

如果你把自己放在立方体里面考虑的话,坐标系要用左手坐标系。

相反的,如果你把自己放在立方体外面观察立方体,坐标系要用右手坐标系。

如果使用的是单张立体纹理图像加载,立体图像纹理要分裂成六个部分的图像。高度= 6 *宽度,或宽度= 6 *高度 的单个图像文件。

但是为了减少提取图像数据的性能开销,建议直接使用NSArray的。

+ (nullable GLKTextureInfo*)cubeMapWithContentsOfFiles: options: error: ;

(2). 从文件异步加载单个或者6张立体纹理图像,并根据数据创建新的纹理。

建议也是用NSArray的方式,原因同上。

- (void)cubeMapWithContentsOfFiles: options: queue: completionHandler: ;

<6>URL创建立方体纹理

(1). 从URL同步加载立体纹理图像,并根据数据创建新的纹理。

+ (nullable GLKTextureInfo*)cubeMapWithContentsOfURL: options: error: ;

(2). 从URL异步加载立体纹理图像,并根据数据创建新的纹理。

- (void)cubeMapWithContentsOfURL: options: queue: completionHandler: ;
上一篇下一篇

猜你喜欢

热点阅读