2017-01-21 8 views
0

私のすべてのプロジェクトで、地図全体をレンダリングしてからすべてのエンティティをレンダリングしています。しかし、今、エンティティが地図のいくつかの部分の下になければならない部分があります。そして、私はここに座って、それをどうやって行うのか考えません。マップの一部の下でキャラクターを扱うにはどうすればいいですか?

マイ(擬似コード)レンダラ:

Render(){ 

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


    For all Entities 
    Entity.Render(); 

} 

マップの部分の上にの描きエンティティで終わる彼らは下のことになっています。それを理論的に正しく行うには?

答えて

0

これは本当にあなたの特定のレンダリング方式に依存するが、トップダウンビューを想定し、これらの線に沿って何か:

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() 
} 

すなわち、物を降順でレンダリングします。カメラからの距離によって順序付けられます。これはレイヤー番号に対応します。

0

彼の答えにyuri kilochekが示唆しているように、ここではpainter's algorithmを実際に使用することができます。

あなたのBlockEntityクラスがどのように見えるかに応じて、これらのすべてを配列に含めることができます。sortこの配列を元の構造に戻すことができます。私がここで見ることができる主な欠点は、並べ替えが高価になる可能性があり(並べ替えるアイテムの量によって)、オブジェクトを並べ替えるために行/レイヤーを知る必要があることです。

、あなたのシーンをレンダリングするためにopenglのまたはDirectXのを使用している場合もthe z-bufferの利益を取ることができます。各オブジェクトがlayerのオブジェクトを持つ頂点データを豊かにし、greater or equalのレイヤ値を持つオブジェクトを描画できるようにして、z-bufferのマジックを起こさせることが考えられます。これにより、オブジェクトのレイヤーを考慮しながら、実際のレンダーループを維持できます。

関連する問題