我的第一个C++/OpenGl应用程序

我的第一个C++/OpenGl应用程序

前面已经介绍了基本的OpenGl的概念,相关请参阅计算机图形学入门,同时也详细搭建了C++/OpenGl在Visual Studio2019上的环境MS Visual Studio上OpenGl环境搭建。有了这些基本的准备就够了,现在,就是现在,我们一起开启OpenGl的大门。
首先,有必要重申一下计算机图形编程的基本流程:
在这里插入图片描述
这里,我们仅仅讨论其第一个环节,创建GLFW windows,今天为创建GLFW window所需的内容及其所有操作环节并不涉及着色器及其相应的GLSL代码,也就是我们只需要对我们的window视窗进行基本操作,因此,在开篇环节讨论的所有库中我们在今天的内容里只需要GLFW和GLEW,当然,GLFW是今天的主要参与者
现在,进入正题,创建我们的第一个C++/OpenGl应用程序。

#include <GL\glew.h>
#include <GLFW\glfw3.h>
using namespace std;

这里,我们包含相应的头文件。如果出现了无法打开源文件的现象,还是请回到上一篇MS Visual Studio上OpenGl环境搭建进行细致的搭建。
下面是主函数部分,整个主函数围绕着以下方面展开:
在这里插入图片描述

int main(void) {
	if (!glfwInit()) { exit(EXIT_FAILURE); }
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter 2 - program 1", NULL, NULL);
	glfwMakeContextCurrent(window);
	if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); }
	glfwSwapInterval(1);

	init(window);

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

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

glfwInit()和glewInit() 分别对GLFW和GLEW库进行初始化。
glfwWindowHint指定了OpenGl兼容的版本号,这里为OpengGl4.3。
glfwCreateWindow查看相关的官方文档
在这里插入图片描述
在这里插入图片描述 这里我设置窗口宽和高分别为600像素的窗口,并为其指定了窗口的标题,监控器以及资源共享设置的是NULL,如需要进行全局窗口的展示,可以参阅:
在这里插入图片描述
glfwMakeContextCurrent(window)将当前我们创建的窗口与OpenGl上下文关联起来。
文中我调用了Init()函数,我们期待Init执行的获取GLSL着色器代码和加载过程,但仅限于今天的操作并不涉及以上。

void init(GLFWwindow* window) { }

display(window, glfwGetTime())函数将是后续对图元进行动画的主要功能函数,glfwGetTime()获取了计算机的当前时间,保证动画在不同计算机上以相同速度进行播放。

void display(GLFWwindow* window, double currentTime) {
	glClearColor(1.0, 0.0, 0.0, 1.0);
	glClear(GL_COLOR_BUFFER_BIT);
}

当前,我们的display仅仅对颜色缓存进行清理和初始化操作。
在这里插入图片描述
当用户执行关闭操作时,采用glfwDestroyWindow(window)glfwTerminate()进行窗口销毁。
下面为完整代码:

#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <iostream>

using namespace std;

void init(GLFWwindow* window) { }

void display(GLFWwindow* window, 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* window = glfwCreateWindow(600, 600, "Chapter 2 - program 1", NULL, NULL);
	glfwMakeContextCurrent(window);
	if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); }
	glfwSwapInterval(1);

	init(window);

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

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

以上便是今天的全部内容,到此,你已经创建了属于你的第一个C++/OpenGl应用程序。
看似很简单,也许你会想今天的操作并没有设计画一个心仪的图案或是一个3D图像,请记住,今天的操作也为你打开了OpenGl的大门,以后的所有Opengl图像创建都将基于今天所建立的框架,以后的所有操作都将是在此基础上的添砖加瓦(display和init函数将逐步的拓展和丰富化)你已经正式步入了OpenGL的世界!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值