在 Frank D Lunas DirectX11 书中,第 356 页,第 9.5.4 节,他有一个方程
(rs, gs, bs) * (as, as, as) + (rd, gd, bd) * (1-as, 1-as, 1-as)
= as(rd, gd, bd) + (1-as)(rs, gs, bs)
其中 * 是组件明智的乘法。
(r, g, b) 是指颜色。
这看起来不正确。它应该是:
as*(rs, gs, bs) + (1-as)(rd, gd, bd)
我假设这是使用源 alpha 的透明度操作。
(rs, gs, bs) * (as, as, as) + (rd, gd, bd) * (1-as, 1-as, 1-as)
展开组件明智的乘法
(as*rs, as*gs, as*bs) + ((1-as)*rd, (1-as)*gd, (1-as)*bd)
分解
as(rs, gs, bs) + (1-as)(rd, gd, bd)
我想这一定是书中的错误。
正如你所写的,我认为等式是错误的。因为*
表示组件明智的乘法:
(rs, gs, bs) * (as, as, as) = as(rs, gs, bs)
(rd, gd, bd) * (1-as, 1-as, 1-as) = (1-as)(rd, gd, bd)
所以:
(rs, gs, bs) * (as, as, as) + (rd, gd, bd) * (1-as, 1-as, 1-as)
= as(rs, gs, bs) + (1-as)(rd, gd, bd)
书上好像有错误。
(rs, gs, bs) * (as, as, as) + (rd, gd, bd) * (1-as, 1-as, 1-as)
= (rs*as, gs*as, bs*as) + (rd*(1-as), gd*(1-as), bd*(1-as))
= as(rd, gd, bd) + (1-as)(rs, gs, bs)
可能是因为分量乘法 (a,b,c)*(d,d,d) 与行向量 (a,b,c) * d 上的简单标量乘法相同?
http://www.wolframalpha.com/input/?i=%28a%2Cb%2Cc%29%28d%2Cd%2Cd%29 http://www.wolframalpha.com/input/?i=%28a%2Cb %2Cc%29+d
只是猜测