OpenGL学习之路之窗口的建立
程序员文章站
2022-07-04 18:48:56
...
环境配置
先建立一个空项目,建立一个c++文件,然后设置解决方案的属性设置三个位置
第一是c/c++\常规\附加包含目录加入include的文件夹,glfw和glew都需要,第二,链接器\常规\附加库目录,lib文件夹,第三,链接器\输入\附加依赖库,opengl32.lib glfw3.lib glew32s.lib
创建自己的引擎
将文件修改为main作为主函数
#define GLEW_STATIC
这个注意小心拼写错误,本人搞了几小时
初始化
声明版本号
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
MacOSX系统加上这一句
以上是初始化Glfw,说明我们要使用的OPENGL版本是3.3,我们同样明确告诉GLFW我们使用的是核心模式(Core-profile)。明确告诉GLFW我们需要使用核心模式意味着我们只能使用OpenGL功能的一个子集。
创建窗口指针
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOPENGL", NULL, NULL);//前两个参数代表生成窗口大小
接下来进行GLFW的初始化
if (window == NULL)
{
std::cout << "GLFW窗口初始化失败" << std::endl;
glfwTerminate();//程序终止函数
return -1;
}
glfwMakeContextCurrent(window);
然后是GLEW的初始化
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
std::cout << "GLEW初始化失败" << std::endl;
return -1;
}
确定渲染窗口
glViewport(0, 0, 800, 600);//渲染窗口大小
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);//注册函数
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
framebuffer_size_callback自定义函数注册到当窗口大小改变的事件中能及时反映
确定基本架构
while(!glfwWindowShouldClose(window)){
//输入
//渲染指令
//检查并调用事件,交换缓冲
glfwSwapBuffers(window);//进行屏幕缓冲
glfwPollEvents();//检查函数有没有触发事件
}
清理缓冲区颜色
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);//来设置清空屏幕所用的颜色,表示清除板的颜色
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓冲之后
输入
processInput(window)
void processInput(GLFWwindow* window) {
//输入
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
glfwSetWindowShouldClose(window, GLFW_TRUE);
}
}
代码如下
#define GLEW_STATIC
#include<GL/glew.h>
#include<GLFW/glfw3.h>
#include<iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);MacOSX系统加上这一句
//以上是初始化Glfw,说明我们要使用的OPENGL版本是3.3,我们同样明确告诉GLFW我们使用的是核心模式(Core-profile)。明确告诉GLFW我们需要使用核心模式意味着我们只能使用OpenGL功能的一个子集。
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOPENGL", NULL, NULL);//前两个参数代表生成窗口大小
if (window == NULL)
{
std::cout << "GLFW窗口初始化失败" << std::endl;
glfwTerminate();//程序终止函数
return -1;
}
glfwMakeContextCurrent(window);
//GLFW初始化
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
std::cout << "GLEW初始化失败" << std::endl;
return -1;
}
//Glew的初始化
glViewport(0, 0, 800, 600);//渲染窗口大小
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);//注册函数
while(!glfwWindowShouldClose(window))
{
//输入
processInput(window);
//渲染指令
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);//来设置清空屏幕所用的颜色,表示清除板的颜色
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓冲之后
//检查并调用事件,交换缓冲
glfwSwapBuffers(window);//进行屏幕缓冲
glfwPollEvents();//检查函数有没有触发事件
}
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow* window) {
//输入
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
glfwSetWindowShouldClose(window, GLFW_TRUE);
}
}
上一篇: 【OpenGL】(step1)开个窗口
推荐阅读
-
C语言学习之路之四-----------C语言的运算符与表达式
-
OpenGL ES学习之GLSurfaceView的使用讲解
-
我的javascript学习之路(二) 对象之定义
-
我的javascript学习之路(三) 对象之this
-
OpenGL学习之路之窗口的建立
-
C语言学习之路之四-----------C语言的运算符与表达式
-
我的javascript学习之路(一)对象之基础
-
Qt学习之路3--坐标系统、窗口部件位置大小设置及简单的QPushButton使用
-
学习Python之路之self的用法、内置函数的用法以及私有属性和私有方法
-
OpenGL ES学习之GLSurfaceView的使用讲解