解释预乘 alpha 的工作原理

2024-03-07

有人可以解释一下,为什么使用预乘 alpha(和修正后的混合函数)渲染看起来与“正常”alpha 不同,而从数学上来说,它们是相同的?

我研究了这篇文章以了解预乘阿尔法:

http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx

作者还说最终计算是一样的:

“查看传统与预乘 Alpha 的混合方程。如果将此颜色格式转换替换为预乘混合函数,您将得到传统混合函数,因此无论哪种方式都会产生相同的最终结果。不同之处在于预乘 Alpha 应用了(source.rgb * source.a) 计算作为预处理,而不是在混合硬件内部。”

我错过了什么吗?那为什么结果不同呢?

neshone


区别在于过滤。

想象一下,您有一个只有两个像素的纹理,并且您正好在两个像素之间的中间对其进行采样。还假设线性滤波。

Schematically:
R|G|B|A + R|G|B|A = R|G|B|A
non-premultiplied:
1|0|0|1 + 0|1|0|0 = 0.5|0.5|0|0.5
premultiplied:
1|0|0|1 + 0|0|0|0 = 0.5|0|0|0.5

注意绿色通道的差异。 过滤预乘 alpha 会产生正确的结果。

请注意,所有这些与混合无关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释预乘 alpha 的工作原理 的相关文章

随机推荐

  • PHP 可选参数 - 按名称指定参数值?

    我知道可以使用可选参数 如下所示 function doSomething do something something doSomething do doSomething do nothing 但假设你有以下情况 function do
  • 如何使用 Hash 标签 Href 刷新制作页面

    我有一个 href 为 news 1930 当我点击此链接时 news页面 它不会刷新页面 它只是将 1930 添加到 URL 末尾 我希望它刷新页面 我使用 标签后面的信息和一些 jquery 在相应的 iframe 中加载该特定文章 当
  • 使用C#执行命令行

    我想做的就是发送一条用 program exe 打开模型的命令 应该超级简单 Ex C Program Files x86 River Logic Enterprise Optimizer 7 4 Developer EO74 exe C
  • 新手 Django 模型错误

    使用 Python 2 7 x Django 1 9 我创建了一个新的超级简单的 Django 骨架项目django admin startproject simple 作为健全性检查 我创建了一个views py文件具有一个简单的视图 该
  • 我应该如何存储和计算二进制代码之间的汉明距离?

    如何有效地存储二进制代码 对于某些固定大小 例如 32 位 可以使用原始类型 但是如果我的二进制代码更长怎么办 计算两个二进制代码之间的汉明距离的最快方法是什么 Use std bitset
  • 如何在运行时将方法附加到动态创建的 C# 类型?

    我一直在使用一个内部数据访问库 该库将 XML 有效地传递给一个存储过程 该存储过程返回 XML 我对此无能为力 我尝试让 ActiveRecord 获得批准 但我的请求被拒绝 但是 使用以下位置提供的优秀代码http blog bodur
  • 我们可以在 CloudWatch 中为 Sagemaker 笔记本实例生成自定义日志吗?

    CloudWatch 默认记录 Sagemaker 实例的日志 例如内核启动 内核关闭 笔记本保存等 不过 我想列出一些自定义日志以及这些默认日志 请看一下所附图片 Sagemaker 笔记本实例的默认日志在 CloudWatch 中的外观
  • WPF 文本框绑定到小数点尊重文化

    我已将 TextBox 绑定到 Decimal 我的问题是 绑定使用美国数字标准 使用点进行小数分隔 1 5 我的系统是德语系统 并配置为使用逗号作为小数分隔 1 5 我需要 TextBox 绑定来显示并使用逗号而不是点来分隔小数 如何获得
  • Django 迁移错误:您无法更改 M2M 字段或从 M2M 字段更改,也无法在 M2M 字段上添加或删除 through=

    我正在尝试将 M2M 字段修改为外键字段 命令 validate 显示没有问题 当我运行syncdb 时 ValueError Cannot alter field xxx into yyy they are not compatible
  • https://service.oneaccount.com/onlineV2_B/OSV2?event=login&pt=3 上的 QtNetwork SSL 握手错误

    当我使用 QT 应用程序下载此页面时 使用 QNetworkAccessManager gt get url 我在回复对象中收到网络错误 QNetworkReply NetworkError 错误字符串是 SSL 握手失败 但是 sslEr
  • 使用 PHP 生成 SNMP 陷阱

    我正在拼命寻找一种从 PHP 生成 SNMP 陷阱的方法 我知道使用 snmpget 的内置方法 但我无法弄清楚如何发送 SNMP 陷阱 有人知道它的类 代码片段吗 除了使用 exec 调用 cli 工具之外 在网络上搜索没有找到任何其他内
  • 条件切换的问题

    下面的示例摘自http php net manual de control structs switch php http php net manual de control structures switch php
  • C 警告冲突类型

    我的代码是 void doc mycode return 我的警告是 conflicting types for doc 任何人都可以解决它 在 C 中 如果调用函数时没有原型 则假定返回一个int并采用未指定数量的参数 然后 当您稍后将函
  • 使用 Azure 中的 ASP.NET Core 将用户会话保存在 Redis 中

    我正在使用 redis 缓存来保存项目中的一些内容 我正在使用 Azure WebApp 当我在预生产环境与生产环境之间进行交换时 用户会话丢失 他需要在我的网页中重新登录 我正在使用 Identity 3 0 和 UseCookieAut
  • React-router v4 一次显示多个路由

    我遇到一个问题 我使用react router dom 的路由同时显示所有路由 因此 当我渲染我的应用程序组件和包含路由的开头时 我会看到每个路由的页面彼此重叠 所以它看起来像这样 现在开始这一切是如何开始的 这是我的 index jsx
  • MySQL 17.6m rows (1.2 GB)全表更新太慢

    我有一张有 17 6m 行的表 CREATE TABLE tmp hist ti int 11 DEFAULT NULL cip6 varchar 15 DEFAULT NULL date varchar 20 DEFAULT NULL f
  • 如何使用案例类将简单的 DataFrame 转换为 Spark Scala DataSet?

    我正在尝试将 Spark 中的示例中的简单 DataFrame 转换为 DataSet https spark apache org docs latest sql programming guide html https spark ap
  • 给定 RGB 值,在数据库中找到最接近匹配的最佳方法是什么?

    我有一个 RGB 值 如果它不存在于我的数据库的颜色表中 我需要找到最接近的颜色 我正在考虑比较所有值并找出差异 红色 绿色和蓝色 然后取平均值 最低平均偏差应该是最接近的颜色 在我看来应该有更好的方法 有任何想法吗 将颜色视为 3 维空间
  • iPhone:内存泄漏分析器是否存在?

    有没有像 iPhone 应用程序的内存分析器这样的东西 我想知道任何时候内存中有哪些对象 您将需要使用 Instruments 来分析您的应用程序 您可以使用不同的模板运行您的应用程序 在 XCode 中 选择运行 gt 使用性能工具启动
  • 解释预乘 alpha 的工作原理

    有人可以解释一下 为什么使用预乘 alpha 和修正后的混合函数 渲染看起来与 正常 alpha 不同 而从数学上来说 它们是相同的 我研究了这篇文章以了解预乘阿尔法 http blogs msdn com b shawnhar archi