![]() |
DirectX-Forum - Beitragsübersicht - |
|
Thema | DX8: Lichter in DirectX8 |
Von |
(Nick-)Name |
Datum |
11. Juni 2011 um 00:39:08 |
Frage |
Hi wie der Titel schon sagt versuche ich in DirectX8 Lichter einzufügen dabei habe ich die Projektdatei "Wellen" von "Klaus Neumann" aus den Tutorials dieser Webseite als Grundlage genommen und hab ein Licht definiert, diesem Eigenschaften zugewiesen und es an die SetLight Methode des Device weitergereicht und anschließend der Devicemethode EnableLight true übergeben Aber es ändert sich nichts Was hab ich vergessen? LG |
|
Antwort: |
Von |
Michael Kenzel |
E-Mail |
dot@aon.at |
Datum |
15. Juni 2011 um 00:30:25 |
Antwort |
Zitat: | Nur wie man die berechnet, wusste ich nicht. |
Die Normale auf ein Dreieck kannst du über das
Kreuzprodukt zweier Kantenvektoren berechnen. Die Vertexnormale kannst du dann z.B. als Mittel der Normalen aller Dreiecke die sich den Vertex teilen berechnen. Ein sehr gängiger Algorithmus schaut dabei so aus: 1. Alle Vertexnormalen zu 0 initialisieren 2. Alle Dreiecke durchlaufen und deren Normale berechnen: (B - A) x (C - A) wobei A, B, C die Eckpunkte sind (Achtung auf die Reihenfolge, wenn die verkehrt ist zeigt die Normale in die verkehrte Richtung). Die so berechnete Flächennormale (nicht normalisiert!) zur Normale aller beteiligten Vertices addieren. 3. Alle Vertices durchlaufen und die Vertexnormalen normalisieren. Bei dieser Vorgehensweise spart man nicht nur haufenweise Normierungen sondern erreicht auch dass die resultierenden Normalen automatisch nach den Flächeninhalten der beteiligten Dreiecke gewichtet sind (da die Länge des Kreuzproduktes proportional zur Dreiecksfläche ist).
Kleine Anmerkung: Die Begriffe Normale und normalisieren haben nichts miteinander zu tun. Eine Normale ist ein Vektor der normal auf irgendwas steht (also im rechten Winkel drauf). Unter normalisieren versteht man einen Vektor mit der Inversen seiner Länge zu skalieren sodass er dann Länge 1 hat. Ein normalisierter Vektor ist ein Vektor mit Länge 1. Manche Leute bringen das gerne durcheinander und dann ist obige Erklärung vermutlich sehr verwirrend.
Mein VB ist leider zu eingerostet als dass ich dir was hilfreiches bezüglich des andren Fehlers sagen könnte. Vielleicht ist ja irgendeines der beteiligten Objekte Nothing oder irgendwelche Größenangaben stimmen nicht!? |
|
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|