Frage

ich auf einem 2D-Spiel arbeite. Stellen Sie sich eine XY-Ebene und Sie sind ein Zeichen. Als Ihr Charakter geht, kommt in den Blick der Rest der Szene.

Stellen Sie sich vor, dass die XY-Ebene ist recht groß und es gibt auch andere Zeichen außerhalb der aktuellen Ansicht.

Hier ist meine Frage, mit opengl, wenn die Objekte außerhalb der aktuellen Ansicht nicht gerendert werden, haben sie die Verarbeitungszeit auffressen?

Auch, was sind einige Ansätze Teile der Szene zu vermeiden gemacht hat, die nicht in Sicht ist. Wenn ich einen Würfel, die 1000 Einheiten weg von meiner aktuellen Position ist, möchte ich nicht das Objekt gemacht. Wie konnte ich opengl das nicht machen.

Ich denke, die einfachste Ansätze, um die Position zu berechnen und dann nicht, dass die Würfel / Objekt ziehen, wenn es zu weit entfernt ist.

War es hilfreich?

Lösung

Wenn Sie Ihren Szenengraph eingerichtet haben Objekte korrekt außerhalb Ihres Sichtfeld sollte früh in der Display-Pipeline gekeult werden. Es wird ein Kontrollkästchen in Ihrem Code benötigt, um zu überprüfen, dass das Objekt unsichtbar ist, so wird es einiger Verarbeitungsaufwand (aber nicht viel) sein.

Wenn Sie Ihre Objekte in eine vernünftige Hierarchie organisieren dann könnte man große Teile der Szene keulen mit nur einer Box zu überprüfen.

Andere Tipps

OpenGL FAQ auf "Clipping, Culling und Sichtbarkeit Testing" dies sagt:

  

OpenGL bietet keine direkte Unterstützung für die Bestimmung, ob eine bestimmte primitive in einer Szene für einen bestimmten Blickwinkel sichtbar. Im schlimmsten Fall wird eine Anwendung müssen diese Tests manuell durchzuführen. Die vorherige Frage enthält Informationen darüber, wie dies zu tun.

Gehen Sie voran und den Rest dieser Verbindung lesen, es ist alles relevant.

Normalerweise muss Ihre Anwendung diese Optimierungen durchführen - OpenGL ist buchstäblich nur die Rendering-Teil und nicht Objekt-Management oder ähnliches durchführen. Wenn Sie in Daten für etwas Unsichtbares es noch passieren hat die entsprechenden Koordinaten in Sicht Raum zu transformieren, bevor er bestimmen kann, dass es völlig Off-Screen oder über ein Ihre Clip-Ebene.

Es gibt mehrere Möglichkeiten, von unsichtbaren Objekten aus der Pipeline-Culling. Überprüfen, ob ein Objekt hinter der Kamera ist wahrscheinlich die einfachste und billigste Check durchzuführen, da Sie die Hälfte Ihres Datensatz im Durchschnitt mit einer einfachen Berechnung pro Objekt ablehnen können. Es ist nicht viel schwieriger, die gleiche Art von Test gegen die aktuelle Ansicht frustrum auszuführen alles abzulehnen, die nicht sichtbar ist.

Natürlich in einem komplexen Spiel werden Sie das nicht haben wollen, für jedes winzige Objekt zu tun, so ist es typisch gruppieren sie entweder hierarchisch (zB. Sie würde eine Waffe nicht machen, wenn Sie bereits, dass Sie festgestellt haben, ist das Zeichen nicht Rendering, die es) hält, räumlich (z. Dividieren der Welt bis in ein Raster / Quadtree / Octree und jedes Objekt der Ablehnung, die Sie innerhalb einer Zone wissen, dass Sie bereits zur Zeit unsichtbar festgestellt haben, ist), oder häufiger eine Kombination aus beidem.

„der einzigen Gewinnzug nicht spielen“

Jeder glVertex usw. wird eine Leistung getroffen, unabhängig davon, ob es letztlich auf dem Bildschirm gerendert wird. Der einzige Weg, um das zu bekommen, ist nicht (das heißt Keulung) Objekte zu zeichnen, die jemals sowieso gemacht werden wont.

am häufigsten verwendete Methode ist eine sehen Stumpfes Kamera gebunden. Verbinden Sie das mit einem Octtree oder Quadtree je nachdem, ob Ihr Spiel ist 3D / 2D, so dass Sie jedes einzelne Spiel überprüfen müssen Objekt gegen die Stumpfes.

nicht

Der zugrunde liegende Treiber können tun hinter den Kulissen einige Keulen, aber man kann nicht sich verlassen, da sie nicht Teil der Standard OpenGL ist. Vielleicht Treiber Ihres Computers tut es, aber vielleicht jemand anderes (wer das Spiel laufen könnte) nicht. Es ist am besten für Sie zu Ihrem eigenen Culling tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top