Mtt oder etwas Komplizierteres als das Zeichnen eines Dreiecks / Sudo Null IT News

Schon komisch, wohin ein paar Experimente manchmal führen können. Es scheint, dass der Plan einfach war – um zu sehen, was an diesem Vulkan so interessant ist, was für eine Art Hype das ist. Nun, ich werde etwas zeichnen. Nein, kein Dreieck, etwas Komplizierteres als ein Dreieck. Manuelle Zuweisung und Freigabe von Handles? Nun, nein, ich will mir nicht in die Beine schießen, ich muss immer noch darauf laufen.

Als nächstes macht es mehr Spaß. Mit Framebuffern in OpenGL zu jonglieren ist keine sehr angenehme Erfahrung, aber hier deutet die ganze Logik auf einen solchen Ansatz hin. Ich werde versuchen, eine verzögerte Beleuchtung zu implementieren. Framebuffer, Sie möchten also etwas Komplizierteres als ein Dreieck zeichnen? Es ist Zeit, Maschen und Zeichentechniken zu erfinden … Und je weiter, je mehr Fragen, desto interessanter die Aufgaben und desto lustiger die Experimente. Zuerst war es ein Versuchsgelände für Experimente mit einem Vulkan, dann ein Versuchsgelände für architektonische Experimente. Und dann wurde klar, dass etwas Unabhängiges erschien. Beenden wir es ein wenig mit einer Datei, und vielleicht können wir es den Leuten zeigen. Plötzlich wird sich jemand als nützlich erweisen.

Also, kennenlernen – mtt.

Link zum Repository

Mtt ist eine Reihe von C++-Bibliotheken, die Ihnen beim Einstieg helfen können, wenn Sie eine Anwendung schreiben möchten, die mit 3D-Grafiken arbeitet. Es wird unter der MIT-Lizenz vertrieben, sodass Sie mtt tatsächlich verwenden können, wie Sie möchten.

Spiel-Engine? Nein, natürlich. Sie können versuchen, ein Spiel darauf zu schreiben, aber ehrlich gesagt gibt es viel wertvollere Optionen, die Sie viel weniger Mühe und Zeit kosten. Mtt entwickelte sich als Labor für Experimente und erwies sich als recht flexibel. Es lohnt sich also, darauf zu achten, wenn Sie etwas Nicht-Standard machen möchten, das ein eigenes Rendering-System hat.

Zunächst einmal lohnt es sich, mtt als eher dünne Hülle um den Vulkan zu betrachten, mit dem es ursprünglich erstellt wurde. Sammeln und konfigurieren Sie Shader-Programme, verbinden Sie Sampler und Vertex-Puffer mit ihnen, übertragen Sie Daten durch Uniformen. Wenn Sie mit diesen Wörtern vertraut sind, sollten Sie sich wahrscheinlich mal MTT ansehen. Es vereinfacht die Arbeit enorm. So können Sie zum Beispiel einen Vertex Buffer erstellen und füllen:

mtt::Buffer positionBuffer(displayDevice, mtt::Buffer::VERTEX_BUFFER); std::vector positionsData ={ glm::vec3(-1.f, -1.f, 0.f), glm::vec3(-1.f, 1.f, 0.f ), glm::vec3( 1.f, -1.f, 0.f)}; positionBuffer.setData( positionsData.data(), positionsData.size() * sizeof(positionsData[0]));

Und so – verbinden Sie es mit der Pipeline:

VertexAttribute& positionAttribute = pipeline.getOrCreateAttribute(“positionLocation”); positionAttribute.adjustDataType (VertexAttribute::FLOAT_VEC3_TYPE); positionAttribute.attachBuffer(&positionBuffer);

Natürlich hat mtt im Laufe der Zeit mehr High-Level-Features erworben. Die erste davon ist natürlich, mit dem Szenengraphen zu arbeiten und darauf basierend einen Renderplan zu erstellen. Das heißt, mtt übernimmt den größten Teil der Routine, wenn Sie die sichtbaren Objekte der Szene umgehen, Zeichentechniken auswählen, Zeichenbefehle nach Passes und nach Entfernung zur Kamera sortieren müssen. Sie können sich nur auf die Daten und deren Darstellung konzentrieren. Genau dazu dienen Maschen und Maltechniken. Im Wesentlichen ist dies ein Add-On für Puffer und Pipelines, das viele typische Aufgaben automatisiert.

Die mtt::clPipeline-Bibliothek ist eine Implementierung eines bestimmten Rendersystems, d. h. einer Zeichentechnik und einer Abfolge von Ziehdurchläufen. Sie müssen es überhaupt nicht verwenden, der größte Teil des MTT ist nicht daran gebunden. Vielmehr ist es ein Schnellstart, der in der Anfangsphase hilft, oder ein Prototyp, auf dessen Basis Sie Ihr eigenes System bauen können.

Materialien in clPipelineMaterialien in clPipeline

Der zweite wichtige Teil ist eine Reihe häufig verwendeter Primitive. Mtt hat sich hauptsächlich in Richtung Tooling entwickelt, daher finden Sie hier Manipulatoren, Bearbeitungsbefehle und Undo / Redo-Stack, asynchrone Aufgaben, generische Widgets usw. Das ist auch eine Art Schnellstart, der erstmal helfen soll.

Sehen Sie sich die Anwendungen ObjectEditor und ParticlesEditor an. Beide sind Teil von mtt und beide bauen auf gemeinsamen Komponenten auf. Obwohl sie einander ähnlicher sind als Brüder, üben sie völlig unterschiedliche Aufgaben aus. Wenn ObjectEditor im Allgemeinen ein einfacher Modelleditor ist, dann ist ParticlesEditor ein Strömungssimulator.

Wenn Sie sich den Quellcode dieser Editoren ansehen, werden Sie feststellen, dass er fast ausschließlich aus Klassen besteht, die die zu verarbeitenden Daten beschreiben, sowie aus Widgets, die diese Daten verwalten. Die Vereinheitlichung wirkt Wunder, und das Schreiben von zwei verschiedenen Editoren erforderte nur die Beschreibung der Themenbereiche und das Hinzufügen einer benutzerdefinierten GUI.

Anstelle eines Fazits

Nun, ich denke, dass ich hier schon genug geschrieben habe, um auf mtt aufmerksam zu machen. BEI Lagerstätten finden Sie induction.md und Beispiele. Das sollte meiner Meinung nach für den Einstieg reichen. Wenn die Bibliothek Interesse weckt, dann werde ich mich eingehender mit der Dokumentation befassen. Die Hauptfrage ist, ist es für andere interessant?

Vielen Dank

Vielen Dank an die Autoren dieser Werke.

Similar Posts

Leave a Reply

Your email address will not be published.