OGL点参数圆形衰减/贴花/多边形偏移技术
2016-08-08 10:23
393 查看
OGL点参数
1.可以用设置点图元达到想要的物体形状和光照效果。
主要用:glPointParameterfv来设置:glPointParameterfv(GL_DISTANCE_ATTENUATION_EXT, linear);
glPointSize (psize);
#define GL_POINT_SIZE_MIN_EXT 0x8126 // 设置最小值
#define GL_POINT_SIZE_MAX_EXT 0x8127 // 设置最大值
#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 // 且启用了多重采样,那么用于计算衰减亮度
#define GL_DISTANCE_ATTENUATION_EXT 0x8129 // 设置大小和亮度的衰减
具体设置网上查询。
2.OGL点图元是方形的,为了获得圆形的点图元因此需要启用点抗锯齿功能:
glEnable(GL_POINT_SMOOTH);glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
多边形偏移
1.贴花技术中应用的GL_FILL,GL_LINE
为了着重显示物体的轮廓,可以用GL_FILL绘制这个物体,然后用GL_LINE用一种不同的颜色再绘制一遍物体在用GL_LINE绘制物体的时候,偏移下物体的z值在透视投影模式下,让它比实体物体的z值更小些,显示的时候就会在物体的边缘。
地面或者楼层等表面的贴花技术,就可以用多边形偏移来做到。隐藏直线消除,也就是绘制物体的轮廓且填充物体内部,让内部和边缘轮廓都感觉平滑,其实直接用前景色绘制物体轮廓,用多边形填充物体内部,且对多边形进行偏移避免覆盖轮廓即可;或者用模板缓存区也可以实现,但是stencil性能相对较差且复杂。
2.贴花的通用实现技术
目的是让贴图B一定全部在A上面渲染。一般用stencil buffer来实现:
1)对模板缓冲区进行配置,在深度测试通过的地方写入1,未通过写入0,然后渲染A.
2)对模板缓冲区进行配置,使模板值不会变化(不然变成B的了),但只渲染模板值为1的地方,禁止深度换冲区的测试和更新(B不管深度一定绘制出来),然后渲染B.
3)启用深度测试,关闭模板测试。
OGL 图形效果的实现,都是吸收业内常用的做法,和为了实现目标效果,结合自己对图像渲染管道的理解,进行组合设计得到想要的效果。
3.多边形偏移的设置
启用多边形偏移:glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_POLYGON_OFFSET_FILL);
设置多边形的偏移:
glPolygonOffset(polyfactor, polyunits);
偏移量的计算公式为:offset = m * factor + r * units;
m是多边形的最大深度斜率(在光栅化过程中计算的),r是保证能够产生可解析区别的窗口坐标深度值的最小值,不同的OGL实现会不一样。
深度斜率:为:m = max( z/x, z/y).
对于深度斜率接近于0的多边形,polyfactor= 0, polyunits=1即可。
对于深度斜率很大的多边形接近1,那么polyfactor= 0.75或1.0, polyunits=1即可。
由于深度值在使用透视投影时,并不是均匀地变换到窗口坐标中,因此靠近近裁剪面的多边形需要的偏移要小于靠近远裁剪面的多边形。
相关文章推荐
- OGL多边形或二次曲面分格化(Tessellation曲面软件细分技术)
- OpenGL 红宝书 反走样 雾 点参数 多边形偏移
- OpenGL: 反走样 雾 点参数 多边形偏移
- 有关音频编码的知识与技术参数
- 交换机的重要技术参数
- 防火墙技术参数
- 交换机的重要技术参数
- 从CPU的技术参数认识CPU(转东转西)
- [技术]window.open的使用方法以及参数说明
- QTP关键技术(四) - Test和Top-Level Action间参数传递
- 一个非常简单的分页技术MYSQL+JSP 利用了mysql的LIMIT参数
- .Net反射技术应用解决对象不同版本方法不同参数的问题
- HtmlView定制之线选,多边形选择,圆形选择!::详细定制过程
- 我所关心的POS打印机技术参数
- QTP关键技术(六) - 嵌套Action间的参数传递
- 交换机的重要技术参数
- [转载]交换机的重要技术参数
- 交换机的重要技术参数
- 一个非常简单的分页技术MYSQL+JSP 利用了mysql的LIMIT参数
- CPU的相关技术参数