C095c2e5f0b25e6f12959d503eda3cbb
Learn OpenGL 1. “五彩斑斓”的 GLKit

注:如无特殊说明,以下及后续的文章都是基于 Swift 5.0 开发。

什么是 GLKit

下面的英文介绍来源于苹果的官方文档。

Speed up OpenGL ES or OpenGL app development. Use math libraries, background texture loading, pre-created shader effects, and a standard view and view controller to implement your rendering loop.

提高使用 OpenGL ES 或者 OpenGL 开发 App 的效率。利用数学库,背景纹理加载,预加载着色器效果和标准视图/视图控制器来实现循环渲染。

简单来说就是 GLKit 帮我们降低了使用 OpenGL 的成本,简化了开发流程。

我们通过一个简单的例子来接触 GLKit

GLKit 的使用非常简单,我们只需要新建一个 ViewController 继承于 GLKViewController(仅此而已,是不是很简单)。这样,我们就能在 GLKit 提供的 func glkView(_ view: GLKView, drawIn rect: CGRect) 中实现对界面渲染的代码。

下面的代码可以在 https://github.com/xurunkang/learnopengl 中找到。

import UIKit
import GLKit

class L1ViewController: GLKViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. 设置当前 OpenGL 上下文运行的版本,这里选择的是 OpenGLES 2。
        // 至于 OpenGLES 123 之间的区别,可以自行 google。
        (self.view as! GLKView).context = EAGLContext(api: .openGLES2)!
    }

    override func glkView(_ view: GLKView, drawIn rect: CGRect) {
        // 2. 渲染我们想要的画面
        let randomColor = self.randomColor()

        // glClearColor 的命名可能会让人有点误解,实际上它的作用是设置背景颜色,并不是clear(清除)颜色。
        glClearColor(randomColor.r, randomColor.g, randomColor.b, 1)
        // glClear 的意思是清除屏幕当前颜色,将屏幕颜色还原为背景颜色(就是上面我们通过glClearColor设置的背景颜色)
        glClear(GLbitfield(GL_COLOR_BUFFER_BIT))
    }
}

private extension L1ViewController {
    // 随机颜色函数
    private func randomColor() -> (r: GLclampf, g: GLclampf, b: GLclampf) {
        let r = GLclampf(arc4random() % 256) / 255.0
        let g = GLclampf(arc4random() % 256) / 255.0
        let b = GLclampf(arc4random() % 256) / 255.0

        return (r, g, b)
    }
}

如果我们的代码不出问题,那我们运行起来就可以看到和下面视频中一样的效果。
<p align="center">
<video id="video" controls="" preload="auto" poster="https://images.xiaozhuanlan.com/photo/2019/995c74741a770dacc4297238805458c9.png">
<source id="mp4" src="https://images.xiaozhuanlan.com/photo/2019/c50b24dd0cbe066aa7f4b02cc645ac47.mp4" type="video/mp4"></video>
</p>

小结

通过上面的简单的例子,我们了解到怎么去运用 GLKit 把需要渲染的内容展示屏幕,并且学习到了两个简单 gl 的 API(OpenGL 的 API 一般都是以 gl 开头)。
- glClearColor(注意它是设置背景颜色,并不会起到 clear 的作用)
- glClear(清除当前屏幕颜色,并且还原为设置的背景颜色)

© 著作权归作者所有
这个作品真棒,我要支持一下!
🧀 专栏介绍 - 记录日常开发和学习中遇到的知识/问题 🚀 专栏方向 目前专注于 - OpenGL - ...
0条评论
top Created with Sketch.