Je suis en train d'écrire un jeu isométrique à partir de zéro, et j'aimerais savoir comment / si je peux ajouter des lumières et des ombres.
Le code que j'ai jusqu'à présent peut être trouvé ici , mais il devrait suffire de savoir qu'en ce moment , les cartes sont de simples tableaux 3D de valeurs vraies / fausses . Voici un aperçu de l'environnement:
S'il s'agissait d'un tilemap à une seule couche, ce serait simple. Je peux comprendre le raycasting simple en 2d qui est requis.
Cependant, étant donné que mes cartes ont plusieurs niveaux de hauteur ainsi que des zones ressemblant à des grottes, je ne sais pas vraiment comment faire des ombres convaincantes pour cela. Peut-être qu'une solution par bloc est le seul moyen réaliste?
Réponses:
Puis-je recommander que les ombres 2D fonctionnent en premier, même si c'est uniquement pour le niveau sur lequel votre avatar est actuellement. Il sera plus facile de commencer à regarder le code de cette façon et de le faire fonctionner.
J'ai implémenté les ombres dans les cartes de tuiles 2d de plusieurs manières. Une méthode de shadowcasting que j'ai trouvée décrite par Eric Lippert chez Microsoft fonctionne assez bien.
Et l'autre façon, ce que j'ai fait moi-même la première fois que j'ai regardé ce genre de chose, était de balayer orthogonalement les carreaux et les bords de carreaux visibles et de générer des bords (et peut-être des coins iirc) décrivant la scène avec le plus petit nombre de bords. Vous pouvez ensuite supprimer les bords cachés et former toutes les fonctions d'ombrage personnalisées telles que les ombres encastrées si vous souhaitez afficher un peu de mur. Créez ensuite votre géométrie d'ombre (projection d'ombre projective?) Et rendez-la par-dessus.
Mais si j'essaye de porter cette idée en 3D, il devient simplement plus facile de le faire en 3D. Alors que la méthode décrite par Eric Lippert pourrait vraisemblablement être convertie en 3D. Mais je pense que vous constaterez que le faire en 3D coûte cher. Jetez peut-être aussi un œil au code source de Brogue . Il peut avoir une implémentation plus efficace pour la visibilité 2D / la projection d'ombres.
Bonne chance.
la source