Hallo zusammen,
ich habe ein Programm geschrieben, welches eine 2D "Karte", z.B. eines Labyrinths, in eine (Pseudo-)3D-Umgebung umwandelt, in der man sich frei bewegen kann. Ich verwende dabei keine Zusätze wie Genesis3D oder ähnliches. Nachdem ich noch einige Soundeffekte eingefügt habe funktioniert das ganze auch schon recht gut und man fühlt sich wie in einem (zugegebenermaßen schlechten) Computerspiel. Um die Wirkung zu steigern habe ich statt einfacher Farben (z.B. Grau für Wand) einen Algorithmus eingefügt, der die Farben für eine bessere Tiefenwirkung manipuliert. Viel besser ist der Effekt natürlich noch, wenn man statt einfacher Farben Texturen verwendet.
Das ganze funktioniert bei mir im Moment so:
Delphi-Quellcode:
...Canvas.Brush.Bitmap:=[TEXTUR-BITMAP]
...Canvas.FloodFill(...); oder Canvas.FillRect(...);
Dabei ergeben sich aber zwei Probleme. Zum einen verändert sich die Position der Pattern-Textur auf dem Gegenstand beim Bewegen mit (Wenn man z.B. an einer Wand mit einem Symbol darauf vorbeigeht würde immer nur den Teil des Symbols sehen, der noch vor einem liegt, bei meiner Methode zu zeichnen fängt die Textur von Anfang neu an, man würde also den Beginn des Symbols sehen, aber nicht das Ende). Dieses Problem möchte ich aber erst einmal zurückstellen, ich erwähne es nur, weil es eventuell mit dem anderen Problem zusammenhängt.
Zweitens müssten die Texturen ja eigentlich in der Tiefe "kleiner" werden (Seht euch mal
dieses und
dieses Bild an, dann versteht ihr denke ich, was ich meine) Ich suche also einen Weg, wie ich eine Wandtextur so bearbeiten kann, dass ich sie auf meine vorberechneten Formen auftragen kann und dabei eine
solche Tiefenwirkung haben.
Beim Suchen bin ich auf das Stichwort "inverses Mapping" im Zusammenhang mit folgender Formel gestossen:
u = (u/z)/(1/z)
v = (v/z)/(1/z)
Ich verstehe allerdings nicht so ganz, was mir das sagen soll. Hat jemand vielleicht einen Tipp für mich?
Vielen Dank für die Hilfe!