Frage

Ich beginne ein Spiel-Projekt, die Zeichen können in dunklen Bereichen verstecken. Versteckt in einer dunklen Ecke sollte es schwieriger für andere Zeichen, die Sie zu sehen.

Was ich brauche, ist ein Weg, um zu berechnen, wie die Lichtverhältnisse sind, wo der Charakter befindet.

Das Ideal wäre, eine haben,

double getLightFactor(GameCharacter observer, GameCharacter target)

da ich es annehmen könnten Lichtverhältnisse sein, wo das Licht so fällt, dass verschiedene Seiten des Ziels durch unterschiedliche Mengen von Licht getroffen werden. Aber ich würde gerne für begleichen

double getLightFactor(GameCharacter target)

das Licht für einen bestimmten Charakter zu erhalten, unabhängig davon, wo Sie oder sogar beobachten

double getLightFactor(int x, int z)

bekommen nur das Licht in einem bestimmten Kartenpunkt im Gelände.

Das Verfahren muß berücksichtigen, die Lichtverhältnisse während des Spiels ändern können, aber da es drehen basierte einige schweren Berechnungen erlaubt werden können. Ich beabsichtige, es möglich zu machen, Taschenlampen zu verwenden, damit sie ebenfalls berücksichtigt werden müssen (aber sie konnten separat modelliert und gehandhabt werden).

Ich werde Ogre3D verwenden meine Szene zu handhaben, aber ich werde glücklich generische Lösungen oder auch Lösungen für andere Motoren übernimmt (meine Wahl des Motors ist nicht in Stein gemeißelt).

Ideen, Papiere oder wirklich etwas relevant sind sehr willkommen!

War es hilfreich?

Lösung

Sie könnten nur die Szene aus der Sicht des Betrachters auf einen Offscreen-Puffer (auch in einer eher geringen Auflösung) machen in Kontoeinstellungen der aktuellen Lichts nehmen. Dann könnte man eine mittlere Helligkeit Wert um die Mitte des Zielzeichens zu berechnen.

Ich weiß nicht, über den Ogre3D Motor, aber das soll eine eher generische Art und Weise sein, Ihr Problem zu umgehen (es ist nur die Szene aus einem anderen Blickwinkel zu machen, nachdem alle ...)

Andere Tipps

Oh Junge. Dies hängt viel von dem Motor. Ich kann Ihnen jetzt sagen, dass Sie die zweite Option wollen.

Wie funktioniert Beleuchtung funktioniert? Ist es dynamisch oder statisch? Nehmen wir an, es ist eine Kombination aus beidem.

Für die statische Beleuchtung, überprüfen Sie die lightmap in der Nähe. Es ist entweder Vertex basiert oder eine Textur, so oder so, können Sie es auf ein paar Punkte kosten können in der Nähe und im Durchschnitt ihnen. Schauen Sie, wie der Motor die Beleuchtung für die Modelle berechnet, graben in den Grafik-Code und sehen, wo die Daten tatsächlich herkommt, können Sie die gleiche Quelle verwenden können. Einige Spiele haben volumetrische Beleuchtung Informationen, Quake 2 tut dies auf einer Pro-Blatt Basis in der BSP-Baum (leicht zu überprüfen) und Quake 3 hat volumetrische Texturen (auch leicht zu überprüfen).

Dann müssen Sie die dynamischen Lichter hinzuzufügen. Eine Möglichkeit, dies zu tun ist durch die Strahlen von dem Spieler Schießen (wahrscheinlich ein paar verschiedenen Strahlen sicher sein, aus verschiedenen Teilen des Spielers) in Richtung der Lichtquelle. Zählen Sie, wie viele sind betroffen, und fügen Sie ein wenig Ihre Nummer für jeden, je nachdem, wie weit das Licht ist. All anständiger Game-Engines hat ein Verfahren für „shoot ray und sieht, was es trifft“, es ist, wie KIs tut Sichtlinie und wie Sie herausfinden, was Kugeln getroffen und was passiert, wenn man in die Wand laufen. Sie nicht zu viele Strahlen schießen zu weit, weil es langsam sein könnte.

Sie würden nicht zu diesem Wert neu zu berechnen haben oft, man könnte es tun, wenn eine neue Lichtquelle erzeugt wird, und dann jede Sekunde oder so.

, um die Komplexität der Umgebung Je könnten Sie betrüge und einen 2D-lightmap auf dem Gelände überschichtet verwenden. Jede Zelle würde einen Lichtintensitätswert auf der Grundlage der in der Nähe Lichtquellen. Es würde schnell sein, auch für sich bewegende Objekte zu berechnen, und zwar schnell, um auf die „Dunkelheit“ von einem Ort zu bestimmen.

Sie müssen möglicherweise zu „Stempel“ Formen auf sie einfache Box oder Kreis-Algorithmen von der Art der Beleuchtung ab, die Sie haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top