位置: 编程技术 - 正文

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

  • 个人所得税应纳税额怎么计算
  • 土地使用税的纳税义务人
  • 股权置换税收
  • 差额征收如何做账
  • 待报解预算收入计入什么科目
  • 先付款后签合同 法律效力
  • 更改开票信息需要多久
  • 公司买的微波炉计入什么科目
  • 如何判断会计政策变动
  • 政府补贴在企业怎么申请
  • 资产负债表本期盈余为什么是负数
  • 房产报废手续
  • 公司债券投资的优缺点
  • 计划成本法委托加工物资例题
  • 非广告公司可以开广告费发票吗?
  • 车间报销费用的会计分录
  • 某企业月末由仓库转来发料凭证汇总表
  • 劳务报酬2019
  • 货到票未到的会计账务处理
  • 无偿取得土地使用权的会计分录
  • 土地收储的含义
  • 筹建期发生的费用是放在那个科目
  • 当月有进项税额转出怎么结转未交增值税
  • win11任务管理器怎么没有了
  • win10播放视频软件
  • 系统远程桌面连接怎么用
  • 承兑汇票无法兑现的原因
  • 详解php匿名函数
  • 以股权出资成立公司的模板
  • mmdetection ValueError: need at least one array to concatenate解决方案
  • 【小沐学C++】C++ MFC中嵌入web网页控件(WebBrowser、WebView2、CEF3)
  • javascript速成
  • 设置cmd命令
  • php eval绕过
  • 递延所得税资产和所得税费用的关系
  • 技术转移转化是干什么的
  • 委托加工业务的组成计税价格
  • 金税盘技术维护费每年都减免么
  • 奖金如何做账会计分录
  • 发票上一定要盖章吗
  • file文件对象
  • 购销合同印花税税率
  • 企业收到投资款应贷记什么账户
  • 土地使用税是新征税吗
  • 增值税附加税的税收优惠政策
  • 社保和公积金个人和单位缴纳比例
  • 资产减值损失科目借方增加还是减少
  • 垃圾处理费如何做账
  • 不动产进项税额抵扣从什么时候开始
  • 公司投资者如何避免风险
  • 疫情防控重点保障企业名单
  • 企业的银行转账多久到账
  • 票据贴现怎么入账
  • 长期股权投资全部亏损汇算清缴怎么填
  • 应付款多付了怎么入账
  • 继续教育专项扣除标准是多少
  • 投资性房地产公允价值小于账面价值
  • 会计调账情况模板
  • 私营企业固定资产法律制度
  • sql汇总查询
  • 用Windows Server Backup搞定服务器备份
  • mac如何回复系统
  • linux gunzip
  • linux中安装telnet
  • 支持iphone
  • CentOS 6.x 到 CentOS 7 的升级过程
  • 怎么判断电脑windows几
  • win10预览版好吗
  • Win7中TrustedInstaller.exe进程占用内存高该怎么解决?
  • android ui绘制
  • jquery九宫格抽奖
  • Android游戏开发读后感
  • 推荐一篇故事并说明理由
  • vs2008安装教程
  • 获取服务器信息失败mc
  • js基础
  • 对税务领导的批示怎么写
  • 个体户需要报个税的综合所得吗
  • 税控盘的口令密码是什么
  • 银行存款利息收入现金流量表计入哪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设