首先,感谢傅老师的视频教程,下面给出地址
https://www.bilibili.com/video/av24353839
里面有着详细的搭建环境的内容,主要使用的是glfw和glew
第一课
根据视频学会了搭建环境,以及最简单的创建窗口
#define GLEW_STATIC//根据 glew32s.lib glew32.lib 链接库不同 ,可以选择是否打开这个宏
#include <GL/glew.h>
#include <GLFW/glfw3.h>//glew 的头文件都需要在 glfw 之前,否则会无法编译通过
#include <iostream>
using namespace std;
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//open GLFW window
GLFWwindow* window = glfwCreateWindow(800, 600, "My OpenGL Game", NULL, NULL);//获取指针
if (window == NULL)
{
cout << "fail to create CLFW window" << endl;
glfwTerminate();//提前结束窗口
return -1;
}
glfwMakeContextCurrent(window);//可视化窗口
//init GLEW
glewExperimental = true;//一般位于glewInit()之前,有的平台没有会报错
if (glewInit()!=GLEW_OK)
{
cout << "init glew failed" << endl;
glfwTerminate();//提前结束
return -1;
}
glViewport(0, 0, 800, 600);//函数的作用如其名:在窗口中设置一个可视矩形,只有在矩形内部的图形才可以看到,前两个是起点坐标,第三个参数和第四个参数分别是宽和高
while (!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);//简单来说这个函数的作用就是避免闪烁(毕竟成型并不是一瞬间,而是需要时间的),通过采用双缓冲解决,一个用来成型,一个用来展示
glfwPollEvents();//检测用户的输入
}
glfwTerminate();//正常结束
return 0;
}
关于自己疑惑的一点解释:
glfw的作用:负责创建窗口,处理消息循环,通常可以替换成为其他
比如glut,freeglut 等界面库
glew的作用:在调用 opengl 相关函数时,不必每次都用 函数指针的方式,检查 机器是否支持此gl函数,不嫌麻烦的话,也可以手写函数指针,来判断各个 opengl 高版本函数是否支持,暂时不知道是否有替代物