![]() |
DirectX - Problem mit Licht bei skalierten Objekten
Hallo,
ich hab ein Problem mit Licht in Direct3D 9. Es funktioniert grundsätzlich, allerdings sind flache Sachen heller. Also zum Beispiel ein Würfel der entlang der y-Achse herunterskaliert ist ist von oben gesehen viel heller, als ein normaler Würfel. Ich hab keine Ahnung woran das liegen könnte. Ich speichere für meine Objekte zwei Vektoren für Ausrichtung: Direction und Up, außerdem einen Scale Vektor. Damit bau ich die World_Matrix zusammen. Die Matrix ist an sich auch richtig und die Objekte werden korrekt dargestellt. Das Licht, das ich verwende ist Directional. Aber es ist ähnlich mit Point Light. Weiß da jemand vielleicht Rat? Danke, Reddog. |
Re: DirectX - Problem mit Licht bei skalierten Objekten
Kann es sein, dass du die Normalen neu berechnet (setzen) nusst?
|
Re: DirectX - Problem mit Licht bei skalierten Objekten
Hmm, das ist ein guter Vorschlag.
Ich hab bis jetzt noch nie mit Licht gearbeitet. Kann man das einfach so? Bzw. das Problem tritt ja nach der Transformation auf. Dann kann ich aber doch nicht mehr die Normalen verändern... Naja ich such mal da nach weiteren Hinweisen. Danke auf jeden Fall. Erste Antwort :) |
Re: DirectX - Problem mit Licht bei skalierten Objekten
Ich habe dunkel in Erinnerung, dass die Normalen gerne normalisiert (d.h. auf Länge 1 gebracht) werden wollen.
|
Re: DirectX - Problem mit Licht bei skalierten Objekten
Dies sollte das Problem lösen!
Setze einfach diesen Renderstate einmal beim intialiseren deiner Engine: Pd3dDevice.SetRenderState(D3DRS_NORMALIZENORMALS, DWord(true)); |
Re: DirectX - Problem mit Licht bei skalierten Objekten
Wow, das ging so einfach :(
Vielen Dank für die Hilfe, hab schon fast die Hoffnung aufgegeben. Ich befürchte mein tolles "DirectX9 in Delphi" Buch fliegt bald zum Fenster raus. In dem ganzen Licht-Kapitel stand nix von D3DRS_NORMALIZENORMALS. Sehr erleichtert, Reddog. |
Re: DirectX - Problem mit Licht bei skalierten Objekten
Bleib bei dem Buch.
Zitat:
Du kannst unter Umständen übrigens die Skalierung der Normalen auch im Vertex-Shader berücksichtigen und musst sie dann eventuell nicht normalisieren. Du kannst zum Beispiel auch das Licht skalieren (!), d.h. eine Skalierung pro Licht und Objekt durchführen statt eine pro Vertex. |
Re: DirectX - Problem mit Licht bei skalierten Objekten
Man sollte auf sowas zumindest hinweisen...
Naja, ich werde das echte 3D-Licht wohl ohnehin nicht zu oft einsetzen. Ich schreibe an einer Engine für mein Spiel. Da ich bis jetzt nur 2D gemacht habe und die Engine jetzt auf 3D erweitern will, war das einfach mal interessant sich Licht anzugucken. So wie ich das aber verstehe, sollte man möglichst wenig direkt so ausleuchten. Auf jeden Fall Danke, Reddog. |
Re: DirectX - Problem mit Licht bei skalierten Objekten
Lass es besser drin!!!
Die SDK empfiehlt dies sogar einer Stelle, und er Performanceverlust ist im Vergleich zu irgendwelchen Randerscheinungen vernachlässigbar. Zitat:
|
Re: DirectX - Problem mit Licht bei skalierten Objekten
Man sollte natürlich auch wissen, was man tut. Das DirectX SDK erwähnt dies speziell für Cubic Environment Mapping, nicht allgemein, weil dieses Feature in Direct3D (wenn man es nicht selbst implementiert über Shader) ohne wie erwähnt nicht richtig funktioniert.
Du kannst bei Gelegenheit ja mal in einer großen Szene testen, wo der Performance-Unterschied liegt zwischen aktivierter und deaktivierter Normalisierung. Wenn du keine Fixed-Function-Pipeline mehr zur Verfügung hast, dürftest du ohnehin keine Wahl mehr haben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz