美文网首页OpenGL ES
第六节—关于GLKBaseEffect

第六节—关于GLKBaseEffect

作者: L_Ares | 来源:发表于2020-09-17 15:03 被阅读0次

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

最开始的第一节就说过,在OpenGL ES下,你想要实现一些效果,需要你自己实现顶点着色器和片元着色器。

在GLKit中它帮助我们封装了一些常用效果相关的着色器,用来实现一些常用效果。

而本节的GLKBaseEffect类,就是GLKit框架中,使用的最高频率的基础效果类。它简化了目前许多OpenGL应用程序常见的视觉效果

GLKBaseEffect提供了一些光照和着色的功能。

下面直接说这个类的头文件中给我们开放了什么属性和方法。

一、命名

给这个效果命名。

@property (nullable, nonatomic, copy) NSString *label;

二、配置模型视图转换

比如模型视图,投影,纹理和派生矩阵转换。

@property (nonatomic, readonly) GLKEffectPropertyTransform *transform;     

三、配置光照效果

类型是个枚举,包含两个枚举值。

GLKLightingTypePerVertex : 在三角形的每个顶点上执行光照计算,然后在三角形上进行插值。

GLKLightingTypePerPixel : 把光照计算的输入插入到三角形中,然后在每个片段去执行光照计算。

@property (nonatomic, assign) GLKLightingType lightingType; 

四、配置光照

1. lightModelTwoSided

是否为图元的两侧计算光照。如果为GL_TRUE,并且渲染的是图元背面,则通过求该图元的表面法线反转去计算光照值。(此处是根据苹果官方文档,我自己翻译的,后续在实际操作中,我将试探一下到底是怎么求得的)。

默认值是GL_FALSE。(我觉得如果非要用,又不知道这个的特性和原理,就不修改这个默认值最好)。

@property (nonatomic, assign) GLboolean lightModelTwoSided;

2. material

计算渲染图元的光照时,可以设置的材料属性。

@property (nonatomic, readonly) GLKEffectPropertyMaterial *material;

3. lightModelAmbientColor

环境颜色。

@property (nonatomic, assign) GLKVector4 lightModelAmbientColor;

4. light

场景中的三个光照属性。GLKBaseEffect只有这三个光照属性,如果你要设置4个的话,那么就不能应用GLKBaseEffect

这时候就需要自己来自定义着色器来完成。

这也说明了GLKBaseEffect只是GLKit帮我们做的一些简单的封装,当遇到复杂的情况的时候,还是要自己来实现。

@property (nonatomic, readonly) GLKEffectPropertyLight  *light0, *light1, *light2;

5. texture2d

2D纹理属性,也有两个,有顺序的。也是一个情况,只能处理两个纹理,所以你要使用超过2个纹理的话,还是要自己来做,不能用GLKBaseEffect。

@property (nonatomic, readonly) GLKEffectPropertyTexture  *texture2d0, *texture2d1;

你可以设置以下属性里面Array元素的顺序来确定渲染图元的纹理的顺序。

@property (nullable, nonatomic, copy) NSArray<GLKEffectPropertyTexture*> *textureOrder;

五、配置雾化

应用于场景的雾化属性。

@property (nonatomic, readonly) GLKEffectPropertyFog *fog;

六、配置颜色信息

**1.colorMaterialEnabled **

计算光照和材质交互的时候,要不要使用颜色顶点属性。

@property (nonatomic, assign) GLboolean colorMaterialEnabled;

2. useConstantColor

是否使用常量颜色。

@property (nonatomic, assign) GLboolean useConstantColor; 

3. constantColor

不提供每个顶点的颜色数据时,要用的常量颜色值。

@property (nonatomic, assign) GLKVector4 constantColor; 

七、准备绘制效果

同步所有更改的效果状态,让他们保持一致。

在我们执行渲染之前,一定要准备渲染。

- (void) prepareToDraw;

相关文章

网友评论

    本文标题:第六节—关于GLKBaseEffect

    本文链接:https://www.haomeiwen.com/subject/vhlqyktx.html