OpenGL 学习笔记 01 —— macOS 上 OpenGL 环境的搭建及简单图形的绘制

初识 OpenGL

OpenGL, 全称 Open Graphics Library, 即开放式图形库, 是行业领域中最为广泛接纳的 2D/3D 图形 API.

作为一名 iOS 开发人员, 学习 OpenGL 知识后, 可以从事的行业主要有地图底层渲染, 直播, 图片美化等.

在 macOS 上搭建 OpenGL 开发环境

所谓工欲善其事, 必先利其器, 进行 OpenGL 开发之前, 需要先搭建 OpenGL 开发环境. macOS 上搭建 OpenGL 开发环境的方式主要有手动下载代码库使用 homebrew 安装两种. 这里使用的是手动下载的方法进行搭建.

手动下载代码库

OpenGL 开发中使用到的库主要有 glewGLTools 两个, 代码可以直接从文末的 Demo 中直接下载.

1. 新建项目

打开 Xcode, 选择 Create a new Xcode project(或使用 command+shift+n) -> macOS -> Cocoa App

2. 添加 OpenGLGLUT

点击 project, 选择 Build Phases -> Link Binary With Libraries -> +, 分别添加 OpenGL.frameworkGLUT.framework 两个库

3. 手动添加代码库

右键点击 -> Add Files to ..., 选择事先下载好的代码库中的 include 文件夹(或者直接将include 拖拽到项目中), 同时勾选 Copy items if needed

使用同样的方法将 libGLTools.a 添加到 Frameworks 文件夹中

4. 添加 Header Search Paths

将 GLTools.h 和 glew.h 的路径添加到 Header Search Paths 中

5. 删除系统生成的文件并创建 main.cpp 文件

选中系统自动生成的 AppDelegate.h, AppDelegate.m, ViewController.h, ViewController.mmain.m 文件并删除, 然后创建 main.cpp 文件, 创建时取消选中 Also create a header file

6. 编写代码

main.cpp 中敲入以下代码, 编译时会报 error, 此时只需将报错信息中的 import 将 <> 改为 "" 即可


#include <stdio.h>

#include "GLTools.h"
#include <glut/glut.h>

GLBatch triangleBatch;
GLShaderManager shaderManager;

void changeSize(int w, int h) {
    glViewport(0, 0, w, h);
}

void renderScene(void) {
    // 清屏
    glClear(GL_COLOR_BUFFER_BIT);
    GLfloat redColor[] = {1.0f, 0.0f, 0.0f, 1.0f};
    // 设置使用的是固定管线
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, redColor);
    triangleBatch.Draw();
    glutSwapBuffers();
}

void setupRC() {
    // 设置清屏颜色
    glClearColor(0.0f,0.0f,1.0f,1.0f);
    // 初始化管线
    shaderManager.InitializeStockShaders();
    // 选择三角形顶点位置
    GLfloat verts[] = {
        -0.5f,0.0f,0.0f,
        0.5f,0.0f,0.0f,
        0.0f,0.5f,0.0f,
    };
    // 开始绘制
    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(verts);
    triangleBatch.End();
}

int main(int argc,char* argv[]){
    gltSetWorkingDirectory(argv[0]);

    // 初始化 glut
    glutInit(&argc, argv);
    // 设置了程序所使用的窗口类型
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    // 设置所需的窗口大小
    glutInitWindowSize(800, 600);
    // 创建窗口并设置标题
    glutCreateWindow("Triangle");

    // 设置窗体大小改变时的回调
    glutReshapeFunc(changeSize);
    // 设置显示回调
    glutDisplayFunc(renderScene);

    GLenum err = glewInit();
    if(GLEW_OK != err) {
        fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
        return 1;
    }

    // 绘制图形
    setupRC();

    // 一个无限执行的循环
    glutMainLoop();

    return 0;
}
复制代码
7. 运行结果

8. 关于 warning

直接使用上述代码时会出现一堆的 warning, 这是因为 GLUT 这个库从 macOS 10.9 后便被弃用了, 但是不影响学习或正常开发. 如果不想看到一堆 warning 或者想要使用较新的工具, 可以使用 glfw 代替. 因为笔者学习的教材使用的 GLUT, 所以这里也用 GLUT 入门, 后续有机会会学学 glfw 的使用.

Tips

一些术语

  • 顶点: 屏幕中显示出来的一个点, 是 OpenGL 的基础, OpenGL 中的图形就是由大量的顶点以及顶点间的连线构成的
  • 光栅化: 实际绘制或填充每个顶点之间的像素形成线程
  • 着色: 沿着顶点之间改变颜色值, 能够轻松创建光照照射在一个立方体上的效果
  • 纹理贴图: 一个用来贴到三角形或多边形上的图片
  • 混合: 将不同颜色混到一起

OpenGL 的渲染流程

图元的类型

类型说明
GL_POINTS0x0000一个个独立的顶点
GL_LINES0x0001多条线段
GL_LINE_STRIP0x0002不闭合的折现
GL_LINE_LOOP0x0003闭合的折现
GL_TRAINGLES0x0004多个独立的三角形
GL_TRAINGLE_STRIP0x0005多个连续的三角形
GL_TRAINGLE_FAN0x0006扇状连续的三角形
GL_QUADS0x0007多个独立的四边形
GL_QUAD_STRIP0x0008多个连续的四边形
GL_POLYGON0x0009单个简单的凸多边形

Talk is cheap, show me the code.

Demo 下载地址

转载于:https://juejin.im/post/5a8067a95188255de200eda8

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值