3.4、OpenGLES_Ch3_3示例

摆弄一下例子OpenGLES_Ch3_3呈现的用户界面。它演示了各种效果,包括纹理的取样模式、纹理的循环模式,以及当一个纹理被映射到顶点并修改在视口中的位置时的图像失真。图3-5演示了几种效果。

图 3-5

图3-5 OpenGLES_Ch3_3示例的截图显示了失真、过滤器和循环模式图3-5中间的截图演示了一个GL_LINEAR过滤器放大一个小纹理来填充整个三角形的效果。另外两个截图显示的是GL_NEAREST过滤器的效果。

例子OpenGLES_Ch3_3向前一个例子创建的AGLKVertexAttribArrayBuffer类添加了一个“-reinitWithAttribStride:numberOfVertices:data:"方法。定期地用变化了的顶点位置重新初始化顶点数组缓存的内容以产生一个意在突出纹理失真的简单动画,这个失真是自然发生的几何纹理映射的一部分。

纹理取样模式和纹理循环模式被保存在OpenGLES上下文 的每个纹理的标识符中。换句话说,在上下文中的每个纹理缓存都有它自己相应的不依赖于任何其他的纹理缓存的模式。模式是通过glTexParameteri()函数来设置的,并且通常在一个纹理缓存被初始化以后就不会再更改它的模式了。但是,例子OpenGLES_Ch3_3修改了模式以响应用户的输人。这个例子使用下面的类别扩展了GLKit的GLKEffectProptyTexture类。


@implementation GLKEffectPropertyTexture (AGLKAdditions)
- (void)aglkSetParameter:(GLenum)parameterID
            value: (GLint )value; {
        glBindTexture(self.target, self.name);
        glTexParameteri(
        self.target,
        parameterID,
        value); ;
}
@end

方法“-aglkSetParameter:value:" 是使用aglk 前缀命名的,这样避免了任何未来的方法命名冲突的可能性。如果添加的方法简单地被叫做“-setParameter:value:",那么如 果苹果有一天用相同的名字添加了一个方法到GLKEffectPropertyTexture,这些方法就会发生冲突。Objective-C 在运行时最终会选择其中的一个方法,但是对于程序员来说:可能就很难分辨出运行的到底是哪一个实现了。

results matching ""

    No results matching ""