GLKIT常用API

GLKIT框架简述

    GLKit 框架的设计⽬标是为了简化基于OpenGL / OpenGL ES 的应⽤开发。它的出现加快OpenGL ES或OpenGL应⽤用程序开发。使⽤用数学库,背景纹理理加载,预先创建的着⾊色器器效果,以及标准视图和视图控制器器来实现渲染循环。

    GLKit框架提供了功能和类,可以减少创建新的基于着色器的应用程序所需的工作量,或者支持依赖早期版本的OpenGL ES或OpenGL提供的固定函数顶点或片段处理的现有应用程序。

    主要有GLKView 视图 和 GLKViewController视图控制器

    GLKit的功能有加载纹理,提供⾼性能的数学运算,提供常见着色器,提供视图和视图着色器。由于苹果弃用OpenGL ES , 改用Metal。但iOS开发者可以继续使用。但是由于GLKIT的局限性,无法处理很多自定义的东西,可能无法应用所有场景。

GLKit 纹理理加载

通过GLKTextureInfo 创建OpenGL 纹理理信息.

name : OpenGL 上下⽂文中纹理理名称

target : 纹理理绑定的⽬目标

height : 加载的纹理理⾼高度

width : 加载纹理理的宽度

textureOrigin : 加载纹理理中的原点位置

alphaState: 加载纹理理中alpha分量量状态

containsMipmaps: 布尔值,加载的纹理理是否包含mip贴图

NSString *filePath = [[NSBundle mainBundle]pathForResource:@"**" ofType:@"png"];

NSDictionary *options = @{GLKTextureLoaderOriginBottomLeft:@(1)};

GLKTextureInfo* textureInfo = [GLKTextureLoadertextureWithContentsOfFile:filePathoptions:optionserror:nil];

从⽂文件中加载处理理

+ textureWithContentsOfFile:options:errer: 从⽂文件加载2D纹理图像并从数据中创建新的纹理

- textureWithContentsOfFile:options:queue:completionHandler: 从⽂文件中异步加载2D纹理图像,并根据数据创建新纹理

从URL加载纹理理

- textureWithContentsOfURL:options:error: 从URL 加载2D纹理图像并从数据创建新纹理

- textureWithContentsOfURL:options:queue:completionHandler: 从URL异步加载2D纹理图像,并根据数据创建新纹理.

从内存中表示创建纹理理

+ textureWithContentsOfData:options:errer: 从内存空间加载2D纹理图像,并根据数据创建新纹理

- textureWithContentsOfData:options:queue:completionHandler:从内存空间异步加载2D纹理图像,并从数据中创建新纹理

GLKit 视图渲染

GLKView 常用API

初始化视图

- initWithFrame:context: 初始化新视图

delegate 视图的代理

配置帧缓存区对象

drawableColorFormat 颜⾊色渲染缓存区格式

drawableDepthFormat 深度渲染缓存区格式

drawableStencilFormat 模板渲染缓存区的格式

drawableMultisample 多重采样缓存区的格式

帧缓存区属性

drawableHeight 底层缓存区对象的⾼高度(以像素为单位)

drawableWidth 底层缓存区对象的宽度(以像素为单位)

绘制视图的内容

context 绘制视图内容时使⽤用的OpenGL ES 上下⽂文-

 bindDrawable 将底层FrameBuffer 对象绑定到OpenGL ES

enableSetNeedsDisplay 布尔值,指定视图是否响应使得视图内容⽆无效的消息

display ⽴立即重绘视图内容

snapshot 绘制视图内容并将其作为新图像对象返回

删除视图FrameBuffer对象

deleteDrawable 删除与视图关联的可绘制对象

绘制视图的内容

- (void)glkView:(GLKView*)viewdrawInRect:(CGRect)rect (必须实现代理理)

GLKViewController 常用API

GLKViewController 是管理理OpenGL ES 渲染循环的视图控制器器

- (void) update 更更新视图内容

- (void) glkViewControllerUpdate 配置帧速率

preferredFramesPerSecond 视图控制器调用视图以及更新视图内容的速率

framesPerSencond 视图控制器调用视图以及更新其内容的实际速率

GLKBaseEffect 常用API

GLKBaseEffect是一种简单光照/着⾊系统,⽤于基于着⾊器OpenGL 渲染

命名Effect

label 给Effect(效果)命名

配置模型视图转换

transform 绑定效果时应用于顶点数据的模型视图,投影和纹理变换

配置光照效果

lightingType ⽤用于计算每个⽚段的光照策略,GLKLightingType

GLKLightingType

GLKLightingTypePerVertex 表示在三⻆形中每个顶点执行光照计算,然后在三⻆形进⾏插值

GLKLightingTypePerPixel 表示光照计算的输入在三角形内插入,并且在每个片段执行光照计算

配置光照

lightModelTwoSided 布尔值,表示为基元的两侧计算光照

material 计算渲染图元光照使⽤用的材质属性

lightModelAmbientColor 环境颜⾊色,应⽤用效果渲染的所有图元.

light0 场景中第⼀一个光照属性 light1 场景中第二个光照属性 light2 场景中第三个光照属性

配置纹理理

texture2d0 第⼀一个纹理理属性 texture2d1 第⼆个纹理理属性

textureOrder 纹理理应⽤用于渲染图元的顺序

配置雾化

fog 应⽤用于场景的雾属性

配置颜⾊色信息

colorMaterialEnable 布尔值,表示计算光照与材质交互时是否使用颜色顶点属性

useConstantColor 布尔值,指示是否使用常量颜色

constantColor 不不提供每个顶点颜⾊数据时使⽤常量颜色

GLKBaseEffect在初始化完成后,要在- (void)glkView:(GLKView*)viewdrawInRect:(CGRect)rect进行准备绘制工作

- (void)glkView:(GLKView*)viewdrawInRect:(CGRect)rect{

    //1.

    glClear(GL_COLOR_BUFFER_BIT);

    //2.准备绘制

    [cEffect prepareToDraw];   

     //3.开始绘制

    glDrawArrays(GL_TRIANGLES, 0, 6);

}

注意在加载顶点坐标或者绘制纹理时

     (1)在iOS中, 默认情况下,出于性能考虑,所有顶点着色器的属性(Attribute)变量都是关闭的.

     意味着,顶点数据在着色器端(服务端)是不可用的. 即使你已经使用glBufferData方法,将顶点数据从内存拷贝到顶点缓存区中(GPU显存中).

     所以, 必须由glEnableVertexAttribArray 方法打开通道.指定访问属性.才能让顶点着色器能够访问到从CPU复制到GPU的数据.

     注意: 数据在GPU端是否可见,即,着色器能否读取到数据,由是否启用了对应的属性决定,这就是glEnableVertexAttribArray的功能,允许顶点着色器读取GPU(服务器端)数据。

如glEnableVertexAttribArray(GLKVertexAttribPosition);

typedef NS_ENUM(GLint, GLKVertexAttrib)

{

    GLKVertexAttribPosition, //顶点坐标

    GLKVertexAttribNormal,//法线坐标

    GLKVertexAttribColor,//颜色

    GLKVertexAttribTexCoord0,//纹理1

    GLKVertexAttribTexCoord1//纹理2

} NS_ENUM_AVAILABLE(10_8, 5_0); 

由此可见GLKIT只能够提供2个纹理数据来提取,多余两个纹理图就只能自己写OpenGL ES来完成。

你可能感兴趣的:(GLKIT常用API)