位置: 编程技术 - 正文

[置顶] 混合、反走样、雾效、多边形偏移

编辑:rootadmin
混合:介绍如何指定混合函数,它通过将源颜色和目标颜色混合,使场景的某些部分为半透明;反走样:反走样通过修改颜色来消除点、线、多边形边缘的棱角和锯齿;多重采用是一种强大的反走样技术,适用于所有的图元;雾:描述如何根据物体到视点的距离来计算物体的颜色&#;,以创建立体感效果,使远方的物体看起来已经融入到场景中;点参数:讨论一种高效的技术,用于根据距离视点的距离渲染大小和颜色不同的点图元。在模拟粒子系统方面很有用。多边形偏移:当线框物体和填充物体重合时,看起来可能很丑陋;使多边形偏移,改变其深度&#;,可以使带轮廓的物体更美观。 混合 混合功能启用时,alpha&#;用于在在处理的片元的颜色&#;与存储在帧缓存中的像素颜色&#;合并。将场景光栅化并转换为片元后执行混合操作,最后将像素写入到帧缓存中。输入片元颜色&#;(Rs, Gs, Bs, As), 帧缓存中的颜色(Rd, Gd, Bd, Ad), 源因子(Sr, Sg, Sb, Sa),目标因子(Dr, Dg, Db, Da);则最终的颜色为(Rs*Sr&#;Rd*Dr, Gs*Sg&#;Gd*Dg, Bs*Sb&#;Bd*Db, As*Sa&#;Ad*Da),并截取到[0,1]。选择源因子和目标因子的方式有两种:1. glBlendFunc(GLenum srcfactor, GLenum destfactor);指定混合因子的计算方法2. glBlendFuncSeparate(GLenum srcRGB, GLenum destRGB, GLenum srcalpha, GLenum destalpha);指定混合因子常量 RGB混合因子 alpha混合因子GL_ZERO (0, 0, 0) 0GL_ONE (1, 1, 1) 1GL_SRC_COLOR (Rs, Gs, Bs) AsGL_ONE_MINUS_SRC_COLOR (1,1,1)-(Rs, Gs, Bs) 1-AsGL_DST_COLOR (Rd, Gd, Bd) AdGL_ONE_MINUS_DST_COLOR (1,1,1)-(Rd, Gd, Bd) 1-AdGL_SRC_ALPHA (As, As, As) AsGL_ONE_MINUS_SRC_ALPHA (1,1,1)-(As, As, As) 1-AsGL_DST_ALPHA (Ad, Ad, Ad) AdGL_ONE_MINUS_DST_ALPHA (1,1,1)-(Ad, Ad, Ad) 1-AdGL_CONSTANT_COLOR (Rc, Gc, Bc) AcGL_ONE_MINUS_CONSTANT_COLOR (1,1,1)-(Rc, Gc, Bc) 1-AcGL_CONSTANT_ALPHA (Ac, Ac, Ac) AcGL_ONE_MINUS_CONSTANT_ALPHA (1,1,1)-(Ac,Ac ,Ac) 1-AcGL_SRC_ALPHA_SATURATE (f,f,f);f=min(As, 1-Ad) 1使用GL*CONSTANT*为参数时,需指定一个常量glBlendColor(GLclampf red, GLclampf green , GLclampf blue, GLclampf alpha)启用混合glEnable(GL_BLEND);禁用glEnable(GL_BLEND);例程:blendeqn.cpp使用混合方程合并像素在混合时也可以指定其他运算方式:glBlendEquation(GLenum mode);Cs, Cd为源颜色和目标颜色, S, D为原混合因子和目标混合因子GL_FUNC_ADD Cs*S&#;Cd*DGL_FUNC_SUBTRACT Cs*S-Cd*DGL_FUNC_REVERSE_SUBTRACT Cd*D-Cs*SGL_FUNC_MIN min(Cs*S, Cd*D)GL_FUNC_MAX max(Cs*S, Cd*D)使用深度缓存的三维混合:特点:透明物体在前时,后面的物体都要绘制,透明物体在不透明物体后时不需要绘制。所以要对深度缓存进行控制。方法:首先向深度缓存设置为正常,绘制所有不透明物体,然后将深度缓存设置为只读,绘制半透明物体时,将其与深度缓存比较,如果他们位于不透明物体后面,将不绘制,如果这些透明物体更近,则绘制并混合在一起,因为深度缓存不变,所以不会消除后面的不透明物体。glDepthMask();GL_FALSE;将深度缓存设置为只读。GL_TRUE;设置为正常。例程:alpha3D.cpp 反走样Opengl根据片元覆盖了像素方块中的多少面积来计算覆盖比例。在RGBA模式下,Opengl将片元覆盖比例与alpha&#;相乘,并将乘积作为alpha&#;来将片元与帧缓存中的对应像素进行混合。在颜色索引模式下,Opengl根据片元的覆盖比例来设置颜色索引的后四位(没有覆盖时为,完全覆盖时为)。glHint(GLenum target, GLenum hint);提供在图像质量和速度间进行选择的建议,但opengl不一定会采纳。targetGL_POINT_SMOOTH_HINT GL_LINE_SMOOTH_HINT 反走样操作中,直线、点或多边形的采样质量GL_POLYGON_SMOOTH_HINTGL_FOG_HINT 对每个像素(GL_NICEST)还是每个原点(GL_FASTEST)执行雾效计算GL_PERSPECTIVE_CORRECTION_HINT 颜色和纹理坐标插&#;的质量:在屏幕空间中进行线性插&#;,或以透视修正的方式进行插&#;。GL_GENERATE_MIPMAP_HINT 自动生成的mipmap的质量和性能GL_TEXTURE_COMPRESSION_HINT 纹理图像的压缩质量和性能点和直线的反走样方法:1. 使用GL_POINT_SMOOTH, GL_LINE_SMOOTH调用glEnable();2. 使用glHint();提出质量建议3. 使用多重采用1. RGBA模式下的反走样在RGBA模式时需要启用混合功能,最常用的混合因子是GL_SRC_ALPHA(源)和GL_ONE_MINUS_SRC_ALPHA(目标)。也可以将目标因子设置为GL_ONE, 使直线的相交处更亮。在三维时需要按照循序进行绘制。2. 颜色索引模式下的反走样需要加载个相邻的索引,其中第一个必须为的倍数,它们对于与颜色从背景色渐变到物体的颜色。然后用第一个索引&#;对应的颜色作为清空颜色缓存,然后使用加载的颜色绘制点或直线。多重采用对几何图元进行反走样处理多重采用非常适合对多边形的变进行反走样处理。多重采用基本原理:多重采样是一种使用更多的颜色、深度和样板信息对OPENGL图元进行反走样处理的技术。计算反走样覆盖比例时,不使用表示图元对像素覆盖比例的alpha&#;,而是使用存储在多重采样缓存中的样本。使用步骤:1. 打开一个支持多重采样的窗口。glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_MULTISAMPLE);2. 确定其是否支持多重采样。查询状态变量GL_SAMPLE_BUFFERS时返回1;查询GL_SAMPLES时返回子像素样本数返回&#;大于1;则可以使用多重采样。3. 打开多重采样。glEnable(GL_MULTISAMPLE); 雾glEnable(GL_FOG);启用雾效glHint提供了处理效果建议GL_FOG_HINTglFog*设置各个参数GL_FOG_MODEGL_FOG_COLROGL_FOG_DENSITYGL_FOG_STARTGL_FOT_END雾方程式雾是根据雾混合因子将雾颜色与片源颜色进行混合得到了,这个因子f是根据以下3个方程计算得到的:f = e^(density*z)*(GL_EXP);f = e^-((endsity*z)^2)*(GL_EXP2);f = (end - z) / (end - start)*(GL_LINEAR)最终的雾是:C = f*Ci &#; (1-f)*Cf;雾坐标可以调用glFog(GL_FOG_COORD_SRC, GL_FOG_COORD)显示的指定每一个顶点的z&#;glFogCoord*()指定坐标点参数模拟点物体的远近,根据远近对物体的大小进行修改。可以使用glPointSize();指定点的大小glEnable(GL_POINT_SMOOTH)启动点的平滑处理点参数根据点和观察点的距离,对点的大小和亮度进行衰减。可以使用glPointParameterf*();指定衰减方程式的系数和点alpha成分void glPointParameterf(GLenum pname, GLfloat param)void glPointParameterfv(GLenum pname, GLfloat* param)如果pname为GL_POINT_DISTANCE_ATTENUATION,param为包含了(常数、线性、二次衰减系数)的数组。d为点与观察点的距离derivedSize = clamp(size*sqrt(1/(a&#;b*d&#;c*d^2)))如果pname为GL_POINT_SIZE_MIN,GL_POINT_SIZE_MAX,param是一个限制对上一步经过计算得到的点大小进行截取。如果启用的多重采用pname是GL_FADE_THRESHOLD_SIZE,param是制定了点大小的不同的底限。如果derivedSize < threshold,就用fade因子对点的alpha&#;进行调整,衰减它的亮度fade = (derivedSize/threshold)^2 多边形偏移当着重显示实心物体边缘是,可以用GL_FILL绘制这个物体,在用GL_LINE重新绘制这个物体,但是由于直线和填充的方式绘制opengl所产生的深度&#;并不完全相同,因此其可能受重叠的多边形影响,显示效果忽浓忽淡。多边形偏移将着重显示的多边形边缘与多边形分离。三种方法启用多边形偏移分别用于不同的多边形光栅化模式:GL_FILL,GL_LINE,GL_POINT,再想glEnable传递适当参数:GL_POLYGON_OFFSET_FILL, GL_POLYGON_OFFSET_LINE, GL_POLYGON_OFFSET_POINT,再用glPolygonMode()设置光栅化模式;glPolygonOffset(GLfloat factor, GLfloat units)设置计算偏移&#;参数:o = m*factor&#;r*units,m是多边形的最大深度斜率, r是保证能够产生可解析区别的窗口坐标深度&#;的最小&#;,是一个特殊的实现常数。深度斜率m是当穿越一个多边形z&#;的变化除以x或y&#;的变化所得的&#;。m = max{|det(V)/det(s)|, |det(v)/det(t)|}对于深度斜率接近0的多边形,可以指定一个很小的偏移量,factor = 0.0, units = 1.0.对于角度大的多边形可以指定一个较小的factor如(0., 1.0)就可以产生很好的效果。转载自:

推荐整理分享[置顶] 混合、反走样、雾效、多边形偏移,希望有所帮助,仅作参考,欢迎阅读内容。

[置顶]
        混合、反走样、雾效、多边形偏移

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

[置顶] openGL学习笔记一:环境搭建 最近项目比较忙(每天凌晨才结束),所以cocos2dx的博客也没有更新了。感觉好堕落的说。最近打算学openGL,在这里做过学习笔记,有什么没有对的还是

[置顶] openGL学习笔记二:看看上一篇我们写的代码 哈哈,千呼万唤始出来,我们第二篇笔记新鲜出炉了(话说不是没隔多久么。。。。)呵呵,闲话不多说,我们来看看上一篇我们写的代码,知其然也

Qt_OpenGL:3D图形小测 Qt_OpenGL:3D图形小测//.h#ifndefGLWIDGET_H#defineGLWIDGET_H#includeQtOpenGL#includeQWidgetclassGLWidget:publicQGLWidget{Q_OBJECTpublic:explicitGLWidget(QGLWidget*parent=0);~GLWidget();protected:v

标签: [置顶] 混合、反走样、雾效、多边形偏移

本文链接地址:https://www.jiuchutong.com/biancheng/373207.html 转载请保留说明!

上一篇:OpenGL渲染管线(opengl渲染流程图)

下一篇:[置顶] openGL学习笔记一:环境搭建([置顶]津鱼.我爱你)

  • 项目异地预缴附加税会计分录是?
  • 税务师考几科几分及格
  • 计提环境保护税怎么做分录
  • 金税四期有什么优势
  • 对公账户是不是实时到账
  • 零申报印花税怎么填写
  • 增值税专票电话号码错了有关系吗
  • 个体户要申报哪些报表
  • 做企业所得税汇算清缴前需要准备什么资料
  • 为什么查询发票显示查无此票
  • 从成因解析如何把控出口退税的执法风险
  • 何时进行文化事业建设
  • 怎么计算房地产公司可以贷款多少
  • 坏账准备的计提是什么意思
  • 会展服务服务费怎么是免税
  • 其他业务支出和其他业务成本的区别
  • 办公室出租中介公司
  • 以前年度损益调整会计分录
  • 销售折扣在备注栏注明的可以扣除吗
  • 付出去的款项退回怎么做账
  • windows11进入桌面黑屏
  • 残保金按计提数还是按发放数申报
  • 对外贸易法律的特征包括
  • 苹果电脑设置壁纸为什么重启就没了
  • php数组函数实现机选双色球
  • phpstorm如何运行
  • YunDetectService.exe是什么进程?YunDetectService.exe禁止使用的方法
  • 核定征收怎么申报个人经营所得
  • 转让股权企业所得税怎么计算
  • linux操作系统文件系统
  • 在web页面中如果出现html语句
  • PHP:mcrypt_enc_get_iv_size()的用法_Mcrypt函数
  • 购进的货物
  • 发票交付在哪里
  • 固定资产抵债账务怎么处理
  • yii框架安装
  • vue国际化解决方案
  • opencvcuda
  • 发票失控进项转出
  • 待处理财产损溢增加是哪方
  • sqlserver2005使用
  • 入股资金打入公司账户
  • 删除mysql数据库用户
  • 现金流量表编制原则
  • 个人所得税计入应付职工薪酬吗
  • 研发费用归集的主要范围有哪些
  • 固定资产计提折旧表
  • 合伙企业分红怎么做账
  • 私车公用税务处理
  • 长期待摊费用的最新账务处理
  • 建筑行业收到工程款延期付款利息需不需要开票
  • 认缴款和投资款区别
  • 每月分红会计分录
  • 纳税申报利润总额计算公式
  • 子公司的亏损能算到母公司吗
  • 会计借贷帐
  • 物业管理企业应按职工工资总额的1.5%计提工会经费
  • win8系统如何安装软件
  • linux 主力机
  • 官方发布预防新冠戴口罩指引
  • Ubuntu开启热点
  • centos7 ip forward
  • smartagt.exe - smartagt是什么进程 什么文件
  • linux scp命令的用法详解
  • Xp输入法不见了
  • winxp开启远程桌面连接
  • 文件夹删不掉显示另一个程序打开
  • 删除滑动解锁图片
  • python怎么用命令行
  • shell字符串比较相等
  • js定时器有哪些,区别及用法
  • JavaScript浏览器扩展
  • 用python编写简单程序
  • web.py 十分钟创建简易博客实现代码
  • android完整开源项目
  • 2020年税务口号
  • 重庆地税电子税务局app
  • 公交爱心卡需要每年审吗
  • 甘肃华能能源开发有限公司
  • 铁西区地税局电话多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设