¿Por qué este código de iluminación solo funciona para luces individuales y se rompe cuando agrego varias luces?

Estoy tratando de crear un motor de juego 2D simple usando lwjgl y java. Pero me quedé atascado durante la programación de la iluminación, porque el código que escribí solo funciona cuando tengo una luz en la escena y no cuando agrego varias. Simplemente no puedo entender por qué, así que decidí preguntar aquí.

Este es el sombreador de fragmentos con el cálculo de iluminación:

#version 330 core

layout (location = 0) out vec4 color;
layout (origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord;

in DATA {
    vec2 tc;
} fs_in;

uniform sampler2D tex;

float map(float value, float min1, float max1, float min2, float max2) {
  return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
}

void main() {
    vec3 lightColor = vec3(1, 1, 1);
    float range = 700;
    float x = 200;
    float y = 200;
    float ambient = 0.1;
    float intensity = 0.8;
    float alpha = 1.0;

    vec3 totalDiffuse = vec3(0.0);

    for(int i=0;i<1;i++){
        alpha = 1-map(distance(gl_FragCoord.xy, vec2(x*i, y*i)), 0.0, range, 0.0, 1.0);
        totalDiffuse += alpha*lightColor;
    }

    totalDiffuse = max(totalDiffuse, ambient);

    color = vec4(totalDiffuse, 1.0) * texture(tex, fs_in.tc);
}

Si ejecuto este código con solo una luz en la escena, es decir, estableciendo las horas en que el bucle for se ejecuta en 1, entonces funciona bien y crea algo como esto:

Pero cuando lo cambio al bucle, por ejemplo, 3 veces, es de esperar que cree 3 luces diferentes, pero en realidad solo aumenta la intensidad de la luz de la primera luz de esta manera:

¿Alguien sabe por qué?

Respuesta 1

Tengo un archivo de propiedades para un proyecto de cliente. Quiero exportar el cliente como jar ejecutable, pero el archivo de propiedades no debe integrarse en este jar. Porque, por supuesto, quiero hacer ediciones, ...

¿Cómo puedo leer un número, cadena o un carácter del archivo? Encuentro muchas formas, pero no sé cómo es el mejor y claro enfoque. Quiero hacer operaciones de entrada / salida como la consola del sistema. YO ...

Tengo una lista de elementos en JList, lo que quiero es arrastrar un elemento a la vez desde JList y soltarlo en una columna en particular, el elemento debe agregarse solo en esa columna.

Estoy creando una aplicación Java RESTAPI Spring Boot que utiliza spark para obtener algunos datos del servidor. Cuando intento convertir del conjunto de datos a la lista, falla. He intentado jdk8 y jdk11 para compilar y ...