位置: 编程技术 - 正文

OpenGL中的颜色混合功能(一)(opengl颜色代码表)

编辑:rootadmin
OpenGL中的颜色混合功能(一) 我们知道,材料属性和光照参数可以极大地增加图形的&#;真度,但除此之外,我们在对现实世界进行建模时,有许多效果是通过混合颜色的方式实现的。透明的物体,像是玻璃水杯,在它后面发射过来的光会与透明物体的颜色混合在一起。这种透明在OpenGL中的实现方式,是通过首先绘制背景物体,然后把前景物体(比如水杯)与颜色缓冲区中已经存在的颜色进行混合而实现的。在这一过程中,颜色的alpha&#;成分发挥了重要作用。 颜色的混合功能 在一般情况下,OpenGL在渲染时把颜色&#;存放在颜色缓冲区中,把每个片段(像素)的深度&#;存放在深度缓冲区中。当深度检测被关闭时,新的颜色&#;简单地覆盖颜色缓冲区中已经存在的颜色&#;;当深度检测被打开时,新的颜色&#;只有当它比原来的颜色更接近临近的裁剪平面时才会替换原来的颜色。当然,这是在OpenGL的混合功能被关闭的情况下。当混合功能被启用时,新的颜色会与颜色缓冲区中原有的颜色进行组合。通过对这些颜色进行不同的组合,可以产生许多种不同的效果。 在介绍颜色混合之前,我们需要首先明确目标颜色和源颜色这两个术语的概念。首先,已经存储在颜色缓冲区中的颜色称为目标颜色,这个颜色包含了单独的红、绿、蓝成分以及一个可选的alpha&#;。其次,作为当前渲染命令的结果进入颜色缓冲区中的颜色称为源颜色,它同样也包含了四种颜色成分(红、绿、蓝和可选的alpha&#;成分)。我们正是通过对目标颜色和源颜色进行不同的组合操作,来实现颜色混合的功能的。启用混合功能: glEnable(GL_BLEND); 当混合功能被启用时,源颜色和目标颜色的组合方式是由混合方程式来控制的。在默认情况下,使用的混合方程式如下所示: 其中,Cf是最终计算产生的颜色,Cs是源颜色,Cd是目标颜色。S是源混合因子,D是目标混合因子。这两个混合因子可以通过下面的这个函数进行设置: glBlendFunc(GLenum S, GLenum D); 可以看出,形参S和D都是枚举&#;,而不是可以直接指定的实际&#;。只谈概念有些模糊,让我们通过一个常见的混合函数示例来说明上述概念的实际应用: // 设置源混合因子和目标混合因子 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 根据上面的混合函数,如果颜色缓冲区中的目标颜色为红色(1.0f,0.0f, 0.0f, 0.0f);源颜色为一种蓝色(0.0f, 0.0f, 1.0, 0.6f),它的alpha&#;为0.6,那么计算得出的最终颜色为: Cd = 目标颜色 = (1.0f,0.0f, 0.0f, 0.0f) Cs = 源颜色 = (0.0f, 0.0f, 1.0, 0.6f) S = 源颜色alpha&#; = 0.6 D = 1 - 源颜色alpha&#; = 0.4 所以,根据混合方程式: 相当于:Cf = (蓝 * 0.6)&#; (红 * 0.4) 最终产生的颜色是目标颜色红色与源颜色蓝色进行缩放后的组合,并且源颜色的alpha&#;越高,添加的源颜色成分就越多,目标颜色所保留的成分就越少。这个混合函数经常用于在一些不透明的物体前面绘制透明物体的效果。这种技巧在实现时需要首先绘制背景物体,然后再绘制经过混合的透明物体。它的效果会令你惊讶,如图所示: 让我们通过代码,来看一下Reflection示例程序的制作思路: void RenderScene() { // 清空颜色缓冲区和深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // ----------------------- 首先绘制地板下方的球体 -------------------- // 保存矩阵状态 glPushMatrix(); // 将光源0的位置摆放到地板下方 glLightfv(GL_LIGHT0, GL_POSITION, fLightPosMirror); // 保存矩阵状态 glPushMatrix(); // 设置顺时针环绕的一面为多边形的正面,对多边形进行镜像 glFrontFace(GL_CW); // 在Y轴使用-1的缩放因子来反转Y轴 glScalef(1.0f, -1.0f, 1.0f); // 绘制地板下方的球体 DrawSphere(); // 设置逆时针环绕的一面为多边形的正面 glFrontFace(GL_CCW); // 恢复矩阵状态 glPopMatrix(); // ----------------- 通过对地板设置透明的颜色混合效果,来实现反射的幻觉 ----------------- // 关闭光照计算 glDisable(GL_LIGHTING); // 打开颜色混合 glEnable(GL_BLEND); // 设置混合因子 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // 绘制地板 DrawGround(); // 关闭颜色混合 glDisable(GL_BLEND); // 打开光照计算 glEnable(GL_LIGHTING); // -------------------- 最后绘制地板上方的球体 --------------------------- // 将光源0的位置摆放到地板上面 glLightfv(GL_LIGHT0, GL_POSITION, fLightPos); // 绘制地板上方的球体 DrawSphere(); // 恢复矩阵状态 glPopMatrix(); // 执行缓冲区的交换 glutSwapBuffers(); } 我们在进行场景的绘制时,首先以上下颠倒的方式,最先绘制地板下方的球体;然后打开混合,在球体的上面绘制一层透明的地板;最后恢复颠倒后的坐标系,绘制地板上方的球体。这三部分完成后,一幅地板反射球体的幻觉画面就完成了,如图所示: 这一部分的示例程序完整代码已经放到了GitHub上,有需要的朋友可以参考一下( 本文出自杜晓萌的博客,请勿用于任何商业用途,转载请保持完整性并标明出处:

推荐整理分享OpenGL中的颜色混合功能(一)(opengl颜色代码表),希望有所帮助,仅作参考,欢迎阅读内容。

OpenGL中的颜色混合功能(一)(opengl颜色代码表)

文章相关热门搜索词:opengl颜色填充,opengl颜色混合出现彩色条纹,opengl颜色代码,opengl颜色代码表,opengl颜色混合模式,opengl颜色代码,opengl颜色混合出现彩色条纹,opengl颜色混合,内容如对您有帮助,希望把文章链接给更多的朋友!

windows visual studio 基于openGL的粒子系统设计 这是我上计算机三维动画的时候的期末作业,自己动手做的能实现粒子系统的效果,同时代码很简单,只有一个cpp文件,很适合想要理解粒子系统原理

windows visual studio openGL开发环境配置 1.到openGL官方网站去下载openGL的开发包,目录如下2.打开visualstudio创建win控制台程序3.打开项目的属性4.配置项目动态库路径5.配置openGL的lib的目录(其

Android OpenGL 学习笔记 --开始篇 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。

标签: opengl颜色代码表

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

上一篇:[3D 图形学基础] 读书笔记(1) Part_I(Getting Started) - Introduction(3d图形学原理)

下一篇:windows visual studio 基于openGL的粒子系统设计

  • 纳税属于什么会计科目
  • 进项发票已认证,发现发票有问题怎么办
  • 企业所得税如何合理避税?
  • 个人所得税一般多久能退下来
  • 个人所得税起征点2023税率表
  • 怎么结转未交增值税
  • 怎么证明自己是建档立卡贫困户
  • 资源税征收原则
  • 计入资本公积的固定资产报废
  • 办公楼租金如何定价
  • 短期借款会计科目使用说明
  • 小规模纳税人消费税怎么计算
  • 报销粘贴单怎么写
  • 建筑企业增值税怎么算
  • 专用发票不抵扣怎么做分录
  • 企业平时计提的税费分录
  • 股东往来款怎么处理
  • 营改增后固定资产入账
  • 定期定额征收适用范围
  • 出口专用发票可抵扣吗
  • 盈余公积什么时候调整
  • 什么企业不可以开通信保订单服务
  • 合并企业的增值税税率
  • 小规模付增值税怎么做账
  • 财务费用年末有余额吗
  • win7桌面快捷键是什么
  • 如何打印word文档手机上
  • 工厂的绿化费进项税额
  • 财务差旅费报销制度
  • 收到挂靠方应缴纳税款如何做账?
  • 一次性开票分期确认收入如何纳税申报
  • php call方法
  • 筹建期的银行利息收入分录
  • 缴纳公积金个人没有扣款怎么回事
  • 工业企业汽车发生费用处理
  • 办理不动产证需要什么手续及证件
  • php flock函数
  • 期末应交增值税转入未交增值税
  • 加工费计入什么成本类别
  • 完美解决在ThinkPHP控制器中命名空间的问题
  • thinkphp addons
  • thinkphp import
  • 治疗孩子咳嗽小秘方,超实用
  • php弹出登录框
  • php中自定义函数的语法格式
  • 蓝桥杯真题c语言
  • php 微信公众号自定义菜单
  • 社保已经扣款还可以减人员吗
  • 采购入库单怎么生成
  • 营业执照需要提交什么材料
  • 差旅费 包括
  • 小规模纳税人的条件
  • 捐赠支出的账务处理
  • 法院退诉讼费账务处理
  • 员工上班的停车费谁出
  • 退回增值税发票怎么做处理
  • 购买办公室家具
  • 持有至到期投资是债权投资吗
  • 小规模发票跨月冲红税款可以退回吗
  • 预交企业所得税计算
  • win8设置怎么打开
  • 安装操作系统win10
  • 电脑bios怎么分区
  • 用xp系统打造
  • win8桌面键盘
  • js 箭头表达式
  • excel f9刷新
  • js调用方法什么时候要加括号
  • nodejs xhr
  • javascript typeof id==='string'?document.getElementById(id):id解释 原创
  • js文件设置编码
  • bootstrap boosting
  • 外部js获取当前vue实例
  • android的动画有哪些?
  • 农业栽培技术
  • 税务局申请企业破产被告
  • 国家税务总局23号文件
  • 发票在地税能查到,但是国税查不到
  • 问一下医院
  • 税务申报如何网上申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设