这学期开了一门《计算机图形学》的课程,期初上手感觉有点难度。后来跟着老师课堂敲代码,课后参考了一些网上的资料(官方文档 + 博客),渐渐有了感觉。第一次作业是实现纹理切换,自己实现了代码,有点小兴奋。
话说,课程也上了一半了,才想起来写写博客记录一下。
本课程是基于 OpenGL 3.3 版本。
主要用到的资料有:
- OpenGL 官方中文文档
- 从 0 开始的 OpenGL 学习
可以参考我写的这篇博客。
环境配置好,差不多窗口也有了。这里再重复讲一遍窗口的创建。
直接上代码。
#include
#define GLEW_STATIC
#include
#include
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 窗口
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~