Jestem w trakcie pisania od podstaw gry izometrycznej i chciałbym wiedzieć, jak / czy mogę dodać światła i cienie.
Kod, który do tej pory mam, można znaleźć tutaj , ale powinno być wystarczające, aby wiedzieć, że w tej chwili mapy to proste trójwymiarowe tablice wartości prawda / fałsz . Oto ujęcie środowiska:
Gdyby to była jednowarstwowa mapa tilem, byłaby prosta. Rozumiem prosty wymagany raycasting w 2d.
Jednak biorąc pod uwagę, że moje mapy mają wiele poziomów wysokości, a także obszary przypominające jaskinie, tak naprawdę nie wiem, jak zrobić przekonujące cienie. Być może rozwiązanie na blok jest jedynym realistycznym sposobem?
Odpowiedzi:
Czy mogę polecić uruchomienie cieni 2d, nawet jeśli jest to tylko poziom, na którym aktualnie znajduje się twój awatar. Łatwiej będzie zacząć patrzeć na kod w ten sposób i uruchomić go.
Zaimplementowałem cienie w mapach kafelkowych 2D na kilka sposobów. Jedna metoda rzucania cienia opisana przez Erica Lipperta w Microsoft działa całkiem dobrze.
Innym sposobem, który zrobiłem sam po raz pierwszy, gdy spojrzałem na tego rodzaju rzeczy, było ortogonalnie zamiatanie widocznych płytek i krawędzi płytek i generowanie krawędzi (i może iirc rundy) opisujących scenę w najniższej liczbie krawędzi. Następnie możesz wyciąć ukryte krawędzie i utworzyć dowolne niestandardowe funkcje cieniowania, takie jak wpuszczone cienie, jeśli chcesz pokazać odrobinę ściany. Następnie utwórz swoją geometrię cienia (rzutowe rzucanie cienia?) I wyrenderuj ją nad górą.
Ale jeśli spróbuję przenieść ten pomysł na 3d, łatwiej będzie to zrobić w 3d. Chociaż metodę opisaną przez Erica Lipperta można przypuszczalnie przekonwertować na 3d. Ale myślę, że przekonasz się, że robienie tego w 3D jest drogie. Być może spójrz również na kod źródłowy Brogue . Może mieć bardziej wydajną implementację widoczności / rzucania cieni.
Powodzenia.
źródło