OpenGL之创建窗口

18 篇文章 1 订阅

目录

什么是OpenGL?

核心模式与立即渲染模式

立即渲染模式 (Immediate mode)

核心模式(Core-profile)

状态机

对象

创建窗口 

配置环境 


什么是OpenGL?

  一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。

核心模式与立即渲染模式

立即渲染模式 (Immediate mode)

  早期的OpenGL使用的模式(也就是固定渲染管线)  OpenGL的大多数功能都被库隐藏起来,容易使用和理解,但是效率太低。 开发者很少能控制OpenGL如何进行计算 因此从OpenGL3.2开始,推出核心模式。

核心模式(Core-profile)

  也叫可编程管线,提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程。

状态机

OpenGL自身是一个巨大的状态机 变量(描述该如何操作)的大集合 OpenGL的状态通常被称为上下文(Context)。 状态设置函数(State-changing Function) 状态应用的函数(State-using Function)。

对象

OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库。由于C的一些语言结构不易被翻译到其它的高级语言,因此OpenGL开发的时候引入了一些抽象层。“对象(Object)”就是其中一个。

创建窗口 

不同操作系统上,创建支持OpenGL的窗口接口不同。需要我们自己处理创建窗口,定义OpenGL上下文以及处理用户输入。不同操作系统,不同显卡获取OpenGL函数的接口也有差异。

GLFW库解决操作系统层面的不同 创建窗口 定义上下文 处理用户输入。

GLAD库使得代码可以用于不同的OpenGL驱动 OpenGL本身只是标准/规范 各个厂家具体实现方式可以不同。

如果没有类似GLAD的库,windows下:

配置环境 

首先打开vs创建工程,然后右击工程的属性。

将 glfw库和glad库的头文件路径选择进来。

然后配置库文件的路径。

在Windows上,请使用OpenGL库opengl32.lib(随Microsoft SDK一起提供,在安装Visual Studio时默认安装)。 

然后添加glad的源文件。 

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>

void processInput(GLFWwindow* window);

int main()
{
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__ 
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
	GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
	if (window == NULL) {
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}
	//GLFW将窗口的上下文设置为当前线程的上下文
	glfwMakeContextCurrent(window);

	//GLAD
	// glad: 加载所有OpenGL函数指针
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}
	// 渲染循环
	while (!glfwWindowShouldClose(window)) {
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f); //状态设置
		glClear(GL_COLOR_BUFFER_BIT); //状态使用
		processInput(window);
		// glfw: 交换缓冲区和轮询IO事件(按键按下/释放、鼠标移动等)
		glfwSwapBuffers(window);
		glfwPollEvents();
	}
	// glfw: 回收前面分配的GLFW先关资源. 
	glfwTerminate();

	return 0;
}

void processInput(GLFWwindow* window) 
{
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
}

此代码是显示暗绿色窗口的代码,用于测试配置环境。

最后分享一下glad库和glfw库的百度网盘链接。

链接:https://pan.baidu.com/s/1QYk3zhQUgzNJBXVTE-n3Sg 
提取码:0z63

参考:

主页 - LearnOpenGL CN

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值