Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

06.09.2003, 14:35

Beleuchtung bei Dreiecken

Hi!

Ich habe ein Feld (vergleichbar mit einem Schachbrett) auf das ich Texturen lade. Nun kann der Benutzer Punkte auswählen und nach oben(y-Achse) ziehen. Das Feld wird dann neu gezeichnet und es entsteht dann eine kleine Pyramide auf dem Feld, weil ein Punkt des Feldes ja nach oben gezogen wurde.
Ich schalte das Licht ein (directional) , setzte Material und lade Texturen. Normalerweise müsste man die kleine Pyramide sehen, weil deren Flächen das Licht anders reflektieren sollten als die Flächen des Feldes. Doch man sieht nichts.
Was mache ich falsch?


Danke,
Johannes

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.09.2003, 14:38

Du musst die Normalenvektoren der Vertizes anpassen. Nur auf die kommt es bei der Beleuchtung an, nicht auf den Normalenvektor der Dreiecke.

Anonymous

unregistriert

3

06.09.2003, 16:22

Das bedeudet doch, dass ich Gouraud-Shadding verwenden muss. Also bei der initialisierung der Szene einfach den Renderstate setzen. Habe ich auch ausprobiert, es funktioniert aber immer noch nicht.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

06.09.2003, 16:38

Es führt kein Weg darum herum, die Normalenvektoren der Vertizes anzupassen. Gouraud-Shading ist standardmäßig aktiviert.

Anonymous

unregistriert

5

06.09.2003, 18:37

im Vertexformat lege ich ja einen Normalenvektor fest. Also muss ich nach jeder Bewegung des Feldes diese Normalenvektoren berechnen und setzte? Für die Berechnung muss ich die normalisierten Face-Vektoren der Dreiecke addieren und deren Mittelwert berechnen. Dann habe ich den Vertexnormalvektor, oder? Woher bekomme ich aber die Face-Vektoren der Dreiecke?
(Gibts zu dem Thema vielleicht irgendeinen Link/Tutorial?)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

06.09.2003, 18:52

Richtig. Den Normalenvektor eines Dreiecks erhältst Du, indem Du vom Punkt 1 eine Linie nach Punkt 2 ziehst (Verbindungsvektor) und eine von Punkt 1 nach Punkt 3. Die Verbindungsvektoren normalisierst Du. Dann berechnest Du deren Kreuzprodukt. Das Ergebnis ist der Normalenvektor.

Anonymous

unregistriert

7

06.09.2003, 20:49

Danke!
Und Glückwunsch zu dem sehr guten Buch! (Das vorallem nicht die Hälfte der Seiten mit Einführung in C++ und WinAPI verschwendet!)

Werbeanzeige