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

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

11

18.12.2013, 11:18

Für mich ist eine Worldmatrix eine Matrix, die ein Objekt in aus Localspace in Worldspace transformiert. Das gibt es einmal lokal und eine globale Worldmatrix im Szenengraphen, die sich aus localWorldMatrix * ParentGlobalWorldMatrix zusammensetzt. In meinem Szenengraphen bleibe ich ja auch im Weltkoordinatensystem, weil das nichts mit betrachterposition und Projektion zu tun hat, also immer im Worldspace bleibt. Nur beim Rendering brauche ich die Betrachterposition und Projektion. Ist das so ein unkluger Ansatz?
Vielleicht ist auch einfach das kurze Codeschnipsel etwas ungünstig^^.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

18.12.2013, 11:28

Die View Matrix transformiert von Weltkoordinaten in lokale Kamerakoordinaten. Sie tut damit in der Tat genau das umgekehrte einer Model Matrix; man kann die View Matrix auch als inverse der Weltmatrix betrachten, die man verwenden würde, würde man die Kamera als Objekt rendern wollen. Deine Lösung über die Inverse ist mathematisch sinnvoll und völlig korrekt. Genau das ist auch ein möglicher Weg, beispielsweise die übliche Formel für die View Matrix herzuleiten... ;)

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

13

18.12.2013, 12:13

Ich verstehe den Ansatz von Jonathan_klein, nur greift der bei mir nicht im Scenegraph, weil alles in Worldspace abgebildet ist. die Klasse, die den SceneGraph rendert, braucht dann mehr Kontext, also View und Projection. Und die möchte er von der Kamera. Ich hab mittlerweile alles zum laufen bekommen und hab eine kleine Demo gemacht: Youtube

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

14

19.12.2013, 11:36

Interessant ist, dass bisher niemand mal die Verwendung von einem SceneGraph zum Rendern allgemein in Frage gestellt halt.
Habe gerade letzte Woche von vom L. Spiro einen interessanten Artikel gelesen, der genau das ausführlich erklärt.
Also genau beschreibt, warum man einen SceneGraph nicht dafür verwenden sollte. Eigentlich ist er ja nur zum Verwalten von
Objekten und deren Zustände gedacht. Damit meine ich Player, Enemies usw., aber definitiv nicht Objekte zum rendern.

Naja, dann bin ich halt mal der, der das Thema anstößt. Aber wenn es hier nicht hingehört, dann einfach ignorieren.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

19.12.2013, 12:02

Interessant ist, dass bisher niemand mal die Verwendung von einem SceneGraph zum Rendern allgemein in Frage gestellt halt.

Wenn es ums Rendering geht, ist ein traditioneller Szenengraph natürlich relativ ineffizient und ich würde ebenfalls davon abraten. Hier geht es aber um die Berechnung einer View Matrix... ;)

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

16

19.12.2013, 18:38

Das ein SceneGraph relativ ineffizient ist liegt ja wohl zum Teil auch an seiner Benutzung. Man sollte es vielleicht nicht übertreiben und jedes Objekt mit 100 Hierarchietiefen und jeweils noch 100 mal schachteln, das ist quatsch. Aber in der regel ist der baum sehr flach (hierarchietiefe < 3) und dann noch gut organisiert in kombination mit Quad/Octrees ist das doch ein gute idee. Eine traditionelle Implementierung wäre ja wohl eh einfach nur eine liste an stelle ein Baum oder? Und da halte ich die performancevorteile für geringfügig.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

17

19.12.2013, 20:49

Es ist keine Frage, ob solch ein Graph effizient ist oder nicht. Die Tiefe der Verschachtelung hat auch nichts mit dem eigentlichen Problem zu schaffen.
Ein SceneGraph ist eigentlich frei von jedem Context und ist dazu da, um Attribute/Properties von oben nach unten durchzureichen. Was ist dabei egal.
Das klassische Beispiel ist ja eine Wolrdmatrix. Ein Bespiel ist ein Spieler mit einem Messer in der Hand. Das Messer wäre ein "Child" vom Player und bekommt
sein Worldmatrix/Position und kann dann seine eigene relativ zum Spieler leicht bestimmen.
Beim Rendern ist es aber immer noch am wichtigsten, nach Änderugen bei den Renderstates zu sortieren. Danach nach der Verwendung von Texturen und Shadern etc.
Die Struktur eines SceneGraph entspricht aber dann nicht unbedingt dieser Vorgabe. Also wird eventuell das Rendern ineffektiv.
Darum besser eine Liste an RenderCalls generieren und diese dann entsprehend noch sortieren.
Diese beiden Anforderungen einmal an einen SceneGraph und dann an das Redern sind ganz unterschiedlich. Darum wird eines von beiden ineffzient sein.

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

18

19.12.2013, 23:47

Definitiv dient mein Scenegraph nur zum bestimmen von hierarchischen Transformationen. Das Rendering wird gesondert in einer flachen liste priorisiert abgearbeitet :) Das habe ich noch nicht implementiert, weil bisher alles wahnsinnig schnell geht, frei nach dem Motto "premature optimization is the root of all evil". Ich konzentriere mich zurzeit auf Architektur und leichte Verwendbarkeit. Das interne Rendering wird optimiert, wenn es notwendig ist. Ich habe auf meinem Entwicklungsrechner eine recht ordentliche Grafikkarte (Geforce GTX 560 TI) und da läuft die Testszene mit etwa 3500 FPS, was erstmal ok ist. Auf einem Intel HD Graphics 3000 läuft es mit etwa 300 FPS, was auch noch vollkommen ok ist.

Das ist meine derzeitige (noch sehr kleine) Testszene: Youtube

Werbeanzeige