《2022年郑州大学三维GIS考试重点总结.docx》由会员分享,可在线阅读,更多相关《2022年郑州大学三维GIS考试重点总结.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 读书之法 ,在循序而渐进 ,熟读而精思简答题1、 OpenGL 左右手坐标系、向量、三维几何变换左右手坐标系渲染出来的2D 图像结果是不一样的,左右颠倒;从定义可知,左右手的区分也就是 z 轴一正一负,当然z 取反就转换了;要在透视前的最终一步上加上反转的语句就是 viewMatrix.appendScale1,1,-1这样全部的顶点就都会反转了;标准向量变换是从对象坐标系变换到视觉坐标系,它是用来运算光照的; 标准向量的变换中,视觉矩阵 view matrix 是 GL_MODELVIEW 逆矩阵的转置矩阵和标准向量(Normal vecto
2、r是)相乘所得;几何变换是将一个几何图形依据肯定的规章或规律变换为另一个新的几何图形,包括二维几何变换和三维几何变换,最基本的三种变换是平移、旋转和缩放;2、 OpenGL5 大变换1) 视点变换: 相当于设置视点的位置和方向,OpenGL 有用库供应了函数gluLookAt 来指定视点变换;2) 模型变换:在世界坐标系中进行的,包括模型平移:glTranslatefdTYPE x, TYPE y, TYPE z ,模型旋转: glRotatefd TYPE angle, TYPE x, TYPE y, TYPE z,模型缩放:glScalefd TYPE x, TYPE y, TYPE z
3、3) 投影变换:目的是定义一个视景体,使视景体外余外的部分裁剪掉,最终进入图像的只是视景体内的有关部分,包括透视投影和正射投影;透视投影函数:void glFrustum 和 void gluPerspective ,正射投影函数:void glOrtho 和 void gluOrtho2D ;4) 视口变换:将视景体内投影的物体显示在二维的视口平面上;相关函数:glViewport 5) 裁剪变换:视景体定义了上下左右前后六个裁剪平面,用户仍可以自己定义附加裁剪平面,以去掉场景中无关的目标;相关函数:void glClipPlane 3、 怎么绘制一个图形、一个三角面片、一个四周体,给坐标写
4、代码三角形glBeginGL_TRIANGLES; glVertex2f0,0.7; glVertex2f-0.7,-0.7; glVertex2f0.7,-0.7; glEnd; 四周体GLfloat pyramid3=0.0,1.0,0.0,0.5,0.0,0.5,-0.5,0.0,0.5,-0.5,0.0,-0.5,0.0,0.0,-0.5; /定义顶点坐标glBeginGL_TRIANGLE_FAN; / 使用扇形三角形模式glNormal3f0.0,0.447214f,0.894427f; / 前平面法向量glVertex3fvpyramid0; / 前平面glVertex3fvpy
5、ramid1; glVertex3fvpyramid2; glNormal3f-0.894427f,0.447214f,0.0; / 左平面法向量glVertex3fvpyramid3; / 左平面glNormal3f0.0,0.447214f,-0.894427f; / 后平面法向量glVertex3fvpyramid4; / 后平面glNormal3f0.894427f,0.447214f,0.0; / 右平面法向量glVertex3fvpyramid1; / 右平面glEnd; / 终止绘制名师归纳总结 - - - - - - -第 1 页,共 4 页精选学习资料 - - - - - -
6、 - - - 读书之法 ,在循序而渐进 ,熟读而精思立方体 / 将立方体的八个顶点储存到一个数组里面static const float vertex_list3 = -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, ; / 将要使用的顶点的序号储存到一个数组里面static const GLint index_list2 = 0, 1
7、,2, 3,4, 5,6, 7,0, 2,1, 3, 4, 6,5, 7,0, 4,1, 5,7, 3,2, 6 ; / 绘制立方体void DrawCubevoid int i,j; glBeginGL_LINES; fori=0; i12; +i / 12 条线段 forj=0; j0点在平面前方,ax+by+cz+d0 点在平面后方;为了判定一个点是否包含在平截头体内部,需要将点的坐标代入 6 个平面的平面方程式中,假如全部平面方程式的结果值都是正数的话,就表示这个点在平截头体内部;要想检验几个点构成的网络是否位于平截头体内部的话,要采纳边界球体提出技巧,第肯定义能包含整个网格的边界球体
8、,然后判定该球体是否包含在平截头体内部;四叉树与平截头体结合:假如四叉树的父节点不在平截头体内部的话,那么子节点也不在平截头体内部, 这时, 只要检索父节点在平截头体内部的节点就行了,以快速地实现平截头体的剔除;反复进行这个过程就可基于四叉树的LOD 表示:LOD 是分阶段调整网格建模数据的精密度技术,与摄像机的距离近,使用精密的网格,距离远,使用简洁的网格;LOD 分割形成的阶段与四叉树的子节点名师归纳总结 分割非常相像, 当摄像机和各个节点的中点距离不同时,与摄像机距离远的节点不进行子节第 3 页,共 4 页点的渲染, 只在各自阶段进行渲染,相对而讲, 与摄像机越近、 越是对下层子节点进行
9、渲染;- - - - - - -精选学习资料 - - - - - - - - - 读书之法 ,在循序而渐进 ,熟读而精思这样通过渲染位于不同层的节点来实现对特定区域不同辨论率的表示;2、 OSG 场景场景治理: osg 采纳包围体层次来实现场景图形的治理,用一个场景树治理整个场景的相关信息,通过场景树可以便利的治理场景物体,并且在向底层接口提交绘制操作前进行一些软裁剪和绘制次序调整工作;分层的树状数据结构来组织空间数据集,提升了渲染的效率;场景组成模块:1、osg 核心库: osg 库:基本数据类,负责供应基本场景图类、节点类、状态类、绘制类、数据类;osgUtil 库:工具类库,供应通用的公
10、用类;osgDB 库:数据的读写库,供应一个文件工具类;osgViewer 库:视窗治理库 2、OSG 工具库:osgFX 库;osgParticle库; osgSim 库; osgTerrain 库; osgText 库; osgShadow 库 3、OSG 插件库 4、OSG 内省库BVH 树: 包围体层次树,采纳自顶向下的结构,顶部是一个根节点,从根节点向下延长,各个组节点中均包含了几何信息和用于掌握其外观的渲染状态信息;根节点和各个组节点都可以有零个或多个子成员;在场景图形的最底部,各个叶节点包含了够长场景中物体的实际几何信息;节点: OSG 的场景结构树是一棵有向无环图Directe
11、d Acyclic Graph ,可以多个父节点共享一个子节点;节点主要分三类:根节点,枝节节点,叶子节点;Node:Node 类是场景图形中全部节点的基类;它包含了用于场景图形遍历、拣选、程 序回调,以及状态治理的方法;Group: Group 类是全部可分支节点的基类;它是场景图形空间组织结构的关键类;主要用于将多个子节点成组治理,答应用户程序为其添加任意数量的子节点,子节点本身也可以连续分法子节点,osg 编程的核心部分,它使得用户应用程序可以有效组织场景图形中的数据,它的强大之处在于治理子节点的接口,仍从 Node 出继承了治理父节点的接口;Geode:Geode 类(即 Geomet
12、ry Node)相当于OSG 中的叶节点;它没有子节点,但是包含了 osg:Drawable 对象,而 osg:Drawable 对象中存放了将要被渲染的几何体;LOD :LOD 类依据观看点与图像子节点的距离挑选显示子节点;通常使用它来创建场 景中物体的多个显示层级;MatrixTransform :MatrixTransform 类包含了用于实施子节点几何体空间转换的矩阵,以实现场景对象的旋转、平移、缩放、倾斜、映射等操作;Switch :Switch 类用布尔掩板来答应或禁止子节点的运作;OSG 中与场景图形有关的大多数类均派生自 用智能指针治理节点间的父子关系:由于 Reference
13、d 类,因此 OSG 大量使用了智能指针来实现场景图形节点的治理;智能指针的使 用为用户提 供了一种自动内存释放的机制,即,场景图形中的每一个节点均关联一个内存 计数器,当计数器的计数减到零时,该对象将被自动释放;而用户假如期望释放整个场 景 图形的节点的话,就只需要删除根节点,根节点以下的全部分支节点均会因此被自动删除,不用担忧内存泄露的问题;OSG 节点的拜访: OSG 中节点的拜访使用的是一种拜访器模式;一个典型的拜访器涉及抽 象拜访者角色 Visitor, 详细拜访者 Concrete Visitor, 节点角色 Node;OSG 中拜访者角色 为 NodeVisitor 类,Node
14、Visitor 只是拜访器角色的抽象接口,要使用拜访器拜访节点并执行自定义操作时,需要继承并重写apply 函数实现自定义功能;osg:Node 类中的拜访接口为 void acceptNodeVisitor& nv ;对节点的拜访从节点接受一个拜访器开头,将一个详细的拜访器对象传递给节点,节点反过来执行拜访器的apply. 函数,并将自己传入拜访器;名师归纳总结 遍历节点树 :osg:Node 类中有两个帮助函数:void ascendNodeVisitor& nv/虚函数,向上第 4 页,共 4 页一级节点推动拜访器void traverseNodeVisitor& nv /虚函数,向下一级节点推动拜访器- - - - - - -