https://learnopengl-cn.github.io/ openGL学习网站
开发语言  C++
https://www.khronos.org/registry/OpenGL/index_gl.php openGL API
https://www.glfw.org/download.html  一个opengl库 集成一些方法 GLFW
https://cmake.org/download/ cmake工具 编译 GLFW的工具
VS2017 没有安装 c++ 相关库 需要升级
依赖库 
GLFW
glfw库 把include和生成的lib文件放到一个文件夹内让vs 项目引用
GLAD
和上面的库差不多,不过只需要一个在线的编译平台生成出几个文件导入到include文件夹内就行
下一步有些问题 需要学习下C++基本知识了
看下基础知识就行,后面就要多敲敲代码

 _gladLoadGLLoader 编译失败问题

​在窗口章节的时候会有一个这个报错,可能是版本问题,需要把glad源文件src/glad.c 添加到项目内引用 
关键字
维度(Dimension)
视网膜(Retina)
渲染循环(Render Loop) 
双缓冲(Double Buffer)
交换(Swap)
渲染(Rendering)
渲染循环(Render Loop) 
​个人理解,程序是面向过程的,想看到画面必须一直保持程序一直执行,所以必须要有个循环体不停的执行渲染指令保证画面,类似unity渲染主线程
双缓冲(Double Buffer)
应用程序使用单缓冲绘图时可能会存在图像闪烁的问题。 这是因为生成的图像不是一下子被绘制出来的,而是按照从左到右,由上而下逐像素地绘制而成的。最终图像不是在瞬间显示给用户,而是通过一步一步生成的,这会导致渲染的结果很不真实。为了规避这些问题,我们应用双缓冲渲染窗口应用程序。前缓冲保存着最终输出的图像,它会在屏幕上显示;而所有的的渲染指令都会在后缓冲上绘制。当所有的渲染指令执行完毕后,我们交换(Swap)前缓冲和后缓冲,这样图像就立即呈显出来,之前提到的不真实感就消除了。
//如果窗口大小改变 回调函数
void framebuffer_size_callback(GLFWwindow* window,int width, int height);
void processInput(GLFWwindow* window);
int main()
{
glfwInit();//初始化 glfw
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);//确定使用的版本号 major minor
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);//确定使用的核心模式 core-profile
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT);  MAC平台使用的版本号
GLFWwindow* window = glfwCreateWindow(800,600,"learnOpenGL",NULL,NULL);//生成一个窗口对象
if (window == NULL)
{
std::cout << "Failed to create GLFW windows" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);//设置当前主窗口对象
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))//初始化 GLAD
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
//glViewport(1,1,10,10);//告诉opengl  窗口的位置和大小 前俩参数是左下角 位置 后俩就是窗口宽高
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);//注册窗口大小改变回调事件
//做一个渲染循环,保证程序不直接退出 Renderer Loop
while (!glfwWindowShouldClose(window))//每次循环检查下 GLFW是否需求要推出 返回True就会跳出循环 程序结束
{
processInput(window);//每次循环检查下输入
glfwSwapBuffers(window);//GLFW的渲染函数 储存窗口的每个像素 输出到屏幕上
glfwPollEvents();//检查函数有没有触发什么事件 键盘输入 鼠标点击等
}
glfwTerminate();//如果退出程序 清理下glfw的资源
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)//是否按下 ESC建
{
glfwSetWindowShouldClose(window,true);//执行关闭窗口
}
if (glfwGetKey(window,GLFW_KEY_1)==GLFW_PRESS)
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
if (glfwGetKey(window, GLFW_KEY_2) == GLFW_PRESS)
{
glClearColor(0.4f, 0.6f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
}

openGL学习笔记_配置开发环境第一个窗口相关推荐

  1. oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组

    ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...

  2. C51单片机学习笔记(一)——搭建开发环境及烧写工具

    C51单片机学习笔记(一)--搭建开发环境及烧写工具 文章目录 C51单片机学习笔记(一)--搭建开发环境及烧写工具 1.搭建软件开发环境及使用(Keil uVision) 2.将程序下载到单片机(烧 ...

  3. Polyworks脚本开发学习笔记(一)-脚本开发环境

    Polyworks脚本开发学习笔记(一)-脚本开发环境 背景 Polyworks的扫描尺寸测量分析模块是我工作中经常用到的一个模块,我不是做测量的,但是利用Polyworks对扫描获得的点云来进行尺寸 ...

  4. 迪文屏幕T5L平台学习笔记一:开发环境搭建注意事项

    前面一直用T5UID3平台的屏幕开发,但是吐槽下<DWIN C Compiler 1>编译器bug太多,项目能不能做好,全靠运气:售后说T5L平台支持keil开发,我感觉挺好,于是从新学习 ...

  5. Python学习笔记:Day1-2 开发环境搭建

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. python电脑配置苹果笔记本-tensorflow学习笔记1——mac开发环境配置

    1. mac电脑推荐配置 内存:8G+ cpu:i5+ 硬盘:SSD 128G+ 本人的电脑配置是cpu:i7, 内存:16G,硬盘:SSD 256G 2. mac开发环境配置 1.1 安装pip 打 ...

  7. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 ​​​​​​​ lin ...

  8. 《STM32学习笔记》2——开发环境的建立

    接上文,文中的图片知识,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.接口定义 1 芯片引脚整体简介 2 各部分引脚介绍 二.开发板简介 三.IS ...

  9. Android开发学习笔记---搭建Android开发环境

    今天突发奇想,想看看Android开发是什么样的,于是就在度娘了一下Android开发,便自己动手搭建了起来.中间也碰到了一些问题,自己慢慢度娘,谷哥去解决.现在把搭建步骤记录如下: 第一步:下载Ec ...

最新文章

  1. 16岁应该遵循什么_16岁就被张艺谋选中,刘浩存到底有什么来头?
  2. java future 线程 状态_手把手带你了解Java线程的实现方式及生命周期原理
  3. 企业网站着手准备网站推广前如何识别目标用户需求?
  4. 面经——C/C++常见面试知识点总结附面试真题
  5. 文本框输入限制,数字,字母,下划线
  6. 对乱糟糟的日志说再见
  7. webpack中file-loader和url-loader的关系
  8. 美国道富java开发面试题_从事Java开发五年,面试9家拿到7家offer,1096面试+67笔试题...
  9. idea 配置mysql逆向_idea逆向工程配置
  10. Vue分支循环结构~非常详细哦
  11. Android 开发工具类 03_HttpUtils
  12. 电脑突然出现成功连接网络但不能上网、网络受限(解决办法)
  13. Si9000阻抗计算笔记(一)
  14. 使用JFlash往Nordic nRF系列芯片烧写程序
  15. android libpng16,Android NDK 开发之 CMake 编译 libpng
  16. excel最常用的快捷键大全:
  17. Python学习手册之Python异常和文件
  18. 从平头哥讲起,谈谈全域旅游,说说为什么要做全栈工程师
  19. strcpy 运用及其实现
  20. 【总结】华为交换机和锐捷交换机的syslog配置

热门文章

  1. JavaScript -- 设计模式 设计原则
  2. linux 多个条件查询,linux中怎么条件查询
  3. oracle如何撤销权限,Oracle授予/撤销权限
  4. image.save存储图像时的报错:cannot write mode F as JPEG
  5. PHP编号排序AAA001,AAA002,AAA003...AAA999,AAB001,AAB002...ZZZ999
  6. Java (JDK和JRE安装)简单粗暴
  7. 四十七.c语言数组作为函数参数
  8. 微信小程序 | canvas绘图
  9. 内外网数据交换解决方案
  10. 【还魂之迷失曼谷】下载