OpenGL

Introduce

OpenGL 是作为一种硬件的图形规范设计的,主要的交互是通过GLSL(GL Shader Language) 使用显卡渲染图像。OpenGL只负责图像渲染部分,对于窗口管理,系统事件则由一些特定平台的窗口管理器负责例如(GLFW)就支持跨平台。其它如GLUT,freeglut和GLFW是做同样的事。

  • GLEW, OpenGL扩展加载库, 提供动态加载目标平台(win,linux)支持那些扩展,猜测像是Nvidia显卡openGL扩展
  • GLFW, OpenGL图像框架, 用于创建窗口,和管理OpenGL Context, 监听系统事件(键盘,鼠标)
  • GLM, OpenGL Math库,图像数学算法库

First Start

Never easy first thing.

  • testopengl.cpp
#include <GL/glew.h>
#include <GLFW/glfw3.h>

#include <iostream>

using namespace std;
void init(GLFWwindow* win){}
void display(GLFWwindow* win,double currentTime){
    glClearColor(1.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

}

int main(void){
    if (!glfwInit()){
        exit(EXIT_FAILURE);
    }
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
    GLFWwindow* win = glfwCreateWindow(600,600,"title",NULL,NULL);

    glfwMakeContextCurrent(win);
    if(glewInit()!=GLEW_OK){
        exit(EXIT_FAILURE);
    }

    glfwSwapInterval(1);

    init(win);
    while(!glfwWindowShouldClose(win)){
        display(win,glfwGetTime());
        glfwSwapBuffers(win);
        glfwPollEvents();
    }

    glfwDestroyWindow(win);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}

库依赖

libgl
libglew
libglfw3

# Install to Ubuntu
sudo apt install -y libgl-dev libglew-dev libglfw3-dev

编译

g++ testopengl.cpp -o testopengl.o -lGL -lglfw  -lGLEW

use cmake

添加link library

target_link_libraries(opengl_cpp_test_demo GL glfw GLEW)