我的第一个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的世界!