opengl函数总结以及算法课程复习1

一个老库 (glut),以后可能整新库
计算机图形学及其相关概念 :
计算机图形学iso国际标准化组织 定义 计算机图形学是研究通过计算机将数据转换成图形并在专门显示设备上显示的原理方法和技术 ieee电器与电子工程协会将其定义为 计算机图形学是利用计算机产生图形化的图像的艺术和科学
计算机图形学研究对象是 图形
构成图形的要素可以分为两类 一类是刻画形状的点线面体等集合要素 另一类 是反应物体本身固有属性 明暗灰度色彩非集合要素
计算机中表示带有颜色及形状信息的图和形常用两种方法 点阵法和参数法
点阵法 用具有灰度或颜色信息的点阵来表示图形的一种方法 强调图形有哪些点组成 这些点有什么灰度和颜色
参数法是以计算机中所记录图形的形状参数与属性参数来表示图形的一种方法 形状参数可以是形状的方程系数 线段的起点和终点对等几何属性的描述,属性参数则描述灰度色彩线型等飞机和属性 把参数法描述的图形叫做图形Graphics 把点阵法描述的图形叫做图像Image
图形图像处理技术 相关学科 : 计算机图形学 数字图像处理 计算机视觉 计算机图形学试图将参数形式的数据描述转换生成逼真的图像 数据图像处理着重强调在图像之间进行变换 旨在加工改善视觉上效果 如增强 锐化 平滑 分割 以及为存储和运输进行编码压缩 计算机视觉是研究用计算机来模拟生物外显或宏观视觉功能的科学和技术 他模拟人对客观事物的识别过程 是从图像到特征数据 对象的描述表达的处理过程
计算机图形学的发展
计算机图形学学科的发展 20世纪50年代 酝酿期
趋势 结合图形硬件实现实时绘制 基于数据采集进行真实感建模 绘制与建模任务相结合
基于计算机图形学处理和显示技术的数字多媒体 虚拟现实 可视化 数字娱乐
图形硬件设备的发展
图形软件的发展 iso 批准了一些标准

计算机图形学的应用

计算机辅助设置与制造

计算机辅助绘图

计算机辅助教学

办公自动化和电子出版社技术

计算机艺术

在工业控制及交通方面的应用

在医疗卫生方面的应用

图形用户界面

计算机图形学研究动态

计算机动画

传统动画 是一种胶片动画 固定在二维空间之中三维情况如明暗处理和阴影只是偶尔考虑 二计算机动画生成的是一个虚拟的三维世界
刚体动画是人们熟悉的计算机动画中最原始的形式 最简单的刚体动画是在一定的范围内移动物体或观察点(虚拟摄像机)
变形动画是把一种形状或物体变成另一种不同的形状或物体 中间过程则通过形状或物体的起始状态和结束状态进行插值计算
基于物理的动画也称为运动动画 采用物理学规律来模拟运动
粒子动画 主要采用大量粒子产生动画 来模拟默写自然现象 如烟火 雾
关键动画通过建立计算机模型来模拟四足动物和两足动物的运动 设置关节动画的方法主要包括正向和逆向运动学 正向运动学是一种低层次的方法主要通过对关节的位置和角度设置关键帧从而获得其关联的各肢体的位置 逆向运动学是一种高层次的方法通过设置末端关节的位置和角度 由计算机计算出所有相关的中间关节的位置和角度
行为动画 对物体的行为进行建模 行为是指比基本运动更复杂的运动 主动和被动 通过行为规则确定
地理信息系统

人机交互

一般可以将人机交互行为分为4种感知过程
人对于显示世界的感知 计算机对外部世界的感知 如果计算机时可以感知外部世界的机器,那么这种感知是人通过计算机传递的感知信息 计算机作为虚拟世界的一员自动做出的反应
在高级的人机协同工作系统中以上4中感知都存在 涉及的学科领域 计算机科学(人机界面的设计和工程)心理学(人的认知过程和行为分析)社会学和人类学(技术工作和组织之间的交互作用)以及工业设计(交互式产品)
真实感图形显示

真实图形显示指通过综合利用数学 物理学计算机科学及其他相关学科只是逼真的表示真实世界的图形显示技术
图形的真实感显示来自于空间中的物体的相对位置 相互遮挡关系 有光线的传播产生的明暗过渡的色彩
真实感图形的生成一般经历场景造型曲靖变换视域裁剪消除隐藏面及可见光亮度计算等步骤
场景造型是指用数学方法建立对所构造的三维场景的几何描述并将它们输入计算机 这部分可由三维立体造型或曲面造型系统完成 三维几何对象是在场景坐标系中建立的 而屏幕上所显示的画面只是在给定十点和视线方向时 三维景物在垂直于视线方向上的二维成像平面上的投影
取景变换 将几何对象的三维坐标转换到屏幕上的像素位置 需要进行一系列的坐标变换
裁剪 目的在于从几何数据中抽取所需的信息 最典型的用途时从一幅大画面中采取局部视图
消隐 给定视点和视线方向 决定场景中把鞋物体的表面是可见的哪些是因被遮挡而不可见的 所有隐藏线 面的消除算法都涉及各景物表面离视点远近的排序 一个物体离视点越远 他越有可能被另一个离视点较近的物体遮挡
可见面的亮度由基于物理学的光照模型计算得到的可见面投射到观察者严重的光亮度大小和色彩组成 进而将它转换成是和图形设备的颜色值 从而确定投影画面上每个像素的颜色 最终形成图形
虚拟现实

系统构成 除了刚性能计算机系统的硬件和软件 还需下列四种关键技术
能以实时的速度生成有逼真感的劲舞图像(三维全彩色 有敏感纹理和阴影的图像)
能高精度的实时跟踪用户的头和手
头戴显示器能产生高分辨率图像和较大视角
能对用户的动作产生力学反馈
高速实时三维图形处理硬件是关键设备
三维输入设备 (传感器。。
控制球:一种内装Polhemus(波尔希摩斯名字而已)传感器的空心球 球面装有两个按钮传感器用于指出空间位置的变化按钮的功能有软件定义 他易于使用 定位精度比数据手套高
指套 控制球的一种变体 其上装有传感器和微动开关 进行抓取操作特别合适
操纵盒 带有花痴的具有三个自由度的操纵杆 十二位操纵杆的发展和变形 比较老式
数据手套 能给出用户所有手指关节的角度变化 由应用程序判断用户在虚拟现实环境中进行操作时手的姿势
跟踪球 关键技术 跟踪
有四种技术 机械式 老式 由连杆装置组成
电磁式 如polhemus电磁跟踪器 原理 在三个顺序生成的电磁场中 装有三个接收天线安装在头盔上 有所接受的9个场强数据计算出用户头部位置和方向 优点 体积小 价格便宜 缺点 时间滞后长 和跟踪范围小 信号易受影响 精度下降
超声式 原理与电磁式相同 头盔上安装传感器 易受影响
光学式 可用激光 红外线作为光源 并按一定结构安装在周围环境中作为信号标志 在头盔时显示器中装有发光二极管传感器 通过光电管产生电流的大小及光斑中心在传感器表面的位置来推算出头部的位置与方向 优点 精度高 刷新快 滞后时间短 用户活动范围小
一种有前途的光学跟踪其叫做自跟踪器 利用图像处理的原理通过头盔显示器上安装的管传感器和专用图像处理机 以每秒取样1000帧图像的速率 不断地对相继的帧图像进行相关分析 从而推行算出头部的位置和方向 由于他不要求在环境中安装任何信号标志 因此工作范围将不受影响 如何控制测量中累积的误差来控制跟踪精度是一个难题
头盔显示器
呆在用户头上为用户提供虚拟现实中景物的彩色立体显示 遮挡式 透视式遮挡式采用LEEP广角光学镜头
虚拟现实系统的应用前景
在军事方面 在建筑设计方面 在医疗中的应用
虚拟现实技术包括计算机 图像生成与显示 传感器 测控 通信 多媒体 人工智能技术 和软件工程技术 一种全新的信息处理方式
科学计算可视化

一种概念 它时运用计算机图形学和图像处理技术 将科学计算过程中的数据及计算结果的数据转换为图形和图像在屏幕上显示出来 并进行交互处理的理论方法和技术
按功能分为3个层次 科学计算结果数据的后处理 科学计算结果数据的实时处理及显示 科学计算结果数据的实时绘制及交互处理 绘制rendering指有物体的几何模型生成屏幕图像的过程
并行图形处理

仅仅依靠计算机本身存储空间的扩大计算能力的提高 不能满足实时显示复杂真实图形的要求 三方面 用一个浮点处理器不能满足对体素作几何变化和裁剪的要求
用一个显示处理器和存储器不能满足扫面转换和像素处理的需要
常用的存储器系统的带宽不能支持对帧缓冲存储器快速读写的要求(帧缓冲存储器。。
并行处理加速计算 三个层次 计算机的并行图形处理 利用工作站网络 或工作站群的计算集群进行并行图形计算
在单个工作站或个人计算机 用两个以上的图形显示子系统(显卡) 实现并行计算 采用相应的技术 如SLI 或CF 实现图形渲染上的并行处理
在一个显示子系统中有多个图元/视觉处理单元 通过调度算法实现并行图形处理 。。

重要图示 p1 图1-1
参考资料:
[1] 陆枫、何云峰 计算机图形学基础(第三版) 电子工业出版社 2018-07

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
opengl 期末复习资料 第一、二章: 1、 OpenGL中能渲染的基本元素是什么?GLU 可以渲染哪些基本元素? 第三章 2、 用框图说明OpenGL的渲染流程,并简要说明每个坐标系。 第四、五章 3、 写出OpenGL中局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。 4、 分析程序并计算 请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。 void init(void) { GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); //glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); //glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glNormal3f(..); ○1glVertex3f(1.0, 0.0, 0.0); ○2glVertex3f(0.0, 1.0, 0.0); ○3glVertex3f(0.0, 0.0, 1.0); glEnd(); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 第9章 在OpenGL中,使用纹理的步骤是什么?纹理坐标和纹理都可以通过程序计算出来,自动生成纹理的原理是什么? 第10章 帧缓存有几种,什么叫片元,片元的测试和操作有哪些? 明白stencilbuffer的使用。 用stencilbuffer编程实现一个功能。 5、 采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么? 如何实现Multi-Pass 渲染? 6、 在一个坐标系W中,光源的位置为 (0, 0, 200, 1.0),设模型为一个以(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)为三个点的三角形,另一个模型是以(0, 0, 10)为中心,长度为2的一个正方体,如何实现该正方体在三角形平面上的阴影?如何使用OpenGL函数来实现?要求在照相机改变时,该程序应该仍然有效。 7、 如何实现纹理的反走样?说明其原理。 8、 写出场景的反走样算法,并说明其原理。 9、 如何实现采用立方体映射实现的环境映射,写出立方体映射的生成算法和把其作为环境映射时显示的程序。 10、 请列举出3种以上的三维模型常见的表示格式,已知一个立方体环境映射对应的六个面上的图片,分别假定为X_POSITVIE_PIC, X_NEGATIVE_PIC, Y_POSITIVE_PIC, Y_NEGATIVE_PIC, Z_POSITIVE_PIC, Z_NEGATIVE_PIC,请用OBJ格式表示一个长度为1的立方体,并把每个面分别贴上给定的六个图片。 11、 分析下面的程序并计算 在下面的例子中,计算对应○1○2○3○4四个顶点所对应的四边形上的一个点(-1.0, 0.5, 0.0)对应的纹理坐标是多少?按照最近邻域滤波方法,该点对应的颜色是什么? /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64 static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; #ifdef GL_VERSION_1_1 static GLuint texName; #endif void makeCheckImage(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; } } } void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); makeCheckImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #ifdef GL_VERSION_1_1 glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); #endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #ifdef GL_VERSION_1_1 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #else glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #endif } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); #ifdef GL_VERSION_1_1 glBindTexture(GL_TEXTURE_2D, texName); #endif glBegin(GL_QUADS); ○1glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); ○2glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); ○3glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); ○4glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.6); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } Deferred shading 原理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值