OpenGL学习笔记(一)-窗口-渲染管线

本文介绍了OpenGL编程的基础,包括使用GLFW创建窗口和OpenGL上下文,GLEW管理函数位置,以及渲染循环的工作原理。详细讲解了顶点数据、VBO、VAO、顶点着色器和片段着色器的应用,以及如何通过EBO优化绘制过程。同时,提到了图形渲染管线的工作方式,阐述了从3D坐标到2D像素的转换过程。

参考网址:LearnOpenGL 中文版
哔哩哔哩教程

第一章 入门

1.0 配置库

  • 首先,在我们画出出色的效果之前,需创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,因此需要利用GLFW库,给我们提供一个窗口和一个OpenGL上下文用来渲染;
  • 其次,OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。为避免查询繁琐的过程,需利用GLEW库。

下载GLFW:GLFW 32位版本
下载GLEW: GLEW

包含目录、库目录和库

E:\OpenGL\glfw-3.3.6.bin.WIN32\glfw-3.3.6.bin.WIN32\include
E:\OpenGL\glew-2.1.0-win32\glew-2.1.0\include

E:\OpenGL\glfw-3.3.6.bin.WIN32\glfw-3.3.6.bin.WIN32\lib-vc2015
E:\OpenGL\glew-2.1.0-win32\glew-2.1.0\lib\Release\Win32

opengl32.lib
glfw3.lib
glew32s.lib

1.1 创建窗口

  • 包含头文件
#define GLEW_STATIC
#include<GL/glew.h> //glew需包含在前面
#include<GLFW/glfw3.h>
  • 初始化GLFW
glfwInit();//初始化
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//使用版本号是3.3
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//使用核心模式
  • 创建窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "My_window", NULL, NULL);//创建窗口,定义窗口大小,返回指针
if (window == NULL)
{
   
   
	std::cout << "open window failed" << endl;
	glfwTerminate();//结束窗口
	return -1;
}
glfwMakeContextCurrent(window);//使用当前window
  • 初始化GLEW
glewExperimental = true;
if (glewInit() != GLEW_OK)
{
   
   
	cout << "init glew failed." << endl;
	glfwTerminate();
	return -1;
}
  • 定义在窗口中,渲染窗口的大小
glViewport(0, 0, 800, 600);//左下角坐标,宽,高
  • 定义一个渲染循环

    其中交换缓冲区的目的在于,为避免图像显示时出现闪烁,通常使用双缓冲区,前缓冲区用于显示最终的效果,后缓冲区用于绘制渲染指令,渲染指令完成后则交换缓冲区。

while (!glfwWindowShouldClose(window))//检查是否要求窗口退出
{
   
   
	glfwSwapBuffers(window);//交换缓冲区
	glfwPollEvents();//检查是否有触发某些事件,例如鼠标移动,按下等,调用回调函数
}
  • glfwpollevents用于检查输入时间,需要写一个函数来相应它。由于检查输入需要时间,因此一般写在循环的后面,而在下一个循环前部来执行响应函数。
void processInput(GLFWwindow *window)
{
   
   
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
	{
   
   
		glfwSetWindowShouldClose(window, true);
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值