190 likes | 396 Views
复习题. 1. Siggraph 是() a. 图形学的杂志 b. 图形学的组织及其会议 c. 图形学的标准 d. 图形学的某个算法 2. 列举三个以上图形学的应用领域 3. 计算机图形学的三大主题是 、 和 。 4. 分辨率为 1024×1024 的显示器需要多少字节位平面数为 24 的帧缓存? A. 512KB ; B. 1MB ; C. 2MB ; D. 3MB ;. 第 0 章 导论. Windows 环境下的图形生成: OpenGL.
E N D
复习题 1. Siggraph是() a. 图形学的杂志 b. 图形学的组织及其会议c. 图形学的标准 d. 图形学的某个算法 2. 列举三个以上图形学的应用领域 3. 计算机图形学的三大主题是 、 和 。 4.分辨率为 1024×1024 的显示器需要多少字节位平面数为 24 的帧缓存?A. 512KB; B. 1MB; C. 2MB; D. 3MB ;
Windows环境下的图形生成:OpenGL • OpenGL是SGI公司开发的一个跨平台的开放式图形编程工具,用户可以很方便的利用它开发出有多种特殊视觉效果的三维图形 • 作为图形硬件的软件接口,OpenGL集成了所有曲面造型、图形变换、光照、材质、纹理、融合、反走样等复杂的计算机图形学算法,将用户从具体的硬件和操作系统中解放了出来 • 现在 OpenGL 已经成为最主要的二、三维交互式图形应用程序开发环境
Windows环境下的图形生成:OpenGL • Microsoft把OpenGL集成到Windows中 • OpenGL本身是一个底层库,但在编程实践中还需要一些能简化编程任务、易于在窗口系统上执行的高层库 • Windows平台所支持的OpenGL库函数主要有五类: 核心函数、实用库函数、 辅助库函数、 Windows专用函数、Win32 API函数
Windows环境下的图形生成:OpenGL • OpenGL核心函数 • 核心函数以 gl 开头,主要实现创建二维和三维几何形体、设置视点、几何变换、设置颜色及材质、灯光、纹理映射、反走样、雾化场景、位图和文字处理等最最基本的功能。独立于工作平台。 • OpenGL实用库函数 • 实用库函数以 glu 开头,是基于核心函数而比其更高一层的函数,包括纹理映射、坐标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体等。独立于工作平台。
Windows环境下的图形生成:OpenGL • 辅助库函数 • 辅助库函数以 aux 开头,这些函数本来是用于初学者做简单的练习之用。由于简化,支持平台较少,不适合产品开发 • windows专用函数 • 以 wgl 开头,用于连接Windows窗口系统和OpenGL。能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等。用于WindowsNT环境下。 • Win32 API函数 • 用于处理象素存储格式和双缓冲区。只能用于Win32系统
VS2008(VC) 中使用OpenGL • 第一步,选择一个编译环境; • 第二步,安装GLUT工具包; • 1、将下载的压缩包解开,将得到5个文件2、把解压得到的glut.h放到VS2008安装目录下面的“VC\include\glut”文件夹。3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹,VS 安装目录下面的“VC\lib”文件夹)。4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) • 第三步,建立一个OpenGL工程。以VisualStudio2008为例。选择File->New->Project(VC),然后选择Win32 Console Application,选择一个名字,然后按OK。在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。然后向该工程添加一个代码文件,取名为“xyz.c”,注意用.c来作为文件结尾。 以VC6.0为例,使用Microsoft Visual Studio\Common\MsDev98\bin\MSDev.exe 打开 .c 文件,编译\自动创建工程\运行。
局部坐标 模型变换 世界坐标 取景变换 视点坐标 投影变换 投影坐标 设备变换 屏幕坐标 三维变换流程图 三维变换的流程图
三维变换的基本概念 • 场景造型 • 坐标系:场景坐标系=世界坐标系+局部坐标系 • 变换:模型变换 • 放置虚拟照相机 • 坐标系:视点坐标系(虚拟照相机的位置、朝向以及向上的方向) • 变换:取景变换 (在视域四棱锥进行裁剪和背面剔除) • 二维显示: • 坐标系:投影坐标系和屏幕坐标系 • 变换:投影变换、二维变换
场景坐标系和模型变换 • 几何场景建立于世界坐标系中 • 场景中的具体物体与局部坐标系相联系 • 局部坐标系可以简化物体的定义 • 物体建立=标准体素+变换 • 模型变换:物体从局部坐标系到世界坐标系的变换,平移、放缩、旋转等
视点坐标系和取景变换 • 视点坐标系 • 视点坐标系定义于世界坐标系中; • 其过程类似于拍照片: • 照相机的位置 • 照相机镜头的朝向:视线方向 • UP方向 • 由世界坐标系到视点坐标系的取景变换(在视域四棱锥进行裁剪和背面剔除)
视点坐标系的交互建立 • 坐标原点C=(Cx,Cy,Cz):相机的位置 • 单位向量N=(Nx,Ny,Nz):镜头的朝向 • 与N不平行的向量UP: 得到两个向量 U=(Ux,Uy,Uz) 和V=(Vx,Vy,Vz),然后单位化。 • 四个矢量C、U、V、N组成了视点坐标系
屏幕坐标系和设备变换 • 在投影平面上,有一个矩形区域称为视窗,见上图坐标系中vovxvy的矩形和“视域四棱锥” 图中的矩形 • 设备变换 • 二维变换:将定义在视窗中的投影结果转换到以像素为单位的屏幕坐标系 • 扫描转换:将连续的几何物体转换为离散的光栅表示
三维几何和几何流水线 模型变换(旋转、平移、缩放) 视图变换 (眼睛的位置、观察的目标点、视图向上方向) 裁剪 投影(正交、透视) 窗口到视口映射
观察过程 • projection(viewing(modeling(geometry)))) • (projection * viewing * modeling) (geometry) • 在定义几何模型之前,先定义投影操作,然后是视图变换,最后是模型变换。 • OpenGL将模型变换与视图变换结合成一个变换(modelview transformation)
一个简单的OpenGL程序 Figure0.7.c • 使用GLUT工具包 • GLUT(OpenGL Utility Toolkit),用于隐藏不同窗口系统API的复杂性,是一个学习OpenGL编程的一个良好开端 • main()函数结构int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(700,700); glutInitWindowPosition(0,0); glutCreateWindow("Temperature in bar"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutIdleFunc(animate); myinit(); glutMainLoop(); /* enter event loop */ } 模型视图变换 回调(callback)函数的注册p163 新窗口下投影