在金属着色器下,为什么这两行的工作原理不同:
float b = (color.rgb * float3(1,1.1,0.9)).x;
Run Code Online (Sandbox Code Playgroud)
和
float b = dot(color.rgb, float3(1,1.1,0.9));
Run Code Online (Sandbox Code Playgroud)
这些是不同的操作。*是分量乘法,而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。
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |