位置: 编程技术 - 正文

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

  • 实收资本增加印花税怎么算
  • 消费税的会计分局
  • 个体的个人所得税怎么算
  • 小规模免税收入账务处理
  • 农产品一般纳税人开普票免税吗
  • 商品流通企业应将当期已销商品的进价转入当期费用
  • 行政单位在建工程会计分录
  • 收益性支出应计入产品成本对吗
  • 外商投资企业所得税法第八条
  • 软件分几次开票怎么入账
  • 代驾费开增值税专票还是普票?
  • 没有外管证就开具了发票
  • 拿到进项票下一步做啥
  • 纳税人必知的十七项增值税开票指南
  • 机顶盒包括
  • 开票系统维护费必须要交吗
  • 制造行业库存该怎么处理
  • 科目编码首位与分类编号不符,接受此编码吗
  • 出口退税限额如何理解
  • 收到退回去年增值税怎么做账
  • 核销以前年度的其他应付款
  • windows11开始菜单怎么居中
  • 如何防范税务风险
  • 预提开发成本超过10%部分计算的销售成本转回
  • 预缴增值税会产生滞纳金吗
  • php7 ??
  • 摊销房租费如何做账
  • launcheflc.exe什么意思
  • php魔术方法的讲解与使用
  • 增资导致的股权稀释涉税吗
  • win7系统文件在哪
  • 温哥华瀑布
  • html怎么嵌入js
  • php数组可以使用哪些键名
  • ZED2跑ORB-SLAM3+双目相机、IMU联合标定+显卡驱动与cuda/cudnn安装
  • vue常用
  • 针对多用户实现什么功能
  • 建筑业增值税怎么算举例说明
  • 认证系统维护费怎么算
  • 公司进项抵税
  • 有外币账户的企业叫什么
  • 企业所得税预缴少缴纳了,需要交滞纳金吗?
  • 代扣员工伙食费
  • 建筑企业预缴
  • 应交税费会计分录完整版
  • 产品的运输费用分录
  • 深圳市企业稳岗补贴标准
  • 补贴收入属于其他收益吗
  • 中小创投企业收益分析
  • 社保阶段性减免范围
  • 一般存款账户可以办理现金缴存但不得办理现金支取
  • 设计服务的成本核算
  • 对公账户怎么打印
  • 分公司人数要求
  • 营改增租赁服务有哪些
  • mysql5.6 创建用户
  • 怎么判断win7还是win10
  • win2003注册表空间不足
  • windows崩溃后怎么修复
  • xp系统提升性能
  • 工商网银登陆
  • perl数组求和
  • javascript标准
  • js继承的关键字
  • excel 工具栏
  • 疯狂Android讲义(kotlin版)
  • js时间计算相减
  • nodejs获取客户端设备信息
  • angular 嵌入html
  • angular基础
  • javascript的核心组成部分
  • python 解析算法
  • javascript中继承
  • 个人所得税完税证明
  • 随申办如何缴纳社保
  • 华为税务筹划情况
  • 营改增后租金如何交税
  • 国家税务总局绵阳市税务局网站
  • 财税专业全称叫什么
  • 税务局看场地要给红包吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设