OpenGL学习笔记(一)

1. 背景知识

OpenGL是一套图形编程的规范,在不同的平台上有不同的显卡驱动实现。
 
与OpenGL对应的图形API有微软的DirectX,苹果的Metal,以及最新的Vulkan。
 
现代OpenGL与早期OpenGL最大的区别就是固定管线到可编程管线的变化。
Shader着色器就是运行在GPU(而非在CPU)上的编程语言。
 

2. 环境设置

GLFW是一套开源跨平台的库, 屏蔽不同平台上跟OpenGL相关的一些创建window、context、surface和接收事件等操作。

下面以Mac平台为例设置环境:

首先需要安装glfw

brew install glfw

这里选用VSCode + CMake作为开发环境

在项目根目录中创建CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(learn_opengl VERSION 0.1.0)

find_package(glfw3 3.3 REQUIRED)

add_executable(learn_opengl main.cpp)
target_link_libraries(learn_opengl glfw "-framework OpenGL")

创建build目录,并且编译运行代码

mkdir build & cd build

cmake ..
make
./learn_opengl

 

3. Hello World

OpenGL也有自己的Hello World版本,为绘制一个三角形。

贴上示例代码

#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;

    // 初始化GLFW库,对应的需要在退出时候调用glfwTerminate()销毁资源
    if (!glfwInit())
        return -1;

    // 创建window和OpenGL context,该window的context需要手动设置成current context
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    // 把window的context设置成current context
    glfwMakeContextCurrent(window);

    // 检查window的关闭标志
    while (!glfwWindowShouldClose(window))
    {
        // 清除屏幕颜色
        glClear(GL_COLOR_BUFFER_BIT);

        glBegin(GL_TRIANGLES);
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.0f, 0.5f);
        glVertex2f(0.5f, -0.5f);
        glEnd();

        // 交换window的前后buffer
        glfwSwapBuffers(window);

        // 处理事件
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

其中glfwCreateWindow()指定创建了一个title名为“Hello World”,宽高为640x480的window。

绘制三角形的逻辑主要在

glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();

glBegin()和glEnd()成对出现,glBegin()指定了接下来顶点坐标的绘制方式。

接下来指定了三个顶点坐标:(-0.5f, -0.5f),(0.0f, 0.5f),(0.5f, -0.5f)

放到XY坐标系中就可以看出是一个三角形

于是就得到了一个绘制三角形的window
 

posted on 2021-05-10 16:02  JacobChen2012  阅读(78)  评论(0编辑  收藏  举报

导航