gpt4 book ai didi

math - pow(0, 2.2) 在 hlsl 像素着色器中给出 1?

转载 作者:行者123 更新时间:2023-12-04 04:13:12 25 4
gpt4 key购买 nike

但是 pow(0, 2.0) 给出 0

似乎任何浮点指数都给出 1,而整数指数给出 0。

我正在使用 DirectX 9 和 hlsl 编译器“D3DCompiler_43.dll”。
在 Nvidia 和 Ati 卡上确认了这一点。

我很迷惑!
这是某种已知的行为或错误吗?

为了说明效果,请尝试以下简单的测试着色器:

// Test shader demonstrating strange pow behaviour
// when brightness becomes 0 resulting color will jump to white

float4x4 WorldViewProjXf : WorldViewProjection < string UIWidget="None";>;

float Brightness
<
string UIName = "Brightness";
float UIMin = 0;
float UIMax = 1;
> = 0;


struct VS_Input
{
float4 position : POSITION0;
};

struct VS_Output
{
float4 position : POSITION0;
};

VS_Output Vertex_Func( VS_Input in_data )
{
VS_Output outData;
outData.position = mul(in_data.position, WorldViewProjXf);
return outData;
}

float4 Fragment_Func( VS_Output in_data ) : COLOR
{
return pow(Brightness, 2.2);
}

technique Main
{
pass p0
{
VertexShader = compile vs_3_0 Vertex_Func();
PixelShader = compile ps_3_0 Fragment_Func();
}
}

最佳答案

查看 HLSL 文档,pow(x, y)似乎直接实现为 exp(y * log(x)) .自 x=0在您的问题中,再次查看文档 log(x) == -INF .似乎是 y 的值只要它是正数且大于零,此时应该无关紧要。

您可能会不小心比较 pow(0.0, 2.0) == 0.0pow(0.0, 0.0) == 1.0 .这是我对正在发生的事情的最佳猜测。

log(0)=-INF reference

pow = exp(y * log(x)) reference

关于math - pow(0, 2.2) 在 hlsl 像素着色器中给出 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com