繁体   English   中英

金属着色器语言:为什么它们在类似指令的结果上有所不同?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM