【问题标题】:How do I convert my point light into an oval/ellipse?如何将点光源转换为椭圆形/椭圆形?
【发布时间】:2021-11-19 12:19:47
【问题描述】:

我希望通过具有可以具有不同 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;
}

【问题讨论】:

    标签: c++ opengl glsl 2d lighting


    【解决方案1】:

    用椭圆的半轴将向量除以光源,检查向量的长度是否大于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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多