OpenGL 学习记录1-创建窗口

OpenGL 学习记录1-创建窗口

纯小白,学习opengl的磕碰和疑问,方便后续自己改进和反思
学习教程:https://learnopengl-cn.github.io/ 确实很方便,推荐大家直接上去学习。
已经按照前述安装好了Clion

头文件声明

#include <glad/glad.h>
#include <GLFW/glfw3.h>

这个必须,啥也不说,大小写注意

MAIN函数

初始化和配置GLFW版本

先执行init初始化 GLFW
再执行hint函数来定义GLFW的版本,方便编译时链接到正确的GLFW库
windows下这4个基本固定,
int main() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

创建窗口

创建窗口:如下,需要定义 宽 高 窗口名称还有 2个参数可以忽略直接null
宽高可以直接写死或者前面声明变量
GLFWwindow* window = glfwCreateWindow(WID, HIG, “ROL”, NULL, NULL);
按照习惯,需要考虑创建失败场景,需要打印失败情况
std::cout << “Failed to create a windows” << std::endl;
就是打印,和printf功能类似

return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。
return -1::表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败;–异常打印函数一般用这个
glfwMakeContextCurrent(window); 设置已创建窗口的Context为当前线程的主Context,没有会导致创建失败

//下面这个是创建window, window在这个函数执行后,就有内容了
GLFWwindow* window = glfwCreateWindow(WID, HIG, "ROL", NULL, NULL);

if(window == NULL)
{
    std::cout  << "Failed to create a windows" <<  std::endl;
    printf("Failed TO create a windows");
    return -1;
}
glfwMakeContextCurrent(window);   

初始化GLAD并判断是否成功

教程推荐,但是实际测试发现 没添加也可以。
if里面逻辑比较绕,还没搞清楚,而且这里面的函数定义均是库定义好的
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << “Failed to initialize GLAD” << std::endl;
return -1;
}

切换buffer以及判断是否关闭窗口

glfwWindowShouldClose(window) 来判断window窗口是否被要求退出,如果是true,就说明要被退出,直接退出
glfwPollEvents(); 检查有无事件触发关闭,包括鼠标键盘移动。
glfwSwapBuffers(window); 这个切换前后buffer来实现图像呈现,属于绘图基本操作
glfwTerminate(); 在上面事件跳出循环后, 该函数关闭窗口。
glclear 清空屏幕缓存buffer,是状态使用函数,可以是GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT, 只考虑颜色,就选择GL_COLOR_BUFFER_BIT
glClearColor 是状态设置函数,把屏幕设置成XX颜色
这2个函数来证明窗口在不断的切换buffer 渲染。

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;

}

viewport配置视口

格式如下,需要配置宽和高,告诉opengL 渲染的窗口尺寸大小—可以设置的比GLFW还小,这样渲染会在更小的窗口中显示。前面2个参数表示窗口左下角的位置。
(处理过的OpenGL坐标范围只为-1到1,因此我们事实上将(-1到1)范围内的坐标映射到(0, WID)和(0, HIG))
glViewport(0, 0, WID, HIG);

回调函数的使用

需要先声明一个函数, 如下,如下定义了个GLFWwindow的指针,然后参数是WID和HIG,宽高。
这样在这个window变化的时候,就能把WID HIG参数传递给视口使用。
void framebuffer_size_callback(GLFWwindow
window, int WID, int HIG); //声明/定义回调函数,必须要在main调用之前声明
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); //添加在main函数中,在每次窗口创建完成后完成后,调用回调函数
void framebuffer_size_callback(GLFWwindow* window, int WID, int HIG)
glViewport(0, 0, width, height);
}
// 定义个函数,具体和视口关联,也就是main每次调用都会实际给viewport赋值, 不直接写在main里面是方便其他函数也调用? 也可以直接就把这个放在main前面,注释掉 第一个声明如下
在这里插入图片描述
再补充定义一个回调函数,用于处理键盘输入退出
void processInput(GLFWwindow window); //这个window前面加号和前面在GLFWwindows后面加的区别,可能是一个指 window是个指定义个指针型函数,而直接在windows前面加,是指这个windows的地址?*
processInput(window); //在是否关闭window循环判断里面调用

void processInput(GLFWwindow *window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) //检查是否又按ESC
glfwSetWindowShouldClose(window, true); //把这个关闭windows函数赋值为true
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值