glutInit(&argc, argv); //初始化GLUT库,这个函数必须在其它的GLUT使用之前调用一次 格式较为死板。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 函数功能为设置初始显示模式. 这里设置的是指定 RGB 颜色模式的窗口,指定双缓存窗口,窗口使用深度缓存。

我不是很懂什么是双缓冲和单缓冲,就查了下资料:
<span style="color:#000066">单缓冲,实际上就是将所有的绘图指令在窗口上执行,就是直接在窗口上绘图,这样的绘图效率是比较慢的,如果使用单缓冲,而电脑比较慢,你回到屏幕的闪烁。双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。
</span>

一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像

然后又查了一下什么是深度缓存:

在说深度缓存前先来了解一下什么是深度?

深度,在日常生活中,这个词可以用来形容比如说一口井有多少深,即是一个距离,在OpenGL中也是一样的,不过它是用z坐标来描述的。一般地,z轴的坐标原点在屏幕上,屏幕里为负轴,向外为正轴。我们通过眼睛可以看井的里面,那么在OpenGL中眼睛描述为摄像机。一般地,摄像机的初始位置在OpenGL窗口的正中心。

说了什么是深度,接下来就来说一下什么是深度缓存(区)?

我们在用OpenGL来绘制图形的时候,我们希望有些图形在前,有些图形在后,这时候就用到了z坐标。当然,并不一定图形1的z坐标大于图形2的z坐标,就说图形1会绘制在图形2的前面,这是不对的,因为,这取决于我们的观察平面,即摄像机的位置。当然,如果我们不改动摄像机的位置(即初始化状态),那就可以这么认为的了。但是,如果z坐标超出到了屏幕的外面,那当然我们是看不到的了。

深度缓存(区)的原理就是把一个距离观察平面的深度值(或距离)与窗口的每个像素相关联。

在绘制之前,先通过glClear(GL_DEPTH_BUFFER_BIT);来清除深度缓存。然后在绘制的时候OpenGL会计算绘制图形与观察平面的距离。如果启用了深度缓存区,那么,在绘制的时候会首先对新的深度值和当前窗口中的深度值进行比较,如果小于,则替换当前像素位置的深度值和像素值。反之,就会被遮挡。


glutInitWindowSize(1000, 600); //设置初始窗口的大小,宽度和高度,单位是像素

glutInitWindowPosition(100, 100); //设置初始窗口的位置(窗口左上角相对于桌面坐标(x,y))

glutCreateWindow(argv[0]);//创建窗口
glutDisplayFunc(mydisplay); //注册一个绘图函数, 这样操作系统在必要时刻就会对窗体进行重新绘制操作
glutReshapeFunc(myreshape); //窗口改变的时候调用的函数,在这个里面可以根据缩放后的窗口重新设置
glutIdleFunc(myidle); //设置全局的回调函数,当没有窗口事件到达时,GLUT程序功能可以执行后台处理任务或连续动画。如果启用,这个idle function会被不断调用,直到有窗口事件发生。
glutMouseFunc(mymouse); //检测鼠标
glutKeyboardFunc(mykeyboard); //检测键盘
glutMainLoop(); //进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环

初学opengl的一些知识整理-1相关推荐

  1. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  2. Spring AOP 知识整理

    为什么80%的码农都做不了架构师?>>>    AOP知识整理 面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元 ...

  3. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

  4. 计算机二级c语基础知识,计算机二级C语基础知识整理.doc

    计算机二级C语基础知识整理 1.1 算法 算法:是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程.算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计. ...

  5. js事件(Event)知识整理

    鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover  之后如果光标继续在元素上移动,则不断触发mousemove  如果按下鼠标上的设备(左键,右键,滚轮--),则触发mousedow ...

  6. Spring学习篇:IoC知识整理(一)

    现在正通过spring的官方文档学习spring,将自己学习时的点点滴滴记录下来. Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每 ...

  7. 使用Aspose.Cells的基础知识整理

    使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...

  8. 前端基础知识整理汇总(中)

    前端基础知识整理汇总(中) Call, bind, apply实现 // call Function.prototype.myCall = function (context) {context = ...

  9. 前端基础知识整理汇总(上)

    前端基础知识整理汇总(上) HTML页面的生命周期 HTML页面的生命周期有以下三个重要事件: 1.DOMContentLoaded -- 浏览器已经完全加载了 HTML,DOM 树已经构建完毕,但是 ...

最新文章

  1. zend studio 10破解/汉化
  2. 深度学习在遥感图像目标检测中的应用综述
  3. SAP UI5 message.showMessageToast
  4. 天下为公:TCP堵塞控制
  5. JAVA调用动态链接库
  6. 作为文本内容空格的HTML标签,HTML.fromHtml在文本末尾添加空格?
  7. 为什么公司要对员工的薪资保密?
  8. sass之mixin的全局引入(vue3.0)
  9. jquery remove()不兼容问题解决方案
  10. 苹果就降速门道歉,将 iPhone 电池更换价格下调至 218 元!
  11. 多线程java_40个Java多线程问题总结
  12. keil4如何将c语言转换成汇编语言_keil中怎么在c语言里嵌入汇编语言
  13. 第十三讲:软考中高项13_战略管理、业务流程管理、知识管理
  14. GitHub使用教程
  15. B站 汇编语言 视频 教程
  16. 【软件技能】Perl 基础用法
  17. 如何把照片kb缩小?详细步骤
  18. 微纳自组装技术——纳米孔道阵列辅助自组装技术简述
  19. 统计篇(五)-- 随机变量、样本、统计量
  20. 如何下载在线视频:流行视频FLV下载

热门文章

  1. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨3.55%
  2. ETH基金会社区经理:以太坊改进流程EIP-1正在更新
  3. SAP License:SAP系统界面相关调整和设置
  4. Python_collections_Counter计数器部分功能介绍
  5. 17现代软件工程十五组第三次作业
  6. [HNOI 2014]道路堵塞
  7. ElasticSearch中的简单查询
  8. Web Session和Cookie
  9. WPF编程学习 —— 样式
  10. 对于函数式编程的新理解