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

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

1

19.04.2022, 16:45

Gl-Normals unnötig ?

Hi,

normaler Weise erzeuge ich Normals , oder lade diese aus der Datei. Seit eh und je, jetzt habe ich aber
meine VBO's mitgeteilt keine Normals zu rendern, und überlasse Gl die Arbeit. Fazit es sieht besser aus wenn ich gar keine Normals mehr rendere.
Ist das neu, oder was habe ich da verpasst ?
Danke für Hinweise

Lg
Karsten

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »KahnSoft« (24.05.2022, 23:42)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.04.2022, 14:31

Was heißt das, dass du OpenGL die Arbeit überlässt?

Normalenvektoren sind Teil eines Modells und können vom Modellierer auf verschiedene Weise eingesetzt werden, um das gewünschte optische Ergebnis zu erreichen, z. B. scharfe Kanten oder weiche Oberflächen.

Wenn du die Normalenvektoren aus dem Modell ignorierst und sie stattdessen (mit welchem Verfahren auch immer) generierst oder generieren lässt, dann kannst du nicht sicher sein, dass das gerenderte Modell so aussieht wie der Modellierer es beabsichtigt hat.

In deinem Video kann ich keine gerichteten oder punktförmigen Lichtquellen erkennen, alle Flächen sehen gleich hell aus. Ohne solche Lichtquellen spielen die Normalen keine Rolle.

Jonathan

Community-Fossil

  • Private Nachricht senden

3

22.04.2022, 20:43

Seit eh und je, jetzt habe ich aber
meine VBO's mitgeteilt keine Normals zu rendern, und überlasse Gl die Arbeit. Fazit es sieht besser aus wenn ich gar keine Normals mehr rendere.

Naja, eigentlich solltest du ja deine Shader selber schreiben und in diesen die Normalen verwenden um die Lichtberechnung durchzuführen. Da wird dann eigentlich ziemlich schnell klar, warum die unerlässlich sind.

Man könnte die vermutlich auch im Geometrie-Shader on-the-fly aus den Vertexpositionen berechnen (wenn man einfach immer nur Smooth-Normals haben will), aber ich habe eigentlich noch nie gehört, dass das schneller sei als die Normalen einfach in einen statischen Buffer zu schreiben und direkt zu benutzen. Was man aber schon machen sollte, wenn einen Geschwindigkeit wirklich wichtig ist, ist Normalen nur komprimiert in den Buffer zu schreiben - aber von dem Video ausgehen wären nettere Shadingmodelle (Lichtberechnung mithilfe der Normalen) die dringendere Baustelle.
Lieber dumm fragen, als dumm bleiben!

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

4

23.04.2022, 23:06

Hi,

danke für die Antwort, es war schon klar das Normals die reflexion der Oberfläche beschreiben, lässt man sie über das cross -produkt berechnen , sind diese
halt nie optimal, es entstehen sogar Fehlrichtungen. Gl scheint eine seidige automatische Normalberechnung durchzuführen wenn man diese nicht überträgt.
Die Szene ist ja aus vielen kleineren Objekten zusammengesetzt , und dann sehen die "selbst" berechneten nicht mehr gut aus für die Oberfläche.
Die aus der Datei von 3dsmax schauen auch recht unsymmetrisch in die Welt. Es gibt ja den State GlEnable(GL_NORMALS) der ist also nötig wenn
man diese selber nicht überträgt, und die Szene bekommt insgesamt eine Normalausrichtung die wesentlich besser wirkt als die eigens übertragenen.

Dynamische normal Berechnung zur Laufzeit über CPU oder via Shader meinte ich damit nicht, wie zb bei einem sich drehenden Objekt das dann das Spotlich reflektiert.

Eigentlich könnten doch auch diese Normals immer wie auch der Vertex selbst gleich bleiben. Oder es sei dann das licht steht, und die Normals wandern mit der Eye Position.

Also war nur überrascht das es ohne normal Übertragung nicht wie sonnst gewohnt schwarze Flächen waren das war also GlEnable(GL_Normals) ?

Grüße aus Berlin
Karsten.

Jonathan

Community-Fossil

  • Private Nachricht senden

5

24.04.2022, 13:08

Also, das klingt mir alles nach einer sehr alten OpenGL Version die du da verwendest.

Falls dich die Frage "Wie schaffe ich es, dass meine Objekte schön beleuchtet werden" interessierst, solltest du wirklich anfangen, modernes OpenGL zu verwenden und alle Shader selber zu schreiben. Dann siehst du viel expliziter, was überhaupt passiert und hast viel mehr Kontrolle über das Ergebnis. Die Umstellung wird etwas dauern, und du wirst vermutlich etwas mehr Vektorrechnung selber machen müssen, aber so wirklich schwierig ist das alles letztendlich auch nicht. Hier mal zwei Links:

http://www.opengl-tutorial.org/
https://learnopengl.com/Introduction

Noch eine kurze Anmerkung: Die Normalen bleiben für ein Modell in der Regel immer gleich. Wenn sich das Objekt oder die Lichtquelle dreht werden die Normalen dann eben in jedem Frame im Vertex-Shader entsprechend transformiert (oder aber der Lichtvektor wird transformiert, das kann man sich im Grunde aussuchen - ein Beispiel dafür, wie flexibel und anschaulich Shader im Vergleich zur Fixed-Function-Pipeline sind).
Lieber dumm fragen, als dumm bleiben!

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

6

16.05.2022, 16:48

Hi , danke für deine Antwort, aber mit der GL Version hat dies nichts zu tun die wird ja dynamisch geladen, und die Grafikkarten Driver lieferte die OpenGL.dll die wird dynamisch geöffnet, und eine funktionszeigerliste erstellt.

Fakt dabei ist, das die Normals aus der 3dsmax Datei nicht sonderlich vorteilhaft wirken, wer das Referenz -Tool 3D-Exploration nutzt kann sehen das die 3ds Modelle jedoch scheinbar sehr korrekt dargestellt werden.

Die Übertragung der Normals an die VBO's erfolgt sinngemäß normal, dennoch stimmt die Darstellung nicht. In anderen Beispielen bei flachen netzen(Terrains) gibt es über die selbst erzeugten Cross Produkt Normals keine Probleme.
Es spielt dabei auch keine rolle ob via Vertexpointer VBO Zeiger oder Manuel das normal gesetzt wird, noch besser sieht es aus wenn ich gar keine Normale bei den 3d -meshes übertrage sondern Gl_enable NORMALS aktiviere, ohne dem sind die Flächen schwarz.

Vielleicht dachte ich hier wem zu finden der diese Problematik bereits selber erlebte, Schader haben damit erstmal nichts zu tun, werden bei 3d -Exploration auch nicht verwendet.

Naja mal sehen weiter forschen , danke für deinen Hinweis nun GL zu lernen. Löst das Problem gerade nicht.

Viele Grüße aus Berlin
Karsten.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

7

16.05.2022, 17:23

[...] aber mit der GL Version hat dies nichts zu tun die wird ja dynamisch geladen, und die Grafikkarten Driver lieferte die OpenGL.dll die wird dynamisch geöffnet, und eine funktionszeigerliste erstellt.
[...]
danke für deinen Hinweis nun GL zu lernen. Löst das Problem gerade nicht.


Ja doch schon... da fehlen ja anscheinend die fundamentalsten Grundlagen

Wenn du die FFP verwendest, dann ist das altes OpenGL. Ganz egal von wo die DLL kommt die du da verwendest.

8

16.05.2022, 22:02

Ansonsten zeig mal deinen Quellcode, dann kann man dir bestimmt helfen.

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

9

17.05.2022, 12:37

Es fehlt an Grundlagen, und zeig mal den Code .. seufzt..

Ok schade, dennoch Danke für die vielen Hinweise.

Leider Gottes ist gerade in diesem Bereich der Chauvinismus destruktiv.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

17.05.2022, 12:43

Ok schade, dennoch Danke für die vielen Hinweise.


Gerne. Musst du jetzt halt nur noch beherzigen anstatt direkt ausfallend zu werden, weil wir dein Genie wohl einfach nur nicht erkennen.

Werbeanzeige

Ähnliche Themen