Je fais un jeu en mosaïque en java et je veux faire une carte légère.Faire un cercle dans une matrice (Carte de lumière de jeu basée sur des tuiles)
J'ai quelques problèmes. J'ai le tableau lightmap qui a placé des lumières qui affectent le tableau. Les lumières émettent en forme de cercle. Cela semble correct jusqu'à présent mais ce n'est pas exactement ce que je voulais.
Voici mon code à ce jour:
for(float i = 0; i < strength + 1; i++){
for(double u = 0.0f; u < 360; u += 0.5){
double angle = u * Math.PI/180;
int x2 = (int)(x + i * Math.cos(angle));
int y2 = (int)(y + i * Math.sin(angle));
if(map[y2][x2] > 1 - 1/i)
map[y2][x2] = 1 - 1/i;
}
}
Résultat:
Comme vous pouvez le voir dans le résultat, il semble que la lumière se développe trop sur le fond côté gauche (x rouge). Comment puis-je réparer ça?
Informations générales:
Force:
Le rayon du chemin parcouru le cours de lumière. Ceci aussi détermine à quel point la lumière sera brillante à chaque tuile de la matrice. La "carte" de tableau est une matrice flottante 2D. Le moteur que j'utilise utilise les valeurs pour le canal alpha. La plage est 0 (complètement transparent) à 1 (complètement opaque).
Solution (Merci à Gene):
for(int x2 = -strength; x2 <= strength; x2++){
for (int y2 = -strength; y2 <= strength; y2++) {
double r = Math.sqrt(x2 * x2 + y2 * y2);
double inv_rad = r <= strength + 1 ? 1/r : 0;
if(map[y + y2][x + x2] > 1 - (float) inv_rad)
map[y + y2][x + x2] = 1 - (float) inv_rad;
}
}
Pouvez-vous ajouter une autre image montrant votre résultat attendu? Et de préférence ayant une seule source de lumière, à la fois pour votre résultat actuel et le résultat attendu. – Gosu