AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectX - Problem mit Licht bei skalierten Objekten
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX - Problem mit Licht bei skalierten Objekten

Ein Thema von Reddog · begonnen am 4. Sep 2007 · letzter Beitrag vom 14. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#1

DirectX - Problem mit Licht bei skalierten Objekten

  Alt 4. Sep 2007, 19:18
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.
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
Bubblegum

Registriert seit: 8. Sep 2007
57 Beiträge
 
Delphi 2007 Professional
 
#2

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 13. Sep 2007, 14:00
Kann es sein, dass du die Normalen neu berechnet (setzen) nusst?
  Mit Zitat antworten Zitat
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#3

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 09:09
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
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 09:22
Ich habe dunkel in Erinnerung, dass die Normalen gerne normalisiert (d.h. auf Länge 1 gebracht) werden wollen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Bubblegum

Registriert seit: 8. Sep 2007
57 Beiträge
 
Delphi 2007 Professional
 
#5

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 09:46
Dies sollte das Problem lösen!

Setze einfach diesen Renderstate einmal beim intialiseren deiner Engine:

Pd3dDevice.SetRenderState(D3DRS_NORMALIZENORMALS, DWord(true));
  Mit Zitat antworten Zitat
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#6

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 10:57
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.
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 11:52
Bleib bei dem Buch.
Zitat von MSDN:
Enabling this feature causes the system to normalize the vertex normals for vertices after transforming them to camera space, which can be computationally time-consuming.
Normalerweise solltest du die Normalisierung der Normalen selbst durchführen, weil nur du den idealen Zeitpunkt dafür kennst (sobald du genügend Erfahrung gesammelt hast, zumindest ).
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#8

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 12:51
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.
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
Bubblegum

Registriert seit: 8. Sep 2007
57 Beiträge
 
Delphi 2007 Professional
 
#9

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 13:02
Lass es besser drin!!!

Die SDK empfiehlt dies sogar einer Stelle, und er Performanceverlust ist im Vergleich zu irgendwelchen Randerscheinungen vernachlässigbar.
Zitat:
Note In most cases, applications should enable automatic normalization of vertex normals. To do this, set D3DRS_NORMALIZENORMALS to TRUE. If you do not enable this render state, the appearance of the environment map will be drastically different than you might expect.
Gebe dir auch den Tipp auf die Clootie - Header umzusteigen. Diese sind immer sehr schnell aktualisiert und sind näher an MS - dran, was das Arbeiten mit der SDK und sehr guten C++ Büchern erleichtert! Die du bald brauchen wirst, um dein Wissen zu erweitern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#10

Re: DirectX - Problem mit Licht bei skalierten Objekten

  Alt 14. Sep 2007, 17:31
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz