• OpenGL学习笔记(三)


    本篇主要讲述关于glad库的使用、mac上如何使用OpenGL 3.3 Core模式,以及shader原理。

    1. glad

    由于OpenGL只是一套规范,具体的实现因显卡驱动和操作系统而异,比如在MacOS或Windows上,某些复杂点的OpenGL API函数指针并不一致。

    为了在运行时在不同操作系统上找到对应的函数指针,glad库帮我们封装了这些操作,屏蔽了平台对的差异性。

    我们可以通过这个glad在线生成器来获得对应的代码,按下图的选择,点击generate即可。

    然后会获得一个glad压缩包,解压后有include和src代码,放到工程目录下,更新CMake file。

    cmake_minimum_required(VERSION 3.0.0)
    project(learn_opengl VERSION 0.1.0)
    
    find_package(glfw3 3.3 REQUIRED)
    include_directories(third_party/glad/include)
    
    add_executable(learn_opengl main.cpp third_party/glad/src/glad.c)
    target_link_libraries(learn_opengl glfw "-framework OpenGL")

    在代码中初始化glfw之后再初始化glad即可。

    #include "glad/glad.h"

    if
    (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; }

    2. OpenGL 3.3 Core模式

    我们即将涉及shader编程,需要OpenGL版本提升到3.3以上,同时由于MacOS的特殊之处,需要多设置一步GLFW_OPENGL_FORWARD_COMPAT。

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // MacOS兼容
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    同时,OpenGL Core模式要求绑定VAO(Vertex Array Object,顶点数组对象)用于处理顶点输入,不然OpenGL不会绘制出内容。

    unsigned int VAO;
    glGenVertexArrays(1, &VAO);
    glBindVertexArray(VAO);

    3. shader原理

    shader(着色器)是一段类似C语言规范的程序,运行在GPU上。

    一般地,shader有两类:vertex shader(顶点着色器)和fragment shader(片段着色器,又叫pixel shader像素着色器)。

    有了shader,我们就可以更加灵活地命令OpenGL绘制出想要的效果。

    当OpenGL进行绘制的时候,每次绘制顶点会调用一次vertex shader,而每次绘制一个像素点会调用一次fragment shader,可以看出,两种shader被调用的开销不是同一个量级的。

    这篇文章很好地解释了shader是什么以及应用场景:Understanding Shaders, the secret sauce of 3D engines

    一张图直观感受一下vertex shader和fragment shader(pixel shader)在整个绘制流程中所处的位置和作用。

  • 相关阅读:
    宠物收养场 Treap
    最佳课题选择
    [USACO08JAN]手机网络Cell Phone Network
    [USACO09MAR]地震损失2Earthquake Damage 2
    字符串距离 简单DP
    小行星群 网络流 二分图
    游览牧场 最小费用流
    BZOJ1391: [Ceoi2008]order
    BZOJ1570: [JSOI2008]Blue Mary的旅行
    BZOJ2243: [SDOI2011]染色
  • 原文地址:https://www.cnblogs.com/jacobchen/p/14844430.html
Copyright © 2020-2023  润新知