这学期开了一门《计算机图形学》的课程,期初上手感觉有点难度。后来跟着老师课堂敲代码,课后参考了一些网上的资料(官方文档 + 博客),渐渐有了感觉。第一次作业是实现纹理切换,自己实现了代码,有点小兴奋。

话说,课程也上了一半了,才想起来写写博客记录一下。

本课程是基于 OpenGL 3.3 版本。

主要用到的资料有:

一、配置环境

可以参考我写的这篇博客

环境配置好,差不多窗口也有了。这里再重复讲一遍窗口的创建。

直接上代码。

#include<iostream>
#define GLEW_STATIC
#include <GL/glew.h>
#include<GLFW\glfw3.h>
 
using namespace std;
 
int main(int argc, char** argv[])
{
	/*glewExperimental = GL_TRUE; if (glewInit()!=GLEW_OK) { cout << "failed to initalize GLEW" << endl; return -1; }*/
 
	glfwInit();//初始化
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//配置GLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//配置GLFW
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
	GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
	if (window==nullptr)
	{
		cout << "Failed to create GLFW window" << endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);
	while (!glfwWindowShouldClose(window))
	{
		glfwPollEvents();
		glfwSwapBuffers(window);
	}
	glfwTerminate();
	return 0;
}

不出意外,会出现这样一个方框,那就说明之前的环境配置成功了。

二、下面开始详细讲这段代码

首先要初始化,并指定使用的 OpenGL 版本。

	glfwInit();  //初始化
	//OpenGL 版本, 用的是新版的 OpenGL 3.3
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

下面的代码是窗口设置。

    //窗口设置
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  //我们使用的是核心模式 (Core-profile)
	//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // must for Mac
	glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);  //改为 GL_TRUE,改变窗口,纵横比会变

下面代码是创建一个窗口对象。

    //创建一个窗口对象
	GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL", nullptr,
		nullptr);  //窗口名字改成自己的学号, 最后两个参数暂时忽略
    if (nullptr == window)
	{
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}

下面代码是把窗口设为当前正在使用的。

    //设为当前
	glfwMakeContextCurrent(window);  //可以新建很多 window

下面代码是进行画图操作,即画出上面那个框。

    //画图
    while (!glfwWindowShouldClose(window))
	{
		glfwPollEvents();  //把所有事件系统都取过来:键盘/鼠标等操作
		glfwSwapBuffers(window);  //调用双面进行画,显示一个,另一个在画,画面更流畅
	}

最后代码就是清理并退出程序。

  glfwTerminate();  //清理所有的资源并正确地退出应用程序

三、致谢

你好,窗口

从 0 开始的 OpenGL 学习(一)- 创建 OpenGL 窗口

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~