28 lines
931 B
HLSL
28 lines
931 B
HLSL
sampler2D inputTex : register(S0);
|
|
float2 mousePos : register(C0);
|
|
float2 uiSize : register(C1);
|
|
float lightSize : register(C2);
|
|
float intensity : register(C3);
|
|
float4 lightColor : register(C4);
|
|
|
|
static const float PI = 3.14159265f;
|
|
|
|
float4 main(float2 uv : TEXCOORD) : COLOR
|
|
{
|
|
//UI的源颜色
|
|
float4 sourceColor = tex2D(inputTex, uv);
|
|
//计算当前UV值的实际尺寸坐标
|
|
float xPos = uv.x * uiSize.x;
|
|
float yPos = uv.y * uiSize.y;
|
|
//计算当前片元和鼠标位置的实际距离
|
|
float distanceMouseFrag = length(float2(xPos - mousePos.x, yPos - mousePos.y));
|
|
//归一化距离(0~1)
|
|
float uniformedDistance = min(distanceMouseFrag / lightSize,1);
|
|
//距离转渐进强度(1~0)
|
|
float intensityFrag = cos(uniformedDistance * PI) / 2.0f + 0.5f;
|
|
//计算线性减淡
|
|
float3 linearDodge = sourceColor.xyz + lightColor.xyz * intensityFrag * intensity * sourceColor.a;
|
|
|
|
return float4(linearDodge, sourceColor.a);
|
|
|
|
} |