【OpenGL第一个程序】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

本文介绍了OpenGL入门的第一个程序,有详细的注释,便于大家理解其中的逻辑。


一、OpenGL第一个程序

cpp 复制代码
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;

void init(GLFWwindow* window) { }

void display(GLFWwindow* window, double currentTime) 
{
	//! 指定清除背景时用的颜色
	glClearColor(0.0, 0.0, 1.0, 1.0);
	glClear(GL_COLOR_BUFFER_BIT);
}

int main(void) 
{
	//! GLFW初始化
	if (!glfwInit())
	{
		exit(EXIT_FAILURE); 
	}
	//! 指定计算机必须与OpenGL4.3兼容
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	//! 创建GLFW窗口和相关的OpenGL上下文
	//! 指定了窗口的宽和高,单位为像素;窗口的标题;后两个参数为允许全屏显示和资源共享
	GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter 2 - program 1", NULL, NULL);
	//! 创建GLFW窗口不会自动将它与当前的OpenGL上下文关联起来,因此需要调用以下函数
	glfwMakeContextCurrent(window);
	//! GLEW初始化
	if (glewInit() != GLEW_OK) 
	{ 
		exit(EXIT_FAILURE);
	}
	//! 开启垂直同步,因为GLFW窗口默认是双缓冲的
	//! 双缓冲:有2个颜色缓冲区,一个用于显示,一个用于渲染。渲染整个帧后,将交换缓冲区,缓冲用于减少不良的视觉伪影
	/*开启垂直同步, 如果它设定为60Hz(60FPS),那么我们就有60FPS。我们可以通过在glfwSwapInterval方法中设置高于1的数字来降低
		这个速率(如果设置为2,将得到30FPS)。0:关闭垂直同步; 1:60FPS; 2:30FPS。*/
	glfwSwapInterval(1);

	init(window);
	//! 当GLFW探测到应该关闭窗口的事件(比如点击x按钮),循环会终止
	while (!glfwWindowShouldClose(window))
	{
		//! 传入当前时间,保证动画在不同计算机以相同速度播放
		display(window, glfwGetTime());
		//! 开启垂直同步,交换缓冲区。
		/*因为电脑绘图是一个个像素逐一画的,需要时间,如果单一缓冲,我们可能会看到具体绘画过程,会造成屏幕闪烁等问题,而我们用户不需要具体
		看到你绘制的过程,所以为了解决这个问题,这里用了双缓冲技术,用两个内存区域来保存数据,分为前缓冲区和后缓冲区,前缓冲区用于展示屏幕
		上的内容,而后缓冲区就用来绘制,然后每一帧开始的时候,将两个缓冲区交换,这样后缓冲区又可以画新的内容。*/
		glfwSwapBuffers(window);
		//! 处理窗口相关事件,比如按键
		glfwPollEvents();
	}
	//! 销毁窗口,终止运行
	glfwDestroyWindow(window);
	glfwTerminate();
	exit(EXIT_SUCCESS);
}
相关推荐
17岁的勇气5 天前
Unity Shader unity文档学习笔记(十九):粘土效果,任意网格转化成一个球(顶点动画,曲面着色器)
笔记·学习·unity·图形渲染·顶点着色器·曲面着色器
郝学胜-神的一滴8 天前
Horse3D引擎研发笔记(四):在QtOpenGL下仿three.js,封装EBO绘制四边形
c++·3d·unity·游戏引擎·godot·图形渲染·虚幻
郝学胜-神的一滴9 天前
Horse3D引擎研发笔记(一):从使用Qt的OpenGL库绘制三角形开始
c++·qt·3d·unity·图形渲染·unreal engine
爱思德学术10 天前
中国计算机学会(CCF)推荐学术会议-A(计算机图形学与多媒体):VR 2026
计算机视觉·图形渲染·虚拟现实·用户界面
郝学胜-神的一滴14 天前
OpenGL状态机与对象管理:优化图形渲染的高效方法
开发语言·c++·程序人生·算法·图形渲染
张人大 Renda Zhang14 天前
如何用分布式架构视角理解宇宙稳定性?从精细调参到微服务的类比思考
前端·分布式·微服务·架构·图形渲染
郝学胜-神的一滴16 天前
能表示旋转的矩阵是一个流形吗?
线性代数·矩阵·图形渲染
赤水无泪18 天前
A 常见图形API和图形渲染引擎介绍
图形渲染
山楂树の19 天前
模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
python·macos·3d·图形渲染·blender
D5Render21 天前
D5渲染器 2.11 上线丨AI 设计助手、AI PBR 材质生成与推荐、自定义路径、高级笔刷、完整支持平行投影
aigc·图形渲染·3d渲染·渲染器