POW (0, 2.2) дает 1 в шейдере Pixel HLSL?

, но POW (0, 2.0) дает 0

, кажется, что любой экспонент Float дает 1, в то время как целочисленные показатели дают 0.

Я использую Compiler 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();
    }
}
9
задан pnuts 8 November 2015 в 22:46
поделиться