《最新土地一级开发项成目本核算幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新土地一级开发项成目本核算幻灯片.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着“怎么这么热怎么这么热”,于是三,于是三五成群,聚在大树下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑五成群,聚在大树下,或站着
2、,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到“强子,别跑强子,别跑了,快来我给你扇扇了,快来我给你扇扇”。孩子们才不听这一套,跑个没完,直到累气喘吁吁,。孩子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,“你你看热的,跑什么?看热的,跑什么?”此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲的味道!蒲扇是中国传统工艺品,在我国
3、已有三千年多年的历史。取材的味道!蒲扇是中国传统工艺品,在我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过了我们的扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过
4、了我们的半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧道,袅道,袅8/15/2022山东大学 HCI& VR Lab.2一.基本内容 OpenGL API的发展历史 OpenGL 体现结构OpenGL 作为一个状态机( state machine) 函数 Functions 类型 Types格式Formats 简单程序8/15/2022山东大学 HCI& VR Lab.9GLUT OpenGL 实用工具库 (GLUT: OpenGL Utility Toolkit Library)提供所有窗口系统的共同功能打
5、开窗口 Open a window从鼠标和键盘获得输入Get input from mouse and keyboard菜单 Menus事件驱动 Event-driven代码可以在平台之间移植,但是GLUT 缺乏在确定平台上优秀工具包所具有的功能没有滚动条8/15/2022山东大学 HCI& VR Lab.10软件组织GLUTGLUGLGLX, AGLor WGLX, Win32, Mac O/S软软 件件or 硬硬 件件 应用程序应用程序OpenGL 图形图形工具条等工具条等8/15/2022山东大学 HCI& VR Lab.11OpenGL 体系结构快速模式显示列表显示列表多项式求值器多项
6、式求值器逐顶点操作逐顶点操作 &基本图元集成基本图元集成光栅化光栅化逐片操作逐片操作纹理内纹理内存存CPU像素操作像素操作帧缓存帧缓存geometry pipeline8/15/2022山东大学 HCI& VR Lab.12OpenGL 函数类型基本图形元素(Primitives)定义图形系统可以显示的低级对象或原子实体,典型的如:点 Points线段 Line Segments多边形Polygons像素 Pixel字符 Character属性函数(Attributes)线段颜色的设置多边形内部团填充图形标题文字的字体选择变换( Transformations)视图 Viewing :定义了各
7、种不同的视域建模 Modeling:虚拟照相机模型等控制 (GLUT):多窗口环境下的多进程之间的通信输入 (GLUT):处理键盘、鼠标等设备的输入响应查询Query:获得诸如照相机参数、帧缓存里的数据等内在信息8/15/2022山东大学 HCI& VR Lab.13OpenGL 状态 OpenGL 是一个状态机( state machine) OpenGL 函数有两种基本类型基本图元的生成(Primitive generating)如果图元可见,可以得到输出顶点如何处理,基本形状的外观由状态控制改变状态 (State changing)变换函数属性函数8/15/2022山东大学 HCI& V
8、R Lab.14面向对象方面的缺憾 OpenGL 不是面向对象的,因此逻辑上的一个函数却对应着多个OpenGL函数glVertex3f glVertex2i glVertex3dv 内在存储模式是相同的 在C+ 可以很容易地创建重载函数,但是效率却成为主要问题8/15/2022山东大学 HCI& VR Lab.15OpenGL 接口 核心库GL:OpenGL 中所有函数的名字都以gl开头Windows :OpenGL32大多数 unix/linux 系统: GL库 实用库 GLU只引用 OpenGL核心库GL中的函数,但还包括了球体等这些常用对象的建模代码以及其他的一些功能,从而避免重复编写代
9、码 实用工具性GLUT提供了任何窗口操作系统所需要的最小功能集 GLX:把: OpenGL与 X Window操作系统“粘合”起来8/15/2022山东大学 HCI& VR Lab.16OpenGL 函数名称格式glVertex3f(x,y,z)属于 GL 库函数名x,y,z 为 float数据类型glVertex3fv(p)p 为指向float的指针维数(参数个数)注意每一部分的大小写8/15/2022山东大学 HCI& VR Lab.17OpenGL 中的#defines 大多数常数采用预定义方式#defines在头文件 gl.h, glu.h 和 glut.h定义定义注意 #includ
10、e 会自动包含另外两个头文件例如:glBegin(GL_POLYGON)glClear(GL_COLOR_BUFFER_BIT) 包含文件也定义 OpenGL 的数据类型: GLfloat, GLdouble,.常数8/15/2022山东大学 HCI& VR Lab.18一个简单的程序在黑色背景上画一个矩形8/15/2022山东大学 HCI& VR Lab.19simple.c#include /包含包含GL头文件头文件void mydisplay() glClear(GL_COLOR_BUFFER_BIT);/ 清除屏幕及深度缓存清除屏幕及深度缓存 设置 glBegin(GL_POLYGON
11、);/设置画多边形设置画多边形 glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd();glFlush(); /强制系统立刻在屏幕上显示输出图形强制系统立刻在屏幕上显示输出图形int main(int argc, char* argv)/ 主函数主函数glutInit(&argc,argv); /初始化初始化OPENGLglutCreateWindow(“simple”); /窗口的标题窗口的标题 glutDisplayFunc(mydisplay);
12、 /调用显示函数调用显示函数 glutMainLoop(); /主函数循环主函数循环8/15/2022山东大学 HCI& VR Lab.20事件循环 在程序中定义了一个显示回调函数 (display callback function): mydisplay每个 glut 程序必须有一个显示回调函数只要OpenGL确定显示内容要被刷新时,显示回调函数就会被调用:例如,当窗口被打开的时候 main ()函数以程序进入事件循环作为结束8/15/2022山东大学 HCI& VR Lab.21默认值 simple.c 是个很简单的程序 大量使用了状态变量的默认值视图模式 Viewing色彩设置 Col
13、ors窗口参数 Window parameters 后续的程序将改变一下默认值8/15/2022山东大学 HCI& VR Lab.22如何在VC+6.0环境下使用进行OPENGL环境设置 下载 有关的GLUT软件库:如glutdlls37beta 压缩包 (1)将下载的压缩包解开,将得到5个文件: glut.h, glut.lib, glut32.lib, glut.dll和glut32.dll,并按如下要求进行设置(1)“找到 盘符(d:)Program FilesMicrosoft Visual StudioVC98includeGL文件夹”。把解压得到的glut.h放到这个GL文件夹里。
14、没有GL文件夹可以自己建一个,一般都有的。 (2)把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹,即lib文件夹。 如“盘符(d:)Program FilesMicrosoft Visual StudioVC98lib文件夹”)。(3)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:WindowsSystem32)这是非常重要的动态链接库设置! 8/15/2022山东大学 HCI& VR Lab.23如何在VC+6.0环境编辑和运行OpenGL程序 WINDOWS环境设置 创建一个Win32 co
15、nsole application 类型的workspace 文件创建一个C/C+文件,包含simple.c的代码,并把这个文件插入到创建好的workspace 文件中直接进行编译 CTRL+F7,进行函数库的链接 F7执行 编译好的可执行文件F5(080311讲完) 8/15/2022山东大学 HCI& VR Lab.24图元与属性 OpenGL基本库:很小的基本图元集 在GLU中包含从基本库里推导而来的其他类型的基本对象 OpenGL支持两类基本图元几何型图元在问题(用户)域里定义,具有空间和几何属性:点、线段、多边形、曲线、曲面等经过几何处理流水线,经过光栅化后变成帧缓存里的像素几何处理
16、处理:决定图元是否可见、计算在屏幕上的显示位置等在问题域进行几何对象的建模和几何变换旋转、平移等光栅型图元把对象看作是像素的集合,缺少几何属性,不能在问题空间中对其进行处理,经过另一条平行流水线到达帧缓存8/15/2022山东大学 HCI& VR Lab.25图元和属性的定义与设置 OpenGL中的基本图元都是用空间中的点或顶点定义的,采用 glBigin()glEnd()之间来定义glBing(type);/type参数决定定义的几何对象类型glVertex*();glVertex*();glEnd();8/15/2022山东大学 HCI& VR Lab.26OpenGL基本图元-点、线段(
17、P33) 点(GL_POINT):每个顶点至少是一个像素大小 线段(GL_LINE):线段类型把两个相邻的顶点当作线段的两个端点 多段线(GL_LINE_STRIP, GL_LINE_LOOP):封闭和不封闭8/15/2022山东大学 HCI& VR Lab.27OpenGL 基本图形元素8/15/2022山东大学 HCI& VR Lab.28OpenGL基本图元-多边形 多边形:带边界的、封闭的、具有内部区域的对象 (GL_POLYGON)多边形的边界与采用GL_LINE_LOOP的类型一样,相邻两个顶点定义边界线,其中那个一条线段连接最后一个顶点和第一个顶点 三角形和四边形是多边形的特例(
18、P35,图2.13)(GL_TRIANGLES )(GL_QUADS) 带状和扇形:由一组三角形或四边形组成,共享部分顶点和边界线(P35,图2.14)(GL_TRIANGLE_STRIP )(GL_QUAD_STRIP )(GL_TRIANGLE_FAN )8/15/2022山东大学 HCI& VR Lab.29多边形的限制条件 OpenGL 只能显示满足下述条件的多边形简单多边形: 边除顶点外不相交凸多边形: 对于多边形中的任意两点,连接这两点的线段完全在多边形中平面多边形: 所有顶点都在同一个平面内 用户自己确保上述条件的满足OpenGL 将报错,如果上述条件不满足 三角形满足上述所有限
19、制条件nonsimple polygonnonconvex polygon8/15/2022山东大学 HCI& VR Lab.30曲线和曲面 用图元来逼近曲线或曲面可以用一个正N多边形来逼近一个圆弧可以用正多面体来逼近球体 用数学的方法来定义曲线和曲面,推导出这些对象的图形函数,再利用这些函数来创建对象四次曲面参数多项式曲线和曲面8/15/2022山东大学 HCI& VR Lab.31属性 属性是 OpenGL状态的一部分确定对象的外观颜色 (点,线,多边形)大小和宽度 (points, lines)宽度和虚实形式 (lines, polygons)多边形填充显示: 颜色和模式显示边界显示顶点
20、8/15/2022山东大学 HCI& VR Lab.32RGB 色彩 每个颜色组件分别存储在帧缓存中 一般在帧缓存中每个组件为8位 注意在 glColor3f中,颜色值的范围从0.0到1.0 ,而在 glColor3ub中,值的范围在中,值的范围在 0 2558/15/2022山东大学 HCI& VR Lab.33索引颜色(颜色查找表) 颜色值指向颜色查找表 需要更少的存储量一般为8位现在不是很重要了存储器很便宜了需要更多的颜色做渲染8/15/2022山东大学 HCI& VR Lab.34颜色和状态 颜色通过 glColor 来设置,成为状态机的一部分,直到被改变为止,一直保持这种状态 颜色与
21、其他属性不是对象的一部分,但是在渲染时要把这些属性赋给对象 可以按下述方法创建顶点的颜色 glColor glVertex glColor glVertex8/15/2022山东大学 HCI& VR Lab.35颜色的光滑过渡 默认状态是光滑过渡OpenGL 根据多边形顶点的颜色插值出来内部的颜色 函数:函数:glShadeModel(GL_SMOOTH)8/15/2022山东大学 HCI& VR Lab.36颜色的平坦过渡 另外一种状态是平坦过渡第一个顶点的颜色确定填充颜色 函数:函数: glShadeModel(GL_FLAT)8/15/2022山东大学 HCI& VR Lab.37Ope
22、nGL编程第二节 完整的程序 (080318)8/15/2022山东大学 HCI& VR Lab.38主要内容 修改第一个程序改变默认值定义标准程序结构 简单视图二维视图:作为三维视图的特例 基本的OpenGL 图形元素 属性8/15/2022山东大学 HCI& VR Lab.39程序结构 大多数 OpenGL 程序有类似的结构,包含以下函数:main(): 主函数定义回调函数 打开一个或多个具有指定属性的窗口进入事件循环 (最后一条可执行语句)init(): 设置状态变量视图:Viewing属性:AttributesCallbacks 回调函数显示函数输入和窗口函数8/15/2022山东大学
23、 HCI& VR Lab.40对simple.c 的修改 在这一版本的程序中,会得到同样的输出,但是所有具有默认值的相应状态值都通过函数调用显式指定 特别地,设置了颜色 Colors视图条件 Viewing conditions窗口属性 Window properties8/15/2022山东大学 HCI& VR Lab.41main.c#include int main(int argc, char* argv)glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500
24、); glutInitWindowPosition(0,0); glutCreateWindow(simple); glutDisplayFunc(mydisplay); init(); glutMainLoop();includes gl.hdefine window propertiesset OpenGL stateenter event loopdisplay callback自动包含了gl.h定义窗口属性显示回调函数设置OpenGL状态进入事件循环(500,500)像素大小8/15/2022山东大学 HCI& VR Lab.42GLUT 函数 glutInit 使得应用程序可以获得命
25、令行参数并初始化系统 gluInitDisplayMode 设置窗口的属性 (渲染上下文the rendering context)RGB 颜色单缓冲区 Single buffering属性按逻辑“或”组合在一起glutWindowSize 以像素为单位定义窗口的尺寸 glutWindowPosition 定义窗口左上角在显示器的位置 glutCreateWindow 创建窗口,标题为 “simple”,来自参数 glutDisplayFunc 定义显示回调函数 glutMainLoop 进入无穷的事件循环8/15/2022山东大学 HCI& VR Lab.43Init()void init(
26、)glClearColor (0.0, 0.0, 0.0, 1.0);glColor3f(1.0, 1.0, 1.0); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); 清除色(背景色)为黑色不透明窗口矩形填充色彩值设置白色矩阵模式设置为投影模式视景体设置(物体各个顶点的坐标值经过坐标变换后必须介于调用glOrtho()函数中提供参数的范围内)将当前的矩阵清零,不可再恢复 8/15/2022山东大学 HCI& VR Lab.44坐标系 在 glVertex 中的
27、单位是由应用程序确定的,称为世界坐标系(也叫对象或问题坐标系object or problem coordinates) 视景体(viewing volume )也是相对于世界坐标系指定的,视景体确定出现在图像空间中的对象 在 OpenGL内部,会把世界坐标系转化为照相机坐标系(camera (eye) coordinates) ,稍后再转化为屏幕坐标系 ( screen coordinates ) OpenGL 也常用某些内部表示法,这些内部表示法对应用程序并不可见8/15/2022山东大学 HCI& VR Lab.45OpenGL 照相机 OpenGL 照相机被放置在坐标原点,指向Z轴负方
28、向 默认的视景体是一个中心在原点,边长为2的立方体8/15/2022山东大学 HCI& VR Lab.46正交视图(Orthographic Viewing)z=0z=0在默认的正交视图中,点沿着Z轴投影到Z=0的平面上plane z=08/15/2022山东大学 HCI& VR Lab.47变换与视图 在 OpenGL中,投影是利用投影矩阵乘法进行的 由于只存在一个变换函数系列,因此必须先设置矩阵模式 glMatrixMode (GL_PROJECTION) 变换函数是累加在一起的所以需要从单位矩阵开始,然后把它改变为一个投影矩阵以定义视景体 glLoadIdentity(); 8/15/2
29、022山东大学 HCI& VR Lab.48二维与三维视图 在 glOrtho(left, right, bottom, top, near, far) 中,近与远是相对于与照相机的距离而言的glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); 二维顶点命令把所有的顶点放在z=0的盘面上 如果应用程序处于二维状态,那么可以使用下述函数设置正交视景体: gluOrtho2D(left, right,bottom,top) 对二维情形,视景体或裁剪体退化为裁剪窗口( clipping window)8/15/2022山东大学 HCI& VR Lab.49mydispl
30、ay.cvoid mydisplay()glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd();glFlush(); 8/15/2022山东大学 HCI& VR Lab.50视窗 并不需要把整个当前窗口用来显示图像:可以在窗口中设置视窗,函数为: glViewport(x,y,w,h)/x,y,w,h的的含义见下图含义见下图 参数值以像素为单位 (屏幕
31、坐标系)8/15/2022山东大学 HCI& VR Lab.51OpenGL 编程Part 3: 三维图形8/15/2022山东大学 HCI& VR Lab.52主要内容 提供一个更复杂的三维图形实例分形:Sierpinski 鏤垫l 隐藏面消除8/15/2022山东大学 HCI& VR Lab.53三维图形应用程序 在OpenGL中,二维应用程序是三维应用程序的特殊情形 要得到三维图形应用程序只对前面程序做很小的修改使用 glVertex3*( )必须考虑多边形绘制的顺序或者启用隐藏面消除功能只考虑平面的简单图多边形8/15/2022山东大学 HCI& VR Lab.54Sierpinski
32、 Gasket (2D) 从一个三角形开始 连接三边的中点并去掉中间的三角形 Repeat8/15/2022山东大学 HCI& VR Lab.55示例 五次细分后的结果8/15/2022山东大学 HCI& VR Lab.56作为分形的鏤垫 考虑黑色填充区域的面积与周长(即包含填充区域的所有线段总长) 当持续细分时面积趋向于零但周长趋向于无穷 因此无穷细分后的结果不是通常的几何形状它的维数既不是一维的,也不是二维的 称之为分形(fractional dimension) 对象8/15/2022山东大学 HCI& VR Lab.57Gasket Program#include / initial
33、triangle typedef GLfloat point22; /initial triangle point2 v=-1.0, -0.58, 1.0, -0.58, 0.0, 1.15;int n; / 递归步数递归步数8/15/2022山东大学 HCI& VR Lab.58绘制三角形 void triangle( point2 a, point2 b, point2 c) / display one triangle glBegin(GL_TRIANGLES); glVertex2fv(a); glVertex2fv(b); glVertex2fv(c); glEnd(); 8/15/
34、2022山东大学 HCI& VR Lab.59三角形细分void divide_triangle(point2 a, point2 b, point2 c, int m)/* triangle subdivision using vertex numbers */ point2 v0, v1, v2; int j; if(m0) for(j=0; j2; j+) v0j=(aj+bj)/2; for(j=0; j2; j+) v1j=(aj+cj)/2; for(j=0; j0) for(j=0; j3; j+) v1j=(aj+bj)/2;for(j=0; j3; j+) v2j=(aj+c
35、j)/2;for(j=0; j3; j+) v3j=(bj+cj)/2;divide_triangle(a, v1, v2, m-1);divide_triangle(c, v2, v3, m-1);divide_triangle(b, v3, v1, m-1);else(triangle(a,b,c); 8/15/2022山东大学 HCI& VR Lab.67生成四面体的代码 void tetrahedron( int m) glColor3f(1.0, 0.0, 0.0);divide_triangle(v0, v1, v2, m);glColor3f(0.0, 1.0, 0.0);div
36、ide_triangle(v3, v2, v1, m);glColor3f(0.0, 0.0, 1.0);divide_triangle(v0, v3, v1, m);glColor3f(0.0, 0.0, 0.0);divide_triangle(v0, v2, v3, m); 8/15/2022山东大学 HCI& VR Lab.68问题 由于三角形是按照在程序中定义的顺序画出的,本来在前面的三角形并不是显示在位于它后面的三角形的前面get thiswant this8/15/2022山东大学 HCI& VR Lab.69隐藏面的消除 只想见到那些位于其它面前面的曲面或平面片 OpenGL采
37、用称为z缓冲区的算法进行隐藏面消除,在z缓冲区中存贮着对象的深度信息,从而只有前面的对象出现在图像中8/15/2022山东大学 HCI& VR Lab.70Z缓冲区算法 在该算法中创建专门的缓冲区(称为z缓冲区),当几何体经过流水线各步骤时,存贮着该几何体的深度信息 启用该算法的要素在 main()中()中 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH)在init()中启用glEnable(GL_DEPTH_TEST)在显示回调函数中glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)8/15/2022山东大学 HCI& VR Lab.71二维细分 vs 三维细分 在我们的例子中,对每个二维面进行细分 我们也可以使用相同的中点来细分三维的图形 中点定义了四个小一些的四面体,每一个四面体对应一个顶点 在中点移除一个体,仅保持这些四面体8/15/2022山东大学 HCI& VR Lab.72体的细分形式73 结束语结束语