Du bist nicht angemeldet.

Werbeanzeige

1

24.11.2020, 20:28

OpenGL3: Diffuse lighting

Hi,

nach dem mein Ambient Light jetzt funktioniert, ist der nächste Schritt diffuses, gerichtetes Licht. Laut Beschreibung braucht mein Modell dafür Normal Vectors - die es aber nicht hat, weil ich nur Triangle-Arrays für die Geometrie habe und sonst nichts.

Gibt es einen eleganten Weg, für jedes dieser Dreiecke der Oberfläche die Normal Vectors nachträglich zu erzeugen, so dass sich das Modell vernünftig beleuchten lässt?

Danke!

Schrompf

Alter Hase

Beiträge: 1 430

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

2

24.11.2020, 20:44

Per Vertex berechnen oder berechnen lassen und exportieren. Oder live im GeometryShader berechnen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

24.11.2020, 20:56

Wie die Normalen aussehen sollen, hängt davon ab, ob du facetten-artige Oberflächen oder eine glatte Oberflächen haben möchtest. Pauschal gibt es darauf keine Antwort, weshalb du das beim Modellieren berücksichtigen solltest.

4

25.11.2020, 06:45

Beim Modellieren kann ich nichts berücksichtigen, da ich die Datenerzeugung nicht in der Hand habe. Wie sähe es denn für eine facettenartige Oberfläche aus?

Schrompf

Alter Hase

Beiträge: 1 430

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

5

25.11.2020, 08:14

Woher hast Du denn die Daten? Wenn Du fertige Modelle aus dem Internet nimmst, sind da halt meistens Per-Vertex-Normalen dabei. Und allgemein trittst Du mir hier gerade ein bissl denkfaul auf.

Du brauchst für eine Beleuchtung Normalen, wenn die Lichtrichtung eine Rolle spielen soll. Diese Normalen kannst Du live beim Rendern in einem GeometryShader berechnen. Damit hast Du ein Wort, was Du googeln kannst. Die allermeisten Menschen berechnen die Normalen allerdings vorab und reichen sie als zusätzliche Vertex-Attribute gleich in den VertexShader mit rein. Daher sind die meist sogar im Modell schon enthalten und Du musst sie nur mit in Deinen VertexBuffer packen und in der Input Declaration mit angeben, wie auch immer die bei OpenGL heißt. Fang mal an zu googeln, oder turne das OpenGL-Tutorial Deiner Wahl weiter durch, dann kommst Du automatisch da hin.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Jonathan

Community-Fossil

  • Private Nachricht senden

6

25.11.2020, 08:43

Beim Modellieren kann ich nichts berücksichtigen, da ich die Datenerzeugung nicht in der Hand habe. Wie sähe es denn für eine facettenartige Oberfläche aus?


Du stellst hier eine Reihe an sehr grundlegenden Fragen aber mir ist nicht klar woran du eigentlich arbeitest. Es hört sich aber so an, als solltest du einfach mal ein vernünftiges Buch o.Ä. durcharbeiten, damit du zunächst einmal einen Grundüberblick über die Thematik bekommst. Dir hier mit so spezifischen Fragen irgendetwas zusammen zu stückeln wird dich auf Dauer nicht weit bringen, man braucht schon ein vernünftiges Fundament.
Woran arbeitest du denn? Und aus welchen Quellen ist dein bisheriges OGL Wissen?
Lieber dumm fragen, als dumm bleiben!

7

25.11.2020, 10:27

Also dann mal ein paar Details: die Modelle sind Vorlagen für 3D-Drucke. Da hängt es vom Format ab, ob Normale enthalten sind oder nicht. STL hat z.B. welche, diverse andere 3D-Druckformate haben keine, weil eben keine Darstellung vorgesehen ist, sondern nur die Bearbeitung in einer Maschine.

Trotzdem will ich diese Modelle darstellen können - und das nicht nur als Wireframe sondern optional auch als Solid. Und genau für die Fälle, in denen das Format keine Normalen mitliefert, brauche ich halt eine Möglichkeit, die Dinger trotzdem beleuchten zu können, damit da irgend was zu erkennen ist.

David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

25.11.2020, 10:52

Die Normale eines Dreiecks kannst du ganz einfach mit dem Kreuzprodukt zweier normierter Vektoren entlang der Kanten berechnen.

9

25.11.2020, 12:18

Die Normale eines Dreiecks kannst du ganz einfach mit dem Kreuzprodukt zweier normierter Vektoren entlang der Kanten berechnen.


Das klingt doch mal sehr gut - perfekt, Danke!

David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

25.11.2020, 13:00

Beachte, dass die Reihenfolge eine Rolle spielt. Ggf. musst du die Vektoren vertauschen oder das Vorzeichen des Ergebnisses umdrehen. Aber das wirst du dann schon sehen.

Werbeanzeige