OpenGL中蒙板缓冲区的妙用.docx

OpenGL中蒙板缓冲区的妙用.docx

ID:57665143

大小:19.44 KB

页数:6页

时间:2020-08-31

OpenGL中蒙板缓冲区的妙用.docx_第1页
OpenGL中蒙板缓冲区的妙用.docx_第2页
OpenGL中蒙板缓冲区的妙用.docx_第3页
OpenGL中蒙板缓冲区的妙用.docx_第4页
OpenGL中蒙板缓冲区的妙用.docx_第5页
资源描述:

《OpenGL中蒙板缓冲区的妙用.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、OpenGL中蒙板缓冲区的妙用OpenGL2008-07-1418:07:37阅读6评论0字号:大中小技术基础 Stenciling蒙板1、类似于深度缓冲的逐像素测试2、与蒙板缓冲区内的值比较,测试失败的片断将被拒绝3、当以下情况时,特定的操作将被执行:n -蒙板测试失败 -深度测试失败 -深度测试通过4、提供对象素更新非常细致的控制 OpenGL中相关APIglEnabe/glDisable(GL_STENCIL_TEST);glStencilFunc(function,reference,mask);glStencil

2、Op(stencil_fail,depth_fail,depth_pass);glStencilMask(mask);glClear(...

3、GL_STENCIL_BUFFER_BIT); 对蒙板缓冲区的要求如果使用蒙板,要求有足够多的位实现应该支持从0到32位蒙板8,4,1位是通常可用的对于GLUT程序易用:glutInitDisplayMode(GLUT_DOUBLE

4、GLUT_RGB

5、GLUT_DEPTH

6、GLUT_STENCIL);glutCreateWindow("stencilexample"); 蒙板测试测试

7、就是拿参考值与象素的蒙板缓冲值比较比较函数与深度测试一样:NERVER,ALWAYSLESS,LEQUALGREATER,GEQUALEQUAL,NOTEQUAL 位掩码控制比较过程((ref&mask)op(svalue&mask)) 蒙板操作对蒙板的影响-蒙板测试失败-深度测试失败-深度测试通过可能的操作-加,减(saturates)-加,减(wrap,DX6option)-保持,替换-清0,取反蒙板缓冲值就是这样受控制的 蒙板缓冲区写掩码位掩码控制蒙板值怎样回写进蒙板缓冲区也用于清除蒙板比较与写掩码允许把蒙板值当作多

8、个子区域。 DX6D3DAPI与OpenGL完全相同的机能SetRenderState控制更新:-D3DRENDERSTATE_STENCILENABLE-D3DRENDERSTATE_STENCILFUNC-D3DRENDERSTATE_STENCILREF-D3DRENDERSTATE_STENCILMASK-D3DRENDERSTATE_STENCILWRITEMASK-D3DRENDERSTATE_STENCILFAIL-D3DRENDERSTATE_STENCILZFAIL-D3DRENDERSTATE_STEN

9、CILPASS DX6话题记住查询可能的位!加上建立并附加一个深度/蒙板界面(接口) 关于性能今天的32位图形加速模式将24位深度加上8位蒙板封装在同一个内存字中。如RIVATNT性能提示:如果使用了深度测试,蒙板测试是不会带来恶报的不要认为蒙板测试是“昂贵的”,实际上如果已经进行了深度测试,蒙板是“免费的”。 平面反射: 绘制物体两次,第二次用glScalef(1,-1,-1)实现平面上的反射第二次只能在反射面内画,超出部分要裁掉,这就要用到蒙板缓冲区。1、蒙板清0。2、将蒙板设为1,绘制反射平面多边形。3、只在蒙板为1

10、处绘制反射图象。这个平面反射的思想可以递归使用。这需要更多的蒙板位。 平面阴影:建立阴影变换矩阵原理1、地平面的方程为ax+by+cz+d=0,光源在原点,空间一点(sx,sy,sz,1)的阴影:过原点和空间一点的直线上的点坐标为(n*sx,n*sy,n*sz,1);该直线与地平面交点为(m*sx,m*sy,m*sz,1),它应该满足地平面方程,所以m(a*sx+b*sy+c*sz)+d=0;则m=-d/(a*sx+b*sy+c*sz);交点坐标{-d/(a*sx+b*sy+c*sz}(sx,sy,sz)变换矩阵-d,0,

11、0,00,-d,0,00,0,0,-d,0,0,0,-d2、光源在无限远,方向为D(dx,dy,dz),空间一点s(sx,sy,sz,1)的阴影:这回直线为s+nD,与地面平面交点为:a(sx+n.dx)+b(sy+n.dy)+c(sz+n.dz)+d=0---n=-(a.sz+b.sy+c.sz+d)/(dx+dy+dz)交点为(sx,sy,sz)+n*(dx,dy,dz)变换矩阵-d,0,0,00,-d,0,00,0,-d,00,0,0,-d代码:voidshadowMatrix(GLfloatshadowMat[4]

12、[4],GLfloatgroundplane[4],GLfloatlightpos[4]){GLfloatdot;/*光源矢量与平面法向矢量的点积*/dot=groundplane[X]*lightpos[X]+groundplane[Y]*lightpos[Y]+groundplane[Z]*ligh

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。