OpenGL入门

  • 开启一个窗口:
  • 运用OpenGL在窗口中绘制图形
    • 显示一个窗口
    • 利用OpenGL修改窗口背景颜色
    • 改变颜色的闪烁

开启一个窗口:


// Include for GLFW headers - library handling the window
#include <GLFW/glfw3.h>
#include <iostream>int main()
{glfwInit(); // 初始化GLFW,在创建窗口前一定要做// 创建一个名为My Window的500*500的窗口// 第一个参数用于指定是否是全屏,第二个参数用于指向一个窗口用于共享资源。// 返回一个创建好的窗口的指针,如果失败则返回nullptrGLFWwindow* window = glfwCreateWindow(500, 500, "My Window", nullptr, nullptr);if( window==nullptr ) {std::cerr<<"GLFW Failed to create a Window"<<std::endl;glfwTerminate();exit(1);}// 如果窗口没有关闭while( !glfwWindowShouldClose(window) ) {glfwSwapBuffers(window); // Double buffering (will be used to avoid flickering when animating a scene)glfwPollEvents();        // Handle GLFW events (ex. mouse clicks, etc)}glfwTerminate(); // Close the GLFW Windowreturn 0;
}

关键代码:

glfwInit();
GLFWwindow* window = glfwCreateWindow(500,500,"My Window",nullptr,nullptr);
glfwWindowShouldClose(window); //True or False
glfwSwapBuffers(window); //减少闪烁
glfwPollEvents(); //用于检测鼠标点击
glfwTerminate();

Rq:

  • OpenGL 会直接和GPU对话。
  • OpenGL 是一个库。

运用OpenGL在窗口中绘制图形

显示一个窗口

#include "../external/glad/include/glad/glad.hpp" // glad.h should be included before glfw or any OpenGL related include#include <GLFW/glfw3.h>
#include <iostream>
#include <cmath>int main()
{glfwInit();// 告诉GLFW OpenGL的环境,这里是OpenGL 3.3 core profileglfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, 1);glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, 1);glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);// =====跟之前一样,初始化一个窗口=====GLFWwindow* window = glfwCreateWindow(500, 500, "My Window", nullptr, nullptr);if( window==nullptr ) {std::cerr<<"GLFW Failed to create a Window"<<std::endl;glfwTerminate();exit(1);}// ===============================// 使得窗口能接受OpenGL的指令glfwMakeContextCurrent(window);// Load OpenGL FunctionsgladLoadGL();// Print OpenGL Information,与具体的显卡有关std::cout << "OpenGL information: VENDOR      : " << glGetString(GL_VENDOR)   <<std::endl;std::cout << "                    RENDERDER   : " << glGetString(GL_RENDERER) <<std::endl;std::cout << "                    VERSION     : " << glGetString(GL_VERSION)  <<std::endl;std::cout << "                    GLSL VERSION: " << glGetString(GL_SHADING_LANGUAGE_VERSION)<<std::endl;// =====跟之前一样,对一个窗口的关闭进行判断=====while( !glfwWindowShouldClose(window) ) {glfwSwapBuffers(window);glfwPollEvents();}glfwTerminate();// ========================================return 0;
}

关键代码:

#include "../external/glad/include/glad/glad.hpp" // glad.h should be included before glfw or any OpenGL related include
// 告诉GLFW OpenGL的环境,这里是OpenGL 3.3 core profileglfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, 1);glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, 1);glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
// 使得窗口能接受OpenGL的指令glfwMakeContextCurrent(window);
// Load OpenGL FunctionsgladLoadGL();

Rq:

  • 为了得到一个良好的动画的体验,至少要有25fps。

利用OpenGL修改窗口背景颜色

while( !glfwWindowShouldClose(window) )的循环中加入

// Set the (R,G,B,A) color to clear the screen
// RGBA (Red-Green-Blue-Alpha), A表示透明度,每一个值在0和1之间。
glClearColor(1.0f, 1.0f, 0.5f, 1.0f);
// Clear the screen (designated by the color buffer),如果不删除不能改变颜色
glClear(GL_COLOR_BUFFER_BIT);

改变颜色的闪烁

我们用余弦函数的形式改变图片中红色的组成多少

int counter = 0;
while( !glfwWindowShouldClose(window) ) {counter = (counter+1)%100;float u = counter/99.0f; // 不能写成/99,因为需要一个float的除法!// Set the (R,G,B,A) color to clear the screenglClearColor(0.5+std::cos(2*3.14f*u)/2.0f, 1.0f, 0.5f, 1.0f);// Clear the screen (designated by the color buffer)glClear(GL_COLOR_BUFFER_BIT);glfwSwapBuffers(window);glfwPollEvents();
}

OpenGL入门:窗口开启、改变窗口背景颜色相关推荐

  1. 按键改变元素背景颜色 链式编程的原理 评分案例 each方法的使用

    按键改变元素背景颜色 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  2. Vue改变网页背景颜色切换

    今天给大家分享一个好看的网页背景颜色切换的html文件 功能支持: 1.点击默认主题内容区域切换对应颜色,包括文字背景和文字颜色 2.在动态颜色中可以选择自己喜欢的颜色动态切换 实现代码: <! ...

  3. Ant Design vue 改变表格背景颜色

    写这篇文章之前,我已经和经理掰扯半天了.我实现的代码写成文档,复制到他的电脑上没效果.我自己的电脑就可以实现功能.一开始我写的代码也没有效果,但改来改去突然就可以了,写成原来的样子也可以实现了,没研究 ...

  4. MFC改变对话框背景颜色

    原文链接: http://blog.sina.com.cn/s/blog_59955afc0100spjz.html 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现. - ...

  5. android背景颜色动态修改,Android自定义TextView带圆角及背景颜色(动态改变圆角背景颜色)...

    最近根据项目需求自定义了一个TextView控件,主要用来做状态的标识,比如一个订单状态有各种,当然了这种设置在Android中可以直接用xml文件来处理,但是对于xml文件太过于麻烦,针对不同的颜色 ...

  6. 微信小程序改变页面背景颜色

    改变整个页面的背景颜色 在该wxss中添加  page {   background: #F3F3F3; }

  7. codeblocks改变主题背景颜色

    原本的背景颜色是白色的,长时间注视的话,对我们的眼睛极为不好,所以接下来介绍如何改变codeblock的背景颜色. 确保codeblocks已经关闭. 下面介绍这种方法. 亲测有效哦! 第一种方法: ...

  8. 微信小程序开发——动态改变按钮背景颜色

    在wxss文件中可以简单地设置button的背景颜色和各种样式,然而,这样的样式设计不能够动态改变.那么,如何动态改变控件的样式呢?下面以button为例来介绍. 此方法不用修改wxss文件,首先,在 ...

  9. ,改变LI背景颜色与背景图片

    1,背景颜色 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  10. uni-app -- 改变页面背景颜色

    在uni-app中想要修改整个页面的背景颜色,直接给修改最外层标签的background-color是无效的 解决办法:使用page标签,设置他的高度为100% <template>< ...

最新文章

  1. 拥有AI「变声术」,秒杀了多年苦练的模仿艺能
  2. 机器学习调参自动优化方法
  3. 序列化在反序列化时无法加载程序集的问题
  4. Linux Rootkit 系列五:感染系统关键内核模块实现持久化
  5. Resources$NotFoundException Resource is not a Drawable (color or path) 问题解决
  6. bigdecimal取小数部分_Java中BigDecimal保留两位小数点有哪些方法
  7. mysql 优化配置 大批量数据插入_php导入大量数据到mysql性能优化技巧
  8. 国产编程语言又造假,丢不起这人!
  9. [css] css图片缩放失真出现锯齿的如何解决呢?
  10. Java学习之路之Hello World小程序
  11. phpMyAdmin链接MySQL拒接_phpmyadmin连接MySQL服务器被拒绝
  12. 让memcached和mysql更好的工作
  13. css flexbox水平垂直
  14. IDEA java 调用 webservice接口
  15. Python之文本去重(基础版)
  16. 爬虫工具八爪鱼初体验
  17. JPBC密码学库封装函数
  18. 阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变...
  19. 技校可以学计算机平面设计吗,计算机平面设计免费试学服务为先_孙进技校
  20. hadoop-HFDS

热门文章

  1. 【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)
  2. Oracle常见问题一千问
  3. C++入门学习:引用和常引用
  4. KSO-Sqlserver事务的实现
  5. C# Winform画图
  6. mysql模糊查找英文可以查找中文不行(详细记录)
  7. 用Python去除图像的黑色或白色背景
  8. NUKED数值表生成
  9. Gaze360: Physically Unconstrained Gaze Estimation in the Wild(在野外非受控的360°视线估计)
  10. 斑马打印机gk888t的安装和使用