位置: 编程技术 - 正文

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

  • 环保税的纳税义务人是施工方还是建设方安徽
  • 小规模附加税如何做帐
  • 冲红凭证更正时摘要怎么写
  • 小规模纳税人企业所得税怎么计算
  • 开票和收到的款金额不一样怎么办?
  • 金税盘税务申报
  • 预付和预收可以合并吗
  • 发票章盖金额上去了
  • 合并报表无形资产摊销时间
  • 外出经营能自带食物吗
  • 收到股权回购款是什么意思
  • 小规模企业工资表怎么做
  • 虚开发票企业所得税怎么补缴税?
  • 出口供货企业
  • 员工销售家具取得的工资怎么写分录?
  • 怎么分清楚待认识的人
  • 公司客车高速费如何抵扣进项税?
  • 当期免抵税额如何做账
  • 已抵扣发票红冲后发票还给对方公司
  • 餐听发票可以开专用发票吗?
  • 期间费用包括哪些?
  • 企业收购股权要交税吗
  • 外币报表折算差额为负数代表
  • 增值税小规模纳税人减免增值税政策
  • 公司加农户经营模式
  • 单位应当为职工创造有益于健康的环境和条件
  • tplink无线网卡驱动802.11n
  • win11和win10比较
  • 收入的特征包括哪些
  • 月末计提电费
  • php数组函数实现机选双色球
  • 右键新建菜单中没有文本文档怎么办
  • 成品油的消费税可以抵扣吗
  • 税收保全措施的期限一般不超过几个月
  • 盘盈盘亏固定资产
  • 支付第三方劳务派遣费用如何做账
  • vue怎么让按键启用和禁用
  • 资产负债表利润表的勾稽关系
  • 什么是非营利性养老机构
  • php获取指定数量的数据
  • 自动驾驶车祸
  • 合伙企业退伙个税
  • 普通发票不满8项怎么开明细
  • 资产负债表季报是累计三个月数据吗
  • 单位买的空调计入什么科目
  • 房地产企业所得税管理办法
  • 建筑服务预征缴纳税款期初余额怎么算
  • 微信转账没有显示对方的名字怎么办
  • 金税盘费用抵扣账务处理
  • 什么是其他应收款科目
  • 会计账簿的含义及其作用
  • 会计科目中英文对照表下载
  • mysql 内存模型
  • sqlserver 临时表 准备
  • mybatis分页插件的原理
  • 双击盘符弹出属性
  • 为什么windows删除文件很慢
  • 如何解决焦虑的心理
  • mac怎么删除系统软件
  • 如何设置让自己手机号处于关机状态
  • win10系统的优化
  • win8怎么系统重装系统
  • win7开机提示重启怎么办
  • Unity3d Asset Serialization 设置错误导致SVN文件不能同步
  • 一个简单的微笑说说
  • 置顶在哪里
  • 简单使用23 款华为s E可以吗
  • jquery.inarray
  • unity3d Human skin real time rendering with blood and water drop effect真实模拟人皮实时渲染之血液和水珠掉落效果
  • jquery.qtip提示信息插件用法简单实例
  • 上海市税务局招聘
  • 四川省国税局一处处长
  • 群租房怎么举报电话
  • 煤炭资源税税率减半对上市公司影响
  • 云南地方税务局电话
  • 政府收储土地需要缴纳什么税
  • 电子社保卡怎么添加家人
  • 江苏企业所得税税率2023
  • 2020年青海国税工资待遇
  • 建安服务税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设