[英]Metal shader language: Why their is difference in result of similar instructions?
在金属着色器下,为什么这两条线不起作用:
float b = (color.rgb * float3(1,1.1,0.9)).x;
和
float b = dot(color.rgb, float3(1,1.1,0.9));
这些是不同的操作。 *
是逐分量乘法,而dot
是向量点积。
假设color
定义为float3(0.6f, 0.7f, 0.8f)
。
然后第一个表达式(color.rgb * float3(1.0f, 1.1f, 0.9f)).x
首先将向量按分量相乘,产生向量(0.6, 0.77, 0.72)
,然后取第一个分量( x
),所以结果是0.6
。
第二个表达式dot(color.rgb, float3(1.0f, 1.1f, 0.9f))
是向量的分量乘积的总和(通常称为点积或内积),因此结果是(0.6 * 1.0 + 0.7 * 1.1 + 0.8 * 0.9)
,恰好是2.09
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.