以下声明是有效的HLSL:
float3(300.0f,200.0f,100.0f) % 256.0f
显然te%运算符适用于浮点数?与 fmod 有什么不同? 以下陈述是等效的吗?
fmod(float3(300.0f,200.0f,100.0f), 256.0f)
由于
答案 0 :(得分:1)
我相信,是的。 %运算符记录为here,并定义为处理浮点数和整数。
答案 1 :(得分:0)
我不确定它们是完全相同的,但请不要引用我的信息。 这是我的测试:
const float2 r = float2(
23.1406926327792690, // e^pi (Gelfond's constant)
2.6651441426902251); // 2^sqrt(2) (Gelfond–Schneider constant)
return frac( cos( fmod( 12345678., 1e-7 + 256. * dot(p,r) ) ) );
//return frac( cos( 12345678.% (1e-7 + 256. * dot(p,r)) ) );
第二个版本在映射为纹理时返回视觉模式,而第一个版本看起来纯粹是随机的。 也许我误解了一些事情,但在这种情况下,他们似乎肯定采取了不同的行动。
也许我只是考虑了这个测试,但我认为我会提到它,因为它看似相关。
编辑:此代码源自此处 Can I generate a random number inside a pixel shader?似乎。{/ p>