收藏 分销(赏)

教育学消隐.pptx

上传人:精**** 文档编号:4256183 上传时间:2024-08-30 格式:PPTX 页数:60 大小:909.57KB
下载 相关 举报
教育学消隐.pptx_第1页
第1页 / 共60页
教育学消隐.pptx_第2页
第2页 / 共60页
点击查看更多>>
资源描述
计通学院计通学院 计算机科学系计算机科学系计算机图形学计算机图形学1 第第10章章 隐藏面的消除隐藏面的消除 (Hidden-Surface Removal)2第第10章章 隐藏面的消除隐藏面的消除l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数3本章目标本章目标l消消隐的基本概念的基本概念l重点掌握重点掌握Z缓冲器(冲器(Buffer)消)消隐算法算法l学会使用学会使用OpenGL的函数的函数4l问题n投影投影变换失去了深度信息,往往失去了深度信息,往往导致致图形的二形的二义性及失去性及失去遮遮挡关系关系n要消除二要消除二义性和保持遮性和保持遮挡关系,就必关系,就必须在在绘制(投影)制(投影)时消除被遮消除被遮挡的不可的不可见的的线或面,或面,习惯上称作消除上称作消除隐藏藏线和和隐藏面,藏面,简称称为消消隐失去遮挡关系失去遮挡关系长方体线框投影图的二义性长方体线框投影图的二义性10.1 基本概念基本概念5l消消隐的的对象象n三三维物体物体n三三维体的表示主要采用体的表示主要采用边界(多界(多边形)表示形)表示l消消隐结果果n与与观察物体有关,也与察物体有关,也与视点位置和方向有关点位置和方向有关线框图线框图 消隐图消隐图 真实感图形真实感图形10.1 基本概念基本概念6l消消隐分分类n消除消除隐藏面:确定可藏面:确定可见面(消除不可面(消除不可见面)面)表面表示表面表示物体(本章物体(本章讨论)n消除消除隐藏藏线:消除不可:消除不可见线线框表示物体框表示物体长方体线框投影图的二义性长方体线框投影图的二义性失去遮挡关系失去遮挡关系10.1 基本概念基本概念7l面消面消隐算法分算法分类n投影窗口内的像素投影窗口内的像素为处理理单元。元。确定最近点确定最近点 for(窗口内的每一个像素窗口内的每一个像素)确定距确定距视点最近的物体,以点最近的物体,以该物体表面的物体表面的颜色来色来显示像素示像素 图像空间图像空间image-space10.1 基本概念基本概念8l面消面消隐算法分算法分类(续)n场景中的物体景中的物体为处理理单元。元。物体上的面是否最近物体上的面是否最近for(for(场景中的每一个物体场景中的每一个物体)将其与场景中的其它物体比较,确定其表面的可见部分;将其与场景中的其它物体比较,确定其表面的可见部分;显示该物体表面的可见部分;显示该物体表面的可见部分;场景空间场景空间object-space10.1 基本概念基本概念9第第10章章 隐藏面的消除隐藏面的消除l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数1010.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法l主要技主要技术1.利用利用连贯性性n相相邻物体的属性之物体的属性之间有一定的有一定的连贯性,其属性性,其属性值通常是平通常是平缓过渡的,如渡的,如颜色色值、空、空间位置关系等位置关系等n包括包括:u物体物体连贯性性u面的面的连贯性性u区域区域连贯性性u扫描描线连贯性性u深度深度连贯性性1110.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法(1)物体)物体连贯性:如果物体性:如果物体 A 与物体与物体 B 是完全相互是完全相互分离的,分离的,则在消在消隐时,只需比,只需比较A、B 两物体之两物体之间的的遮遮挡关系,无关系,无须对它它们的表面多的表面多边形逐一形逐一进行行测试。例如,若例如,若 A 距距视点点较 B 远,则在在测试 B 上的表面的上的表面的可可见性性时,无,无须考考虑 A 的表面的表面(2)面的)面的连贯性:一性:一张面内的各种属性面内的各种属性值一般都是一般都是缓慢慢变化的,允化的,允许采用增量形式采用增量形式对其其进行行计算算1210.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法(3)区域)区域连贯性:区域指屏幕上一性:区域指屏幕上一组相相邻的像素,它的像素,它们通通常常为同一个可同一个可见面所占据,可面所占据,可见性相同。区域性相同。区域连贯性表性表现在一条在一条扫描描线上上时,即,即为扫描描线上的每个区上的每个区间内只有一个内只有一个面可面可见(4)扫描描线的的连贯性:相性:相邻两条两条扫描描线上,可上,可见面的面的分布情况相似分布情况相似(5)深度)深度连贯性:同一表面上的相性:同一表面上的相邻部分深度是相近部分深度是相近的,而占据屏幕上同一区域的不同表面的深度不同。的,而占据屏幕上同一区域的不同表面的深度不同。这样在判断表面在判断表面间的遮的遮挡关系关系时,只需取其上一点,只需取其上一点计算出深度算出深度值,比,比较该深度深度值便能得出便能得出结果果1310.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法2.透透视投影投影转换为平行投影平行投影u消消隐在投影前完成在投影前完成u物体物体间的遮的遮挡关系与投影中心相关关系与投影中心相关u物体物体间的遮的遮挡关系与投影方式相关关系与投影方式相关1410.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法3.包包围盒技盒技术定定义:一个形体的包:一个形体的包围盒指的是包盒指的是包围它的它的简单形体形体两个条件两个条件u包包围盒充分盒充分紧密包密包围着形体着形体u对其的其的测试比比较简单主要包主要包围盒盒u长方体方体u正方体正方体u球球1510.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法作用作用避免盲目求交避免盲目求交n例如:两个空例如:两个空间多多边形形A、B在投影平面上的投影分在投影平面上的投影分别为A,B,因,因为A、B 的矩形包的矩形包围盒不相交,盒不相交,则A、B 不相交,无不相交,无须进行遮行遮挡测试。如果包如果包围盒相交,需盒相交,需进一步一步测试。右下。右下图(a)包包围盒相交,投影也相交;盒相交,投影也相交;(b)包包围盒相交,投影不相交盒相交,投影不相交n一般情况下,判断两物体是否遮一般情况下,判断两物体是否遮挡时,前一种情况大量存在,避免了,前一种情况大量存在,避免了物体物体间的复的复杂相交相交测试。1610.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法4.背面剔除背面剔除n外法向:外法向:规定每个多定每个多边形的外法向都是指向物体外部的形的外法向都是指向物体外部的n前向面:若多前向面:若多边形的外法向与投影方向(形的外法向与投影方向(观察方向)的察方向)的夹角角为钝角,称角,称为前向面前向面n后向面:若多后向面:若多边形的外法向与投影方向(形的外法向与投影方向(观察方向)的察方向)的夹角角为锐角,称角,称为后向面(背面)后向面(背面)夹角为夹角为180u投影方向投影方向1710.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法n剔除依据:背面剔除依据:背面总是被前向面所遮是被前向面所遮挡,从而不可,从而不可见前向面前向面 后向面后向面JEAF、HCBG、JIHGF为为后向面后向面CGV VABDEFHIJN NVnVn1810.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法5.空空间分割技分割技术n遮遮挡判断依据:判断依据:场景中的物体,它景中的物体,它们的投影在投影平的投影在投影平面上是否有重叠部分?(是否存在相互遮面上是否有重叠部分?(是否存在相互遮挡的可能?)的可能?)对于根本不存在相互遮于根本不存在相互遮挡关系的物体,关系的物体,应避免避免这种不种不必要的必要的测试n原因:物体在原因:物体在场景中分散,有些物体的投影相距甚景中分散,有些物体的投影相距甚远,不会存在遮不会存在遮挡关系关系n方法:将投影平面上的窗口分成若干小区域;方法:将投影平面上的窗口分成若干小区域;为每个每个小区域建立相关物体表,表中物体的投影于小区域建立相关物体表,表中物体的投影于该区域有区域有相交部分;相交部分;则在小区域中判断那个物体可在小区域中判断那个物体可见时,只要,只要对该区域的相关物体表中的物体区域的相关物体表中的物体进行比行比较1910.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法6.物体的分物体的分层表示表示n表示形式:模型表示形式:模型变换中的中的树形表示方式形表示方式n原理:减少原理:减少场景中物体的个数,从而降低算法复景中物体的个数,从而降低算法复杂度度20方法:方法:将父将父节点所代表的物体看成子点所代表的物体看成子节点所代表物体的包点所代表物体的包围盒,当两个父盒,当两个父节点之点之间不存在遮不存在遮挡关系关系时,就没有必,就没有必要要对两者的子两者的子节点做点做进一步一步测试。父。父节点之点之间的遮的遮挡关关系可以用它系可以用它们之之间的包的包围盒盒进行行预测试10.2 提高消隐算法效率的常用方法提高消隐算法效率的常用方法21第第10章章 隐藏面的消除隐藏面的消除l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数22l背景背景n画家作画:先画远景后画近景画家作画:先画远景后画近景n画家的作画顺序暗示出所画物体之间的相互遮挡关系画家的作画顺序暗示出所画物体之间的相互遮挡关系10.3 画家算法画家算法23l算法基本思想:算法基本思想:1)先把屏幕置成背景色)先把屏幕置成背景色2)将)将场景中的物体按其距景中的物体按其距观察点的察点的远近近进行排序,行排序,结果放果放在一在一张线性表中;(性表中;(线性表构造:距性表构造:距观察点察点远的称的称优先先级低,放在表低,放在表头;距;距观察点近的称察点近的称优先先级高,放在表尾。高,放在表尾。该表称表称为深度深度优先先级表)表)3)然后按照从)然后按照从远到近(从表到近(从表头到表尾)的到表尾)的顺序逐个序逐个绘制物制物体。体。l关关键n如何如何对场景中的物体按深度(景中的物体按深度(远近)排序,建立深度近)排序,建立深度优先先级表?表?10.3 画家算法画家算法24l多多边形的排序算法形的排序算法*1)将)将场景中所有多景中所有多边形存入一个形存入一个线性表,性表,记为L;2)如果)如果L中中仅有一个多有一个多边形,算法形,算法结束;否束;否则根据每个多根据每个多边形的形的nmin 对它它们预排序。不妨假定多排序。不妨假定多边形形P落在落在L的表首,即的表首,即nmin(P)为最小。最小。再再记 Q 为 L P(表中其余多表中其余多边形)中任意一个;形)中任意一个;3)判)判别P,Q之之间的关系,有如下二种:的关系,有如下二种:(1)对所有的所有的Q,有,有nmax(P)nmin(Q),需,需进一步判一步判别:10.3 画家算法画家算法在规范投影坐标系里在规范投影坐标系里 uvn 中,投影方向是中,投影方向是 n 轴的负方向,轴的负方向,因而因而 n 坐标大者距观察者更近。坐标大者距观察者更近。nmin(P)和和 nmax(P)分别为分别为 P 各顶点各顶点 n 坐标的最小和最大值。坐标的最小和最大值。投影为正平行投影投影为正平行投影25(A)若)若P,Q的投影的投影 P,Q 的包的包围盒不相盒不相交交(图a),则P,Q 在表中的次序不重要,在表中的次序不重要,令令L=L P,返回返回2);否否则进行下一行下一步步(B)若)若 P 的所有的所有顶点位于点位于 Q 所在平面所在平面的不可的不可见的一的一侧(图b),则P,Q关系正关系正确,令确,令L=L P,返回返回 2);否否则进行下一步行下一步10.3 画家算法画家算法26(C)若)若Q的所有的所有顶点位于点位于 P 所在平面的所在平面的可可见的一的一侧(图c),则P,Q关系正确,令关系正确,令L=L P,返回返回2);否否则进行下一步行下一步(D)对P,Q投影投影P,Q求交,若求交,若P,Q不不相交相交(图d),则P,Q在表中的次序不重要,在表中的次序不重要,令令L=L P,返回返回 2);否否则在它在它们所所相交的区域中任取一点,相交的区域中任取一点,计算算 P,Q在在该点的深度点的深度值,如果,如果 P 的深度小,的深度小,则P,Q关系正确,令关系正确,令L=L P,返回返回 2);否否则交交换P,Q,返回返回3)10.3 画家算法画家算法27l问题*n不能不能处理多理多边形循形循环遮遮挡和多和多边形相互穿透形相互穿透n解决方法:分割解决方法:分割10.3 画家算法28第第10章章 隐藏面的消除隐藏面的消除l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ-Buffer(缓冲器冲器)算法算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数29l又称又称 ZBuffer算法算法(深度深度缓冲冲 depth-buffer)l组成:成:n帧缓冲器冲器-保存各像素保存各像素颜色色值n Z 缓冲器冲器 -保存各像素保存各像素处物体深度物体深度值 10.4 Z 缓冲器算法缓冲器算法Z 缓冲器中的单元与帧缓冲器中的单元一一对应缓冲器中的单元与帧缓冲器中的单元一一对应30l算法算法(1)先将)先将 Z 缓冲器中个冲器中个单元的初始元的初始值置置为最小最小值。(2)多)多边形投影形投影时,当要改,当要改变某个像素的某个像素的颜色色值时,首先,首先检查当前多当前多边形的深度形的深度值是否大于是否大于该像像素原来的深度素原来的深度值(保存在(保存在该像素所像素所对应的的Z缓冲冲器的器的单元中),元中),A:如果大于,:如果大于,说明当前多明当前多边形更靠近形更靠近观察点,用察点,用它的它的颜色替色替换像素原来的像素原来的颜色;同色;同时保存深度保存深度值 B:否:否则说明在当前像素明在当前像素处,当前多,当前多边形被前面所形被前面所绘制的多制的多边形遮形遮挡了,是不可了,是不可见的,像素的的,像素的颜色色值不改不改变10.4 Z缓冲器算法缓冲器算法31l算法算法伪码 帧缓存全置存全置为背景色;背景色;深度深度缓存全置存全置为最小最小 Z 值;for(每一个多每一个多边形形)for(该多多边形所覆盖的每个像素形所覆盖的每个像素(x,y)计算算该多多边形在形在该像素的深度像素的深度值 Z(x,y);if(Z(x,y)大于大于Z缓存在存在(x,y)的的值)把把 Z(x,y)存入存入 Z 缓存中存中(x,y)处;把多把多边形在形在(x,y)处的的颜色色值存入存入帧缓存的存的(x,y)处;10.4 Z缓冲器算法缓冲器算法32l特点特点nZ 缓冲器算法是所有图像空间算法中最简单的一种隐藏缓冲器算法是所有图像空间算法中最简单的一种隐藏面消除算法。面消除算法。在像素级上以近物取代远物,与形体在屏在像素级上以近物取代远物,与形体在屏幕上的出现顺序无关。幕上的出现顺序无关。n优点优点 1 1)简单稳定,利于硬件实现)简单稳定,利于硬件实现 2 2)不需要整个场景的几何数据)不需要整个场景的几何数据n缺点缺点 1 1)需要一个额外的)需要一个额外的 Z 缓冲器缓冲器 2 2)每个多边形占据的每个像素处都要计算深度值,)每个多边形占据的每个像素处都要计算深度值,计算量大计算量大10.4 Z缓冲器算法缓冲器算法33l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数第第10章章 隐藏面的消除隐藏面的消除34l由来由来nZ 缓冲器算法中所需要的缓冲器算法中所需要的 Z 缓冲器容量较大,为克服这缓冲器容量较大,为克服这个缺点,可以将整个绘图区域分割成若干个小区域,然个缺点,可以将整个绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样后一个区域一个区域地显示,这样 Z 缓冲器的单元数只缓冲器的单元数只要等于一个区域内像素的个数要等于一个区域内像素的个数n如果将小区域取成屏幕上的扫描线,就得到扫描线如果将小区域取成屏幕上的扫描线,就得到扫描线 Z 缓缓冲器算法冲器算法10.5 扫描线扫描线Z缓冲器算法缓冲器算法35l算法思想算法思想n在处理当前扫描线时,用一个一维数组作为当前扫描线的在处理当前扫描线时,用一个一维数组作为当前扫描线的Z-buffer。首先找出与当前扫描线相关的多边形,以及每。首先找出与当前扫描线相关的多边形,以及每个多边形中相关的边对。个多边形中相关的边对。n对每一个边对之间的小区间上的各像素,计算深度,并与对每一个边对之间的小区间上的各像素,计算深度,并与Z-buffer中的值比较,找出各像素处可见平面。(中的值比较,找出各像素处可见平面。(采用增采用增量算法计算深度量算法计算深度)n写帧缓存。写帧缓存。10.5 扫描线扫描线Z缓冲器算法缓冲器算法36l算法(算法(p291)*for(v=0;vvmax;v+)for(u=0;u Z缓冲器的第缓冲器的第u单元的值单元的值)置帧缓冲器的第置帧缓冲器的第(u,v)单元值为当前多边形颜色;单元值为当前多边形颜色;置置Z缓冲器的第缓冲器的第u单元值为单元值为d;/处理下一条扫描线处理下一条扫描线10.5 扫描线扫描线Z缓冲器算法缓冲器算法37l缺点缺点n在每一个被多在每一个被多边形覆盖像素形覆盖像素处需要需要计算深度算深度值n被多个多被多个多边形覆盖的像素需要多次形覆盖的像素需要多次计算深度算深度值10.5 扫描线扫描线Z缓冲器算法缓冲器算法38第第10章章 隐藏面的消除隐藏面的消除l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数39l比比较n与与Z-Buffer算法相比,算法相比,扫描描线Z算法有了很大改算法有了很大改进,比如,比如所需的所需的Z-Buffer大大减小,大大减小,计算深度利用了面算深度利用了面连贯性等性等n缺点:每个像素缺点:每个像素处都都计算深度算深度值,甚至不止一次的,甚至不止一次的计算,算,运算量仍然很大运算量仍然很大n改改进:在一条:在一条扫描描线上,每个区上,每个区间只只计算一次深度,即算一次深度,即扫描描线算法,又称区算法,又称区间扫描描线算法算法10.6 扫描线算法扫描线算法40l基本思想基本思想n多多边形形P1、P2的的边界在投影平面上的投影将一条界在投影平面上的投影将一条扫描描线划分成若干个区划分成若干个区间0,u1 u1,u2 u2,u3 u3,u4,u4,umaxn覆盖每个区覆盖每个区间的有的有0个、个、1个或多个多个或多个多边形,但形,但仅有一个有一个可可见。在区。在区间上任取一个像素,上任取一个像素,计算算该像素像素处各多各多边形形(投影包含了(投影包含了该像素的多像素的多边形)的深度形)的深度值,深度,深度值最大最大者即者即为可可见多多边形,用它的形,用它的颜色色显示整个区示整个区间10.6 扫描线算法扫描线算法41l注意注意n该算法要求多算法要求多边形不能相互形不能相互贯穿,否穿,否则在同一区在同一区间上,上,多多边形深度形深度值的次序会的次序会发生生变化化n如如图:在区:在区间u1,u2上,多上,多边形形P1的深度的深度值大,在区大,在区间u3,u4上,多上,多边形形P2的深度的深度值大,而在区大,而在区间u2,u3上,两上,两个多个多边形的深度形的深度值次序次序发生交替生交替10.6 扫描线算法扫描线算法42l算法算法*for(绘图窗口内的每一条窗口内的每一条扫描描线)求投影与当前求投影与当前扫描描线相交的所有多相交的所有多边形;形;求上述多求上述多边形中投影与当前形中投影与当前扫描描线相交的所有相交的所有边,将它,将它们记录在活性在活性边表表AEL中;中;求求AEL中每条中每条边的投影与的投影与扫描描线的交点;的交点;按交点的按交点的u坐坐标将将AEL中各中各边从左到右排序,两两配从左到右排序,两两配对组成一个区成一个区间;for(AEL中每个区中每个区间)求覆盖求覆盖该区区间的所有多的所有多边形,将它形,将它们记入活化多入活化多边形表形表APL中;中;在区在区间上任取一点,上任取一点,计算算APL中各多中各多边形在形在该点的深度点的深度值,记深度最大者深度最大者为P;用多用多边形形P的的颜色填充色填充该区区间;10.6 扫描线算法扫描线算法43l数据数据结构(构(类似于似于扫描描线Z-Buffer算法中的数据算法中的数据结构)构)n多多边形分形分类表表PTn活性多活性多边形表形表APLn边的分的分类表表ETn活性活性边表表AEPLl改改进n在一条在一条扫描描线上,以区上,以区间为单位确定多位确定多边形的可形的可见性性n不再需要不再需要Z-Buffer10.6 扫描线算法扫描线算法44l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数第第10章章 隐藏面的消除隐藏面的消除45l基本思想基本思想n将通将通过绘图窗口内每一个像素的投影窗口内每一个像素的投影线与与场景中的所有多景中的所有多边形求交。如果有交点,用深度形求交。如果有交点,用深度值最大的交点(最近的)最大的交点(最近的)所属的多所属的多边形的形的颜色色显示相示相应的像素;如果没有交点,的像素;如果没有交点,说明没有多明没有多边形的投影覆盖此像素,用背景色形的投影覆盖此像素,用背景色显示示10.7 光线投射算法光线投射算法46l算法算法for(v=0;vvmax;v+)for(u=0;uumax;u+)形成通形成通过像素像素(u,v)的投影的投影线;for(场景中每一个多景中每一个多边形)形)将投影将投影线与多与多边形求交;形求交;if (有交点)有交点)以最近交点所属多以最近交点所属多边形的形的颜色色显示像素示像素(u,v)else 以背景色以背景色显示像素示像素(u,v);10.7 光线投射算法光线投射算法47第第10章章 隐藏面的消除隐藏面的消除l基本概念基本概念l提高消提高消隐算法效率的常用方法算法效率的常用方法l画家算法画家算法lZ缓冲器算法冲器算法l扫描描线Z缓冲器算法冲器算法l扫描描线算法算法l光光线投射算法投射算法lOpenGL相关函数相关函数48l多多边形剔除函数消除后向面(背面)形剔除函数消除后向面(背面)n激活:激活:glEnable(GL_CULL_FACE)n无效:无效:glDisable(GL_CULL_FACE)n剔除背面:剔除背面:glCullFace(GL_BACK)l显示模式示模式:线框方式框方式 glPolygonMode(GL_GRONT_AND_BACK,GL_LINE)10.8 OpenGL相关函数相关函数4910.8 OpenGL相关函数相关函数l例:剔除后向面例:剔除后向面#include#include GLfloat vertices 3=-1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,1.0;static GLfloat theta =0.0,0.0,0.0;static GLint axis=2;static GLdouble viewer=0.0,0.0,5.0;void polygon(int a,int b,int c,int d)glBegin(GL_POLYGON);glVertex3fv(verticesa);glVertex3fv(verticesb);glVertex3fv(verticesc);glVertex3fv(verticesd);glEnd();5010.8 OpenGL相关函数相关函数void colorcube()/正前面正前面 glColor3f(1,1,1);polygon(4,5,6,7);/正背面正背面 glColor3f(1.0,0,0);polygon(0,3,2,1);glColor3f(0,1,0);polygon(2,3,7,6);glColor3f(0,0,1);polygon(0,4,7,3);glColor3f(1,1,0);polygon(1,2,6,5);glColor3f(0,1,1);polygon(0,1,5,4);void display()glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();/更新视点位置更新视点位置 gluLookAt(viewer0,viewer1,viewer2,0.0,0.0,0.0,0.0,1.0,0.0);glRotatef(theta0,1.0,0.0,0.0);glRotatef(theta1,0.0,1.0,0.0);/*旋转立方体旋转立方体*/glRotatef(theta2,0.0,0.0,1.0);colorcube();glutSwapBuffers();5110.8 OpenGL相关函数相关函数void keys(unsigned char key,int x,int y)/*用用 x,X,y,Y,z,and Z 键键 移动视点移动视点*/if(key=x)viewer0-=1.0;if(key=X)viewer0+=1.0;if(key=y)viewer1-=1.0;if(key=Y)viewer1+=1.0;if(key=z)viewer2-=1.0;if(key=Z)viewer2+=1.0;display();void myReshape(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w 360.0)thetaaxis-=360.0;display();5310.8 OpenGL相关函数相关函数int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);glutInitWindowSize(300,300);glutCreateWindow(cube);glutDisplayFunc(display);glutReshapeFunc(myReshape);glutMouseFunc(mouse);glutKeyboardFunc(keys);glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);glEnable(GL_CULL_FACE);glCullFace(GL_BACK);glutMainLoop();无剔除无剔除剔除剔除54l深度深度缓存函数存函数n显示模式:示模式:glutInitDisplayMode(|GLUT_DEPTH)n深度深度缓存初始化:存初始化:glClear(GL_DEPTH_BUFFER_BIT)n(1)在每)在每显示新的一示新的一帧前清除前清除n(2)设置的默置的默认值为1n(3)设置初始置初始值:glClearDepth(maxDepth)n激活:激活:glEnable(GL_DEPTH_TEST);(默默认为不激活)不激活)10.8 OpenGL相关函数相关函数5510.8 OpenGL相关函数相关函数l例:例:Z-Buffer消消隐#include#include GLfloat vertices3=-1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,1.0;static GLfloat theta=0.0,0.0,0.0;static GLint axis=2;static GLdouble viewer=0.0,0.0,5.0;void polygon(int a,int b,int c,int d)glBegin(GL_POLYGON);glVertex3fv(verticesa);glVertex3fv(verticesb);glVertex3fv(verticesc);glVertex3fv(verticesd);glEnd();5610.8 OpenGL相关函数相关函数void colorcube()/正前面正前面 glColor3f(1,1,1);polygon(4,5,6,7);/正背面正背面 glColor3f(1.0,0,0);polygon(0,3,2,1);glColor3f(0,1,0);polygon(2,3,7,6);glColor3f(0,0,1);polygon(0,4,7,3);glColor3f(1,1,0);polygon(1,2,6,5);glColor3f(0,1,1);polygon(0,1,5,4);void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glClearDepth(1);glLoadIdentity();/更新视点位置更新视点位置 gluLookAt(viewer0,viewer1,viewer2,0.0,0.0,0.0,0.0,1.0,0.0);glRotatef(theta0,1.0,0.0,0.0);glRotatef(theta1,0.0,1.0,0.0);/*旋转立方体旋转立方体*/glRotatef(theta2,0.0,0.0,1.0);colorcube();glutSwapBuffers();5710.8 OpenGL相关函数相关函数void keys(unsigned char key,int x,int y)/*用用 x,X,y,Y,z,and Z 键键 移动视点移动视点*/if(key=x)viewer0-=1.0;if(key=X)viewer0+=1.0;if(key=y)viewer1-=1.0;if(key=Y)viewer1+=1.0;if(key=z)viewer2-=1.0;if(key=Z)viewer2+=1.0;display();void myReshape(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w 360.0)thetaaxis-=360.0;display();59int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|LUT_DEPTH);glutInitWindowSize(300,300);glutCreateWindow(cube);glutDisplayFunc(display);glutReshapeFunc(myReshape);glutMouseFunc(mouse);glutKeyboardFunc(keys);glEnable(GL_DEPTH_TEST);glutMainLoop();10.8 OpenGL相关函数相关函数没有深度测试没有深度测试有深度测试有深度测试60小结小结l消消隐的基本概念的基本概念n含含义n算法分算法分类n加速技加速技术l重要算法重要算法nZBuffer算法及其特点算法及其特点
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 教育学

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服