Ich baute eine 2D-Grafik-Engine, und ich erstellt ein Batch-System für sie, also, wenn ich 1000 Sprites mit der gleichen Textur habe, kann ich sie mit einem einzigen Anruf zu zeichnen ÖffnenGl.Render mehrere Modelle in OpenGL mit einem einzigen Zeichenaufruf
Dies wird erreicht, indem alle Vertices aller Sprites mit derselben Textur in ein einzelnes vbo-Vertex-Array eingefügt werden.
Anstatt "diese Scheitelpunkte drucken, diese Scheitelpunkte drucken, diese Scheitelpunkte drucken", mache ich "alle Scheitelpunkte zusammen, drucke", um ganz klar zu sein. Einfach genug, aber jetzt versuche ich das Gleiche in 3D zu erreichen, und ich habe ein großes Problem.
Das Problem ist, dass ich eine Model View Projection-Matrix verwende, um meine Modelle zu platzieren und zu rendern. Dies ist der übliche Ansatz, um ein Modell im 3D-Raum zu rendern.
Für jedes Modell auf dem Bildschirm muss ich die MVP-Matrix an den Shader übergeben, so dass ich es verwenden kann, um jeden Eckpunkt an die richtige Position zu transformieren.
Wenn ich die Transformation außerhalb des Shaders tun würde, würde es von der CPU ausgeführt werden, was aus offensichtlichen Gründen keine gute Idee ist.
Aber das Problem liegt da. Ich muss die Matrix an den Shader übergeben, aber für jedes Modell ist die Matrix anders.
Also kann ich nicht dasselbe tun wie bei 2D-Sprites, weil das Ändern einer Shader-Uniform jedes Mal ein Unentschieden erfordert.
Ich hoffe, ich war klar, vielleicht haben Sie eine gute Idee, die ich nicht hatte oder Sie hatten bereits das gleiche Problem. Ich weiß eine Tatsache, dass es irgendwo eine Lösung gibt, denn in Engine wie Unity können Sie den gleichen Shader für mehrere Modelle verwenden und mit einem Zeichenaufruf davonkommen.
Super Antwort! Ich habe über das Implementieren von etwas ähnlichem selbst unterrichtet, aber ich wusste nicht wirklich wie, das ist genau, was ich suchte – Ryno