JirkaDellOro / FUDGE

Furtwangen University Didactic Game Editor
https://jirkadelloro.github.io/FUDGE
MIT License
33 stars 27 forks source link

Refactor_WebGL_Viewport_Canvas #19

Closed JirkaDellOro closed 5 years ago

JirkaDellOro commented 5 years ago

@R4Pi3R ich habe einen neuen Branch angelegt, Name siehe Issue-Titel. Hier möchte ich das Refactoring machen, zusammen mit dir. Bitte beobachte und prüfe und lass' uns über diesen Thread diskutieren. Ich werden voraussichtlich Montagnachmittag und Dienstag im Spiellabor sein. Ich würde mich freuen, wenn Du kommst.

JirkaDellOro commented 5 years ago

Erste Fragen

  1. in Viewport sind vertexArrayObjects und buffers zwei getrennt Arrays, werden aber scheinbar über den gleichen Schlüssel, den Knotennamen, angesprochen. Ist es eine strenge 1:1-Beziehung, so dass man sie gemeinsam in einem Array als Kombination referenzieren sollte, oder gibt es unterschiedliche Kombinationen
  2. in initializeViewportNodes wird derzeit Knoten, denen die Transformkomponente fehlt, automatisch eine aufgedrückt. Innerhalb dieser Methode spielt das aber gar keine Rolle sondern erst später beim Rendern, korrekt?
  3. die Projektionsmatrix wird bei drawObjects durchgeschleift... warum? Die Methode hat doch jederzeit Zugriff auf die Kamera des Viewports...?
JirkaDellOro commented 5 years ago

Frage 1 hatten wir beantwortet, die 1:1-Beziehung ist nicht zwingend, andere Strukturen sind sinnvoller, sind geplant und werden bereits implementiert.

Bitte beantworte noch die Fragen 2 und 3.

Außerdem wolltest Du selbst noch Fragen posten. Wie geht es bei dir voran, Jascha?

R4Pi3R commented 5 years ago
  1. Korrekt. Die Erstellung der Transformkomponente in diesem Schritt sollte garantieren, dass die Komponente beim Rendern für die Berechnungen vorhanden ist und nicht in jedem Frame abgeprüft werden muss.

  2. Jetzt wo du es anmerkst sehe ich auch, dass diese nicht übergeben sondern einfach abgerufen werden kann. Ist wohl ein Überbleibsel aus der Zeit, zu der es die Viewport-Klasse noch nicht gab.

Ich wollte fragen posten, so diese aufkommen. Derzeit habe ich keine Punkte, die sich teilweise oder gänzlich meinem Verständnis deiner Aufgabenstellung an mich entziehen. Ich sitze momentan dran, da ich bisher nicht die Zeit hatte, mich aktiv mit dem Code zu beschäftigen. Werde vorraussichtlich bis heute Abend noch ein Update meiner Datei pushen.

R4Pi3R commented 5 years ago

Ich revidiere.

Ich verstehe nicht, was die Funktion createParameter tatsächlich zurückgeben soll.

JirkaDellOro commented 5 years ago

Da bin ich bei der Namensgebung auch noch nicht richtig zufrieden. Hier soll das VAO zurückgegeben werden. Da es sich dabei ja nicht wirklich um ein VertexArray handelt, habe ich den allgemeinen Begriff Parameter gewählt. Das sind also die Render-Parameter, also das, was im Viewport vertexArrayObjects war.

R4Pi3R commented 5 years ago

Soll das zurückgegebene VertexArrayObject nur erstellt oder auch gleich im Context gebunden werden? Ich frage, weil es zur Verwendung Daten vom Mesh benötigen wird, die es aus dem Material, das ihm übergeben wird, nicht bekommt.

Gleiches gilt in der Hinsicht für den Buffer, der erstellt und gebunden wird und in dem momentan ebenfalls ein VertexArrayObject erstellt und gebunden wird.

Ein weiteres funktionales Detail: Bei der Recherche ergab sich, dass es "schöner" wäre (sprich ggf. Fehler vermeiden wird), die Bindung eines Buffers vor dem löschen aufzuheben. Dazu müsste der Funktion allerdings das target Attribut des Bufferobjekts bekannt sein und ich habe noch keine Möglichkeit gefunden, dieses nur aus dem Buffer heraus zu ermitteln.

JirkaDellOro commented 5 years ago

Du musst hier selbst Entscheidungen treffen, da Du tiefer in der WebGL-Seite steckst. Mein Manager ist zunächst fertig, ich muss ihn noch testen und kommentieren. Dabei sind die Strukturen, die er verwaltet, wurscht. Hier hast Du also Gestaltungsspielraum, wie wir ihn bereits beim Buffer nutzten. Es sollte alles, was nicht während des Renderns geschehen muss, bereits zuvor geschehen sein und die entsprechenden Informationen in sinnvollen Strukturen gespeichert sein. Derzeit habe ich drei Strukturen (program, parameter, buffer) vorgesehen und je drei Phasen (create, remove, use)

create und remove werden aufgerufen, sofern beim Hinzufügen oder Entfernen eines Knotens erkannt wird, dass die entsprechende Struktur noch fehlt oder gelöscht werden kann. use dagegen wird dann pro Frame aufgerufen. Die draw-Funktion mit dem Aufruf von use habe ich implementiert. Du musst prüfen, ob das so passt, was Du entsprechend implementieren musst oder was ich ändern muss, damit alles am Ende zusammen passt.

Hilft dir das?

JirkaDellOro commented 5 years ago

Achtung: implementiere die Funktionen bitte weiter in deinem WebGL-Teil, damit ich den Manager mit Dummy-Funktionen testen kann. Sonst müssten wir nochmal branchen.

JirkaDellOro commented 5 years ago

Im Kern durch...