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 阅读(80) 评论(0) 编辑 收藏 举报