位置: 编程技术 - 正文

Android OpenGL ES(二)----平滑着色

编辑:rootadmin

推荐整理分享Android OpenGL ES(二)----平滑着色,希望有所帮助,仅作参考,欢迎阅读内容。

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

直线或者三角形上的每个片段混合后的颜色可以用一个varying生成。我们不仅能混合颜色,还可以给varying传递任何&#;,OpenGL会选择属于那条直线的两个&#;,或者属于那个三角形的三个&#;,并平滑地在那个基本图元上混合这些&#;,每个片段都会有一个不同的&#;。这种混合是使用线性插&#;实现的。要了解它是怎么工作的,让我们首先以一条直线为例开始讲解。

1.沿着一条直线做线性插&#;

假设有一条直线,它有一个红色顶点和一个绿色顶点,我们要从一个向另外一个混合颜色。

在这条直线的左边,每个片段的颜色更多地呈红色;随着向右边前进,那些片段的红色分量逐渐减少,在中间处,它们处于红色和绿色之间;随着与绿色顶点越来越近,片段也就变得越来越绿了。

我们可以看到每种颜色分量都随着直线长度线性缩放。因为这条线段的左侧顶点是红色,而右侧顶点是绿色,它的左端就是%红色,中间是%红色,而右端是0%的红色。

绿色的变化也是一样的。因为左侧顶点是红色,而右侧顶点是绿色的,这个线段的左端就是0%绿色,中间是%绿色,而右端就是%绿色。

一旦我们把这两个颜色叠加在一起,最终就得到一条混合后的直线。

这就是线性插&#;的基本解释。每种颜色的强度依赖于每个片段与包含那个颜色的顶点的距离。

为也计算这些,我们可以用顶点0和顶点1的&#;计算出当前片段对应的距离比。距离比仅仅是0到之间的百分比,0%是左边的顶点,而%就是右边的顶点。当我们从左向右移动,这个距离比例也会从0%向%线性增加。这是几个距离比的例子:

要使用线性插&#;计算实际混合后的&#;,我们可以使用下面的公式:

Blended_value=(vertex_0_value*(%-distance_radio))&#;(vertex_1_value*distance_radio)

这个计算公式是应用于每个分量的,因此,如果我们处理颜色&#;,这个计算就会分别应用在红色,绿色,蓝色和阿尔法分量上,计算的结果合并成一个新的颜色&#;。

让我们用这条直线的例子验证一下这个公式。设vertex_0_value为红色,它的RGB&#;是(1,0,0),设vertex_1_value为绿色,它的RGB&#;是(0,1,0)。计算一下这条线段上几个位置的颜色。

表4-1 线性插&#;公式

位置

距离比

公式

最左端

0%

(vertex_0_value*(1-distance_radio))&#;(vertex_1_value*distance_radio)=((1,0,0)*(%-0%)&#;(0,1,0)*0%)=((1,0,0)*%)=(1,0,0)(红色)

Android OpenGL ES(二)----平滑着色

直线的四分之一处

%

(vertex_0_value*(1-distance_radio))&#;(vertex_1_value*distance_radio)=((1,0,0)*(%-%)&#;(0,1,0)*%)=((1,0,0)*%)&#;((0,1,0)*%)=(0.,0,0)&#;(0,0.,0)=(0.,0.,0)(大红)

中间

%

(vertex_0_value*(1-distance_radio))&#;(vertex_1_value*distance_radio)=((1,0,0)*(%-%)&#;(0,1,0)*%)=((1,0,0)*%)&#;((0,1,0)*%)=(0.5,0,0)&#;(0,0.5,0)=(0.5,0.5,0)(半红半绿)

直线的四分之三处

%

(vertex_0_value*(1-distance_radio))&#;(vertex_1_value*distance_radio)=((1,0,0)*(%-%)&#;(0,1,0)*%)=((1,0,0)*%)&#;((0,1,0)*%)=(0.,0,0)&#;(0,0.,0)=(0.,0.,0)(大绿)

最右端

%

(vertex_0_value*(1-distance_radio))&#;(vertex_1_value*distance_radio)=((1,0,0)*(%-%)&#;(0,1,0)*%)=((1,0,0)*0%)&#;((0,1,0)*%)=(0,1,0)(绿色)

要注意到,任何时候两个颜色的权重加起来都是%。如果红色是%,绿色就是0%;如果红色是%,那绿色就是%。

使用一个varying,我们就可以把任何两种颜色混合在一起。当然,这不只限于颜色;任何其他属性也可以应用插&#;技术。

2.在一个三角形表面混合

当我们只处理两个点的时候,阐明线性插&#;是怎么工作的并不困难;我们知道,从某个颜色的一个顶点到另一个顶点,其比例是从%到0%缩减,所有按比例缩减的颜色合在一起就得到了最后的颜色。

在一个三角形上的线性插&#;也是一样的工作原理,但是现在需要处理三个点和三种颜色。让我们看一个直观的例子:

这个三角形与三种颜色有关联:顶端顶点是青色,左端顶点是红色,右端定点是黄色。让我们把这个三角形按每个顶点衍生出来的颜色进行分解:

就像那条直线一样,每个颜色在接近它的顶点处都是最强的,向其他顶点移动就会变暗。我们同样用比例确定每种颜色的相对权重,但这次要使用的面积的比例,而不是长度。

对于这个三角形内任何给定的点,从那个点向每个顶点所对应的点画一条直线就可以生成三个内部三角形。这三个内部三角形的面积比例决定了那个点上每种颜色的权重。比如,那个点上黄色的强度就取决黄色顶点相对的那个内部三角形的面积。距离黄色顶点越金的点,它的相对三角形越大,在那个点的片段就越黄。

与直线一样,这些权重之和也总是等于%。可以使用下面的公司计算三角形内任何一个点的颜色分量:

Blended_value=(vertex_0_value*vertex_0_weight)&#;(vertex_1_value*vertex_1_weight)&#;(vertex_2_value*(%-vertex_0_weight-vertex_1_weight))

我们已经理解了它在直线上是怎么工作的,在这种情况下,我们就不需要为此举出具体的例子了。原理是一样的,只是这次要处理三个点而不是两个。

看不懂向量算法的可以先看看线性代数,当然两个公式相对来说很简单。要深入学习OpenGL ES涉及到两门课程,开始讲解可能不明显,后面的应用越来越多的时候涉及的课程的知识会越来越多。当然计算更多的是在线性代数,而后面空间的构思会涉及离散数学的图论里面的知识。

下一篇讲解OpenGL程序的基本编程。

Tutorial 8:Scaling Transformation 本文源自:

OpenGL Tutorial: (2) Creating an OpenGL Window 接上文(《OpenGLTutorial:(1)SettingupOpenGLwithVisualStudio》)。创建默认的OpenGL窗口先给出一个能运行的例子,它创建一个默认的OpenGL窗口并给它填色。如果pres

VS配置OpenGL 1.下载glut库glut库地址为:

标签: Android OpenGL ES(二)----平滑着色

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

上一篇:Android OpenGL ES(一)----必备知识

下一篇:Tutorial 8:Scaling Transformation

  • 代收的电费计入什么费用
  • 发票上的收款人负法律责任吗
  • 差旅费住宿专票能否抵扣
  • 合伙企业季度所得税预缴不用纳税调整是吗
  • 城市生活垃圾费是业主出还是物业出
  • 开业前的其他费用
  • 可变现净值与公允价值孰低
  • 企业股东分红所得税税率表
  • 资产负债表存货为负数原因
  • 员工宿舍免征房产税
  • 增值税专用发票电子版
  • 购置一台设备初始费用为60000元,该设备可使用7年,答案
  • 支付拆迁补偿款
  • 营改增对金融服务业税负的影响
  • 发票上传多久可以验旧
  • 个人所得税合并扣税
  • 小规模应税行为扣除额计算
  • 2017年7月1日通用机打发票能不能作为税收凭证?
  • 承包方给发包方付费
  • 小规模纳税人和一般纳税人哪个好
  • 二手车交易公司需要什么资质
  • 购买库存商品收到发票怎样做分录
  • 出售废品收入
  • 民间非营利组织会计制度会计科目
  • 电脑更改工作组后进不了系统
  • 质押已至票据到期日
  • 商业支付时使用
  • 清理系统所有垃圾
  • 商场外面的广告牌叫什么
  • win10启用网络发现保存后又变成了关闭
  • 长期借款利息费用的资本化账务处理
  • 增值税发票半年后能冲红
  • php改编码
  • 售后租回交易的实质是什么
  • visual studio code 调试php方法(图文详解)
  • 非上市员工持股
  • php常用的打印函数
  • 服装制造行业成本占比
  • 建筑企业提供建筑服务适用一般计税方法的,以取得
  • mysql左连接查询 效率
  • mysql 5.7.20 win64 安装及配置方法
  • 高新技术企业研发人员比例要求
  • 顺丰的电子发票是不是只有收到以后能开
  • 工资发放凭证原件指什么意思
  • 外贸企业退税怎么申报
  • 零余额账户用款额度是什么意思
  • 混凝土增值税发票税率
  • 残保金中上年在职职工工资总额
  • 货物赔偿款怎么开票
  • 科技专项资金单独核算原则
  • 利润总额是负数怎么计算利润率
  • 滞纳金比例多少
  • 资本公积的来源和用途
  • 调整其他应付款作为收入
  • 村集体经济组织的银行存款可以向外单位或个人出租出借
  • 按季度报税怎么处理
  • 企业发放职工薪酬的账务处理
  • 行政事业单位支出范围和标准
  • 备品和备件的定义
  • 购进中央空调可以抵税吗
  • 印花税需要计提税金及附加吗
  • 利用pt-heartbeat监控MySQL的复制延迟详解
  • win8系统打开不了软件
  • windows系统中巧用系统中的文件查看有谁用过我们的电脑 查看方法介绍
  • windows恶意软件删除工具怎么安装
  • hp电脑系统win8系统
  • 惠普笔记本win8.1
  • linux系统稳定
  • 有趣的linux命令
  • window10删除自带输入法
  • es6展开符
  • jquery日程安排
  • 简述jquery的实现原理
  • Shell脚本统计文件行数
  • jquery设置图片路径
  • Python 使用requests模块发送GET和POST请求的实现代码
  • 街道税务所职责和任务
  • 应纳税额减征额账务处理
  • 补充协议交印花税嘛
  • 社保申报截止日期每月
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设