栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

计算机图形学(光栅显示系统、基于GLUT的OpenGL程序框架)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算机图形学(光栅显示系统、基于GLUT的OpenGL程序框架)

1.光栅显示系统
图形显示设备–CRT光栅扫描显示器(阴极射线管显示器)
电子束轰击屏幕表面的荧光物质,从而产生不同亮度的光点,这些光点是显示器可以控制的最小单位,称为像素。光点会逐渐变暗,需要不断刷新,一次刷新出现的完整显示画面称为一帧画面。
CRT光栅扫描显示器缺点:
显示器由离散像素构成,显示一条直线只能通过一组像素去逼近,根据图形确定逼近像素的过程称为扫描转换(也称为图元光栅化或图元的生成)。另外,用像素逼近图形会出现锯齿状的走样。
为了反复绘制屏幕,需要存储屏幕像素亮度或颜色的存储区,称为帧缓冲存储区,也称为帧缓存,帧缓存单元与屏幕像素一 一对应,单元的数值决定了对应像素的颜色。
将帧缓存中存储的数字信号转换成控制电子枪电压的模拟信号需要借助于视频控制器。
绘制图形的过程就是先进行扫描转换,确定用哪些像素近似图形,并将每个像素写入帧缓存对应的单元,然后由视频控制器将每个单元的数据转换成模拟信号去控制电子束的攻击位置和强度。
在光栅显示系统中,需要足够大的帧缓冲存储区才能反映图形的颜色和灰度等级。帧缓存容量与显示器分辨率m*n以及每个像素的表示颜色数k(若一个RGB颜色由三个字节组成,则颜色个数为2的24次方)之间的关系:

早期的光栅显示系统结构简单,主存的一部分作为帧缓存,视频控制器通过总线访问帧缓存完成屏幕的刷新。后来,帧缓存采用固定的内存区域或者采用专用的显示内存。但是扫描转换由CPU完成,CPU负担重,于是出现了GPU(图形显示处理器),他分担了CPU的图形扫描转换工作,加速了图形的渲染。

2.基于GLUT的OpenGL程序框架
(1)glut头文件

(2)main()函数

其中注册函数的参数display函数是自定义显示回调函数函数名,负责在窗口中绘制图形。注意,自定义的显示回调函数没有参数和返回值。
glutMainLoop()表示进入glut事件处理循环,窗口会一直显示并等待键盘以及其他事件的发生,一旦有事件发生,程序自动进行相应的注册回调函数,事件循环会一值执行知道用户关闭窗口。
(3)自定义显示回调函数

glClear函数清空原来颜色缓冲区中存储的数据,默认用黑色作为清楚颜色,一般作为显示回调函数的第一句,放在图形绘制指令之前,必须有;
glFlush函数用于清空命令缓冲区,OpenGL指令不是立刻执行,而是被送到指令缓冲区,当存储的知道达到一定数量才传到cpu执行,单缓存模式下必须调用,一般作为显示回调函数的最后一句;
图形绘制指令,glBegin与glEnd函数配对使用,glBegin的参数指定绘制图形的类型。glVertex2f用于放置顶点坐标,放于glBegin和glEnd之间。glLineWidth执行绘制颜色宽度。也可以用glPointSize指定每个点占像素个数。

添加其他内容的实例:

glutInitDisplayMode中的GLUT_SINGLE表示使用单缓存,GLUT_RGB表示显示RGB颜色模式而不是索引模式。
glutReshapeFunc为注册窗口大小改变时的回调函数,窗口大小变化时程序会自动调用自定义函数reshape:

视口大小为绘制图形在窗口中的显示区域。
另一个自定义函数reshape(该函数通过窗口变化后的宽高,使用gluOrtho2D函数来改变裁剪窗体大小,从而放置图像变形):

3.光栅化

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号