Но pow (0, 2.0) дает 0
. Кажется, что любой показатель с плавающей запятой дает 1, а целочисленные - 0. 0. 1003 *
Я использую 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();
}
}