2017-01-21 3 views
0

In allen meinen Projekten habe ich die ganze Karte und dann alle Entitäten gerendert. Aber jetzt gibt es Teile, wo Entitäten unter einige Teile der Karte gehen müssen, und ich sitze nur hier, keine Ahnung, wie es geht.Wie geht man mit Charakter unter Teile der Karte?

My (Pseudo-Code) Renderer:

Render(){ 

    For all Layers 
    For all Rows 
     For all Blocks 
     Block.Render() 


    For all Entities 
    Entity.Render(); 

} 

, die in Einheiten über Teile der Karte Überziehungen endet sie sollen unter sein. Wie man es theoretisch richtig macht?

Antwort

0

Das hängt wirklich von Ihrem speziellen Rendering-Schema, aber oben unter der Annahme, Sicht, etwas in diese Richtung:

Render(){ 
    For all Layers from bottom to top 
    For all Rows in layer 
     For all Blocks in row 
     Block.Render() 
    For all Entities on layer 
     Entity.Render() 
} 

D.h. render die Dinge absteigend sortiert nach der Entfernung von der Kamera, die der Nummer der Ebene entspricht.

0

Wie von Yuri Kilochek in seiner Antwort vorgeschlagen, können Sie in der Tat die painter's algorithm hier verwenden.

Ein anderer Weg, der Umgang mit diesem könnte sein, je nachdem, was Ihre Block und Entity Klassen aussehen, alle von ihnen in einer Reihe zu haben, und dann sort dieses Array nach wie vor eine ähnliche Struktur zu kommen. Die Hauptnachteile, die ich hier sehen kann, können sein, dass die Sortierung teuer sein kann (abhängig davon, wie viele Elemente gerendert werden sollen) und dass Ihre Objekte möglicherweise wissen müssen, um ihre Zeilen/Ebenen sortieren zu können.

Sie könnten auch Gewinn von the z-buffer nehmen, wenn Sie mit opengl oder directx Szene zu machen. Die Idee wäre, Ihre Vertices-Daten mit dem layer Objekt zu bereichern, und dann die z-buffer Magie passieren zu lassen, indem Objekte mit einem greater or equal Layer-Wert gezeichnet werden. Auf diese Weise können Sie Ihre tatsächliche Renderschleife beibehalten und dabei die Ebenen berücksichtigen, in denen sich Ihre Objekte befinden.