位置: 编程技术 - 正文

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的粒子系统设计

  • 递延所得税资产和递延所得税负债
  • 印花税权利许可证照免税吗
  • 企业税申报的三种方式
  • 什么是代扣代缴申报
  • 小微企业所得税税率
  • 小规模企业增值税减免政策
  • 教育培训行业是干什么的
  • 独立核算的分公司
  • 季度结转会计分录
  • 现金流量补充表的编制
  • 其他现代服务业能开哪些税目
  • 房租不能开发票怎样入账
  • 构成业务和不构成业务的会计处理
  • 工会经费需要计税吗
  • 小规模国税怎么报税
  • 高危行业企业安全费用提取
  • 转让不动产增值税预缴
  • 费用票据包括哪些
  • 财政收回项目资金的整改报告
  • 固定资产抵扣期限
  • 进口增值税关税怎么付
  • 行业协会需要办理税务登记证吗
  • 简易计税在借方还是贷方
  • 加油款可以开专用发票吗
  • 不征税收入税屋
  • 文化建设服务费减免
  • 降温费和取暖费标准
  • 应收账款重组
  • 发工资和扣社保的区别
  • 被替换的账面价值题目
  • 取得成本tc
  • 政府会计的记账基础是什么?
  • 出口退税的条件包括
  • 专设销售机构的各项经费应列支什么科目
  • ajax调用php函数
  • jquery编程
  • 以土地投资溢价的公司
  • 加班费的计算基数包括补贴吗
  • gridviewcolumn
  • framework教程
  • ai绘画图片
  • 工程完工收到工程发票
  • 分期收款销售产品
  • 在哪里验证增值税票
  • 网购报销需要发票和什么截图
  • 建筑业外管证预审要多久
  • 物业合并利润表怎么填
  • 个税返还款增值税税率
  • 营改增后可以抵扣的进项
  • 多计提费用 怎么冲
  • 包装成本核算的主要内容
  • 未发生账务类交易
  • 资产处置损益借贷方向表示什么
  • 税控盘年费每年都可以抵扣吗
  • 价税合计怎么求税额
  • 教育费附加免征额
  • 处置长投其他权益变动要转损益吗
  • 银行帐户维护费怎么算
  • 加计抵减10%政策适用范围
  • 凭发票报销的通知简单
  • 242104 税控盘
  • mysql数据库主从数据不一致
  • mysql使用正则表达式查询数据并另存为另一列
  • ubuntul
  • bootcamp您的磁盘未能分区
  • linux运维是必死之路
  • centos 7安装教程(图文详解)
  • centos7 zsh
  • win8更改电脑设置在哪
  • css中有序列表
  • python基本入门
  • jQuery中ajax错误调试分析
  • shell中的括号
  • python处理文本文件代码优化
  • jquery基本知识
  • 湖南电子税务局app
  • 广东税务app申报不小心点到了不再提示
  • A级纳税人和一般纳税人区别
  • 国税局政审审考生什么
  • 苏州税务系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设