OpenGL学习(二):第一个GLFW窗口
来源:互联网 发布:mac查看icloud照片 编辑:程序博客网 时间:2024/06/07 07:54
前言
本文都是参考https://learnopengl.com/#!Getting-started/Hello-Triangle
中文翻译网址:https://learnopengl-cn.github.io/
代码也是来自该网站,主要添加一些注释以及个人的一些理解。
名词术语
opengl的窗口值问题
利用glfw设置窗口的时候设置的实际的像素值glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL)
但是OpenGL的窗口值是从-1到1的显示。而(0,0)
点就是窗口的中心。
双缓存
当程序仅仅使用一个缓存的时候,由于物理屏幕以固定的帧率从上到下,从左到右进行刷新屏幕,刷新操作是瞬时的,那么在第二帧刷新之前就可能存在伪像。所以我们采用的双缓冲,所有的渲染都发生在后台缓冲,它位于内存区域,当所有的渲染完成的时候,将他交换到前台,将前台的缓冲交换到后台
代码分析
代码下载
http://download.csdn.net/detail/zhouyelihua/9882947
代码分析
#include<iostream>#include <glad/glad.h>#include <GLFW/glfw3.h>void framebuffer_size_callback(GLFWwindow* window, int width, int height)//这个是窗口变化的回调函数。。注意输入参数 //是一个glfw的窗口,一个宽度和高度{ glViewport(0, 0, width, height);//这个是回调函数内的内容 //这里是将视口改成变化后的的窗口大小 //注意需要的注册该回调函数 //glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); //两个参数是,glfw的窗口以及回调函数}void processInput(GLFWwindow *window){ if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)//获取按键,如果等于esc glfwSetWindowShouldClose(window, true);//利用强制窗口应该关闭}int main(){ glfwInit();//类似于之前的gluinit一般采用库都需要进行初始化 //版本号是opengl4.5 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);//设置主版本号 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);//设置次版本号 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);//在mac系统上需要设置该语句 GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);//后面两个参数是设置显示屏和共享的, //一般库函数的相关定义, //可以配置好以后直接查看都有详细的定义 if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))//在调用opengl函数之前初始化glad, //glad的作用就是快速的将opengl函数映射到相关的显卡函数上 { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } glViewport(0, 0, 800, 600);//设置视口大小 glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);//注册函数,该函数还可以注册其他相关硬件的回调函数 // //渲染流程 while (!glfwWindowShouldClose(window))//检测glfw窗口是否被指令要求关闭,如果是的话,则会退出循环 { //输入的相关操作 processInput(window);// // 渲染的相关操作 glClearColor(1.0f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); //查看所有的事件,并且交换内存 glfwSwapBuffers(window);//交换颜色缓存,即glfw窗口内的内容。。。注意glfw开头的交换和后面gl开头的区别 glfwPollEvents();//检测是否有其他的触发时间,例如上述的窗口大小变化,需要调用相关的回调函数 } glfwTerminate();//清除退出 return 0;}
如果您觉得此博客对您有用,欢迎对我进行小额赞助。
不筹钱娶媳妇的程序员不是好程序员!
阅读全文
1 0
- OpenGL学习(二):第一个GLFW窗口
- OpenGL开发学习指南二(glfw+glad)
- OpenGL学习笔记2013.4.10第一个OpenGL窗口
- 创建第一个OpenGL窗口
- OpenGL学习入门-GLFW配置
- OpenGL(二)第一个OpenGL程序绘制三角形
- OpenGL入门(二):第一个OpenGL程序
- Opengl备忘--创建一个简单GLFW窗口
- OpenGL 使用GLFW创建全屏窗口
- OpenGL学习(2)-第一个三角形
- OpenGL学习(三)第一个三角形
- 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
- 第一个窗口程序(二.分析窗口程序)
- OpenGL实践之第一个窗口
- Win32应用程序工程学习笔记二 - 构建第一个窗口
- 1、OpenGL之旅+第一个OpenGL窗口
- OpenGL学习笔记(6)第一个动画
- OpenGL 入门基础教程 —— 打开第一个窗口
- 深入理解C#中的泛型
- 虚拟机中 CentOS 无法上网(connect: network is unreachable)
- 热敏电阻和温度转换公式和程序
- webrtc 编码器带宽调整
- python2 递归与迭代的效率问题
- OpenGL学习(二):第一个GLFW窗口
- python迭代器的学习
- windows 环境安装keras
- C#窗体的位置和大小及几个form的跳转
- 104. Maximum Depth of Binary Tree
- 解决用android Studio开发不能去除标题栏的问题
- StyleCop4.7设置默认规则的方法
- 二叉树非递归遍历
- 夜间模式