目录

坐标表示

图形功能

软件标准

OpenGL简介

基本OpenGL语法

相关库

一个完整的OpenGL程序

OpenGL出错处理

总结


图形软件有两个大类:专用软件包和通用编程软件包。

专用图形软件包是为非程序员设计的,使得他们在某些应用中能用来生成图形、表格而不必关心显示所需的图形函数。

通用图形编程软件包提供一个可用于C、C++、Java或Fortran等高级程序设计语言的图形函数库。由于图形函数库提供了程序设计语言和硬件之间的软件接口,所以这一组图形函数称为计算机图形应用编程接口

坐标表示

首先在各自的参照系中构造每一对象的形状,这些坐标系称为建模坐标系局部坐标系主坐标系

一旦指定了单个物体的形状,我们可将对象放到称为世界坐标系的场景参照系中的适当位置。这一步涉及从单独的建模坐标系到世界坐标系的指定位置和方向的变换。

在描述好场景所有部分之后,要将该场景的世界坐标描述经各种处理变换到一个或多个输出设备参照系来显示。这个过程称为观察流水线。世界坐标系的位置首先转换到我们要对场景进行观察所对应的观察坐标系,该转换依据假想照相机的位置和方向来进行。然后,对象位置变换到该场景的一个二维投影,该投影对应于我们在输出屏幕上看到的结果。然后将该场景存入规范化坐标系(规范化设备坐标系,可使图形软件包与任何特定的输出设备的坐标范围无关),其坐标范围从-1到1或从0到1,这依赖于不同的系统。我们还要识别可见面并清除在显示设备上观察边界之外的图形部分(遮挡剔除)。最后,图形经扫描转换到光栅系统的刷新缓存中进行显示(光栅化)。

显示设备的坐标系称为设备坐标系,或对视频监视器而言称为屏幕坐标系。都是左手系,离开xy平面的正距离增加方向可解释为远离观察位置而去。

图形功能

图形的基本构造块称为图形输出图元

属性是输出图元的特性。它描述了一个特定的图元是怎样显示出来的,包括颜色设定、线性或文本格式及区域填充图案等。

可以使用几何变换来改变场景中一个对象的大小、位置或方向。

某些图形包给出一组函数实现建模变换,将建模坐标系中给出的对象描述组织成场景。

观察变换用来指定将要显示的视图、使用的投影类型及在输出显示区域出现的范围。

输入函数用于控制和处理来自输入设备的交互流。

将处理事务性的任务(如显示屏变成指定颜色及对参数进行初始化)的功能归入控制操作类。

软件标准

标准化图形软件的最主要目标是可移植性。

图形函数定义为独立于任何程序设计语言的一组规范。语言绑定则是为特定的高级程序语言而定义的,它给出该语言访问各种图形函数的语法。

OpenGL简介

OpenGL基本函数库用来描述图元、属性、几何变换、观察变换和进行许多其他的操作。

基本OpenGL语法

OpenGL基本库(也成为OpenGL核心库)中的函数名要以gl为前缀,并且函数名中每一个组成词的第一个字母要大写。

符号常量均以GL开头。常量名中的每一个组成词均采用大写,单词之间用下划线_分隔开。

OpenGL中的数据类型

相关库

OpenGL实用函数库(OpenGL Utility, GLU)

Open Invertor  为交互式三维应用提供函数和预定义的对象形状

OpenGL的X窗口系统扩充(OpenGL Extension to the X Window System GLX)提供了支持计算机上的OpenGL函数的窗口系统库,函数以glX为前缀

Apple系统可使用Apple GL(ALG)接口进行窗口操作管理,函数以agl为前缀

WGL 函数提供了Windows到OpenGL的接口,以wgl为前缀

Presentation Manager to OpenGL(PGL)  是一个用于IBM OS/2的接口,使用pgl为前缀

OpenGL实用函数工具包(OpenGL Utility Toolkit, GLUT)提供了与任意屏幕窗口系统进行交互的函数库,以glut为前缀

一个完整的OpenGL程序

基本常用函数:

glutInit(&argc, argv);GLUT初始化

glutCreateWindow("An Example OpenGL Program");显示窗口在创建时给定的标题

glutDisplayFuc(lineSegment);在称为lineSegment的过程中有了线段的OpenGL描述,调用此函数就将线段描述推送到显示窗口

glutMainLoop();该函数必须是程序的最后一个。它显示初始图形并使程序进入检查鼠标或键盘等设备输入的无穷循环之中

glutInitWindowPosition(50 , 100); 用来给出显示窗口基于屏幕左上角的初始位置,以像素为单位

glutInitWindowSize(400,300);用来设定显示窗口的初始宽度和高度的像素数

glutInitDisplayMode函数来设定显示窗口的缓存和颜色模型等选项,例如:

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);指定使用单缓存和RGB颜色模型,也是默认的选项

#include <GL/glut.h>void Init()
{glClearColor(1, 1, 1, 0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0, 200, 0, 150);
}void LineSegment()
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(0, 0.4, 0.2);glBegin(GL_LINES);glVertex2i(180, 15);glVertex2i(10, 145);glEnd();glFlush();
}int main(int argc, char* argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(50, 100);glutInitWindowSize(400, 400);glutCreateWindow("AnExample OpenGL Program");Init();glutDisplayFunc(LineSegment);glutMainLoop();return 0;
}

OpenGL出错处理

GLenum ErrorCheck()
{GLenum code;const GLubyte *string;code = glGetError();if (code != GL_NO_ERROR){string = gluErrorString(code);fprintf(stderr, "OpenGL error: %s\n", string);}return code;
}

比较好的做法是在每一个显示回调子程序中至少检查依次出错情况。

总结

通常,图形设计软件包要求坐标描述在笛卡尔坐标系中给出。场景中的每个对象可定义在单独的建模笛卡尔坐标系中,然后映射到世界坐标系,并构造该场景。三维对象从世界坐标系投影到二维平面的规范化坐标系中,然后再变换到最终的显示设备坐标系。从建模坐标到规范化设备坐标的转换,是独立于应用中使用的特定设备的。设备驱动器则用于将规范化坐标变换到整数设备坐标。

图形软件包的函数可分为几类:输出图元、属性、几何和建模变换、观察变换、结构操作、输入函数、图形-结构操作和控制操作。

OpenGL系统由独立于设备的函数集(称为核心库)、实用库(GLU)和实用工具包(GLUT)三部分组成。在GLU的辅助函数集中有用来生成复杂对象、指定二维观察应用的参数及处理表面绘制操作和完成其他支持任务的函数。在GLUT中有大量的函数用来管理显示窗口、与屏幕窗口系统交互及生成某些三维锥体。

计算机图形学 学习笔记 计算机图形软件相关推荐

  1. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

    接上文 计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结 在图形学中,有两大基本工具:向量分析,图形变换.本文将重点讲解向量和二维图形的变换. 5. ...

  2. GAMES101-现代计算机图形学学习笔记(作业07)

    GAMES101-现代计算机图形学学习笔记(作业07) Assignment 07 GAMES101-现代计算机图形学学习笔记(作业07) 作业 作业描述 思路 结果 原课程视频链接以及官网 b站视频 ...

  3. GAMES101-现代计算机图形学学习笔记(作业02)

    GAMES101-现代计算机图形学学习笔记(作业02) Assignment 02 GAMES101-现代计算机图形学学习笔记(作业02) 作业 作业描述 需要补充的函数 思路 结果 原课程视频链接以 ...

  4. GAMES101-现代计算机图形学学习笔记(作业01)

    GAMES101-现代计算机图形学学习笔记(作业01) Assignment 01 GAMES101-现代计算机图形学学习笔记(作业01) 作业 作业描述 需要补充的函数 思路 结果 原课程视频链接以 ...

  5. 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    接上文 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等 通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维 ...

  6. 计算机图形学 学习笔记(五):多边形裁剪(Suther land-Hodgeman),文字裁剪

    接上文 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky 光栅图形学算法 3.4 多边形裁剪 之前上一篇文章中,我们介绍了直线段的裁 ...

  7. 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky

    接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...

  8. 计算机图形学学习笔记——Whitted-Style Ray Tracing(GAMES101作业5讲解)

    计算机图形学学习笔记--Whitted-Style Ray Tracing GAMES101作业5讲解 遍历所有的像素生成光线 光线与平面求交 遍历所有的像素生成光线 关于作业五中如何遍历所有的像素, ...

  9. 计算机图形学 学习笔记(九):曲线曲面(一):参数曲线、参数几何代数形式

    接上文 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影) 计算机图形学三大块内容:光栅图形显示(前面已经介绍完了 1-8).几何造型技术.真实感图形显示.光栅图 ...

最新文章

  1. python入门自学-Python自学规划:一个月从入门到精通,每天做什么?
  2. Qt::WA_QuitOnClose用法
  3. bulter机器人_科普!九款使用率最高的物流机器人大盘点!
  4. LeetCode 1015. 可被 K 整除的最小整数(数学)
  5. matlab 图像读取长宽_计算机视觉学习笔记1 图像读取显示和尺寸变换
  6. 医疗大数据可能面临的挑战
  7. STM32F407外部晶体改为25M后检测不到芯片的解决办法
  8. 【大数据部落】(数据挖掘)如何用大数据做用户异常行为分析
  9. uvalive 3938 Ray, Pass me the dishes! 线段树 区间合并
  10. 构建会员运营管理系统 帮助零售企业数字化转型
  11. 计算机无法正常启动安全模式开启,Win7电脑开机无法正常启动只能进入安全模式怎么解决...
  12. Winsock API编程之UDP小结
  13. HTML中的锚点连接
  14. 2020年区块链行业十大趋势
  15. PS常用案例步骤详解,自学 Photoshop 2022 Mac版——笔记 3实战PS做练习题
  16. 梦幻西游手游300级装备、30级宝石、抽奖后台、坐骑版本搭建技术讲解
  17. 雨滴网易云播放器html代码,求大佬帮忙看下 雨滴音乐插件怎么改代码关联网易云?...
  18. HTML基础学习记录
  19. 如何用六年成为一个全能的机器人工程师
  20. 普罗米修斯prometheus的安装与监控linux

热门文章

  1. 2020_Nginx面试题了解一下
  2. 第十二节 电路识图 从Arduino开始讲起
  3. 射频拉远与光纤直放站有什么区别?
  4. 微信小程序之虚拟摇杆练习
  5. 从零开始配置vim(23)——lsp基础配置
  6. 数据库、数据库可视化软件的区别
  7. FFmpeg将YUV420P格式数据编码成H.264
  8. Linux系统源码安装mysql
  9. 《工具箱-服务器相关》FTP服务器vsftpd配置项-主目录限制(chroot_local_user、chroot_list_enable)
  10. python利用asyncore的端口映射(端口转发)的代码