如何将点光源转换为椭圆/椭圆?



我希望通过具有不同的x和y值的vec2半径将我当前的圆形光变成椭圆。有没有办法做到这是基于我目前的代码片段着色器?

uniform struct Light
{
vec4 colour;
vec3 position;
vec2 radius;
float intensity;
} allLights[MAX_LIGHTS];
vec4 calculateLight(Light light)
{
vec2 lightDir = fragmentPosition.xy - light.position.xy;
float lightDistance = length(lightDir);
if (lightDistance >= light.radius.x)
{
return vec4(0, 0, 0, 1); //outside of radius make it black
}
return light.intensity * (1 - lightDistance / light.radius.x) * light.colour;
}

将向量与光源按椭圆的半轴线相除,并检查向量的长度是否大于1.0:

if (length(lightDir / light.radius) >= 1.0)
return vec4(0, 0, 0, 1); //outside of radius make it black
return light.intensity * (1 - length(lightDir / light.radius)) * light.colour;

最新更新