私はDynamicVertexBufferについてよく読んでおり、頻繁に変更されるデータの方がより良いと思われます。私はキューブによって構築された世界を持っており、キューブの頂点をこのバッファに格納して、それらを画面に描画する必要があります。XNA 4.0でDynamicVertexBufferを使用
しかし、すべてのキューブが頂点を持っているわけではありません(一部は空気で透明です)。キューブのすべての面がどちらかの面を向いているわけではありません(どうして向かい合っているか)。バッファにどこに格納されますか?また、特定のフェースは最後に描画する必要があります(つまり、ガラスや葉のような透明なもの)。また、これらのフェースは、アルファブレンディングを台無しにしないように、バックツーフロントで描画する必要があります。
これらの頂点がすべてこのバッファに任意に格納されている場合、どの頂点がどこにあるのかをどのように知ることができますか?
また、頂点の数は変わる可能性がありますが、DynamicVertexBufferは私のサイズを全く変更することができないので、私にとって非常に動的ではありません。顔を追加または削除する必要があるたびにバッファを再作成する必要がありますか?
「あなたは-ve x方向のすべての顔を無視する」という意味だと思います。とにかく、この情報をありがとう。テクスチャはすべて同じテクスチャマップから取得されるため、問題はありません。しかし、私は世界にキューブを追加すると言うと、このキューブはどこかに置かれてレンダリングが必要です。頂点はどこに追加しますか?他のすべての頂点が格納されている場所のサイズを変更することなく、この新しいキューブについてGPUにどのように通知できますか?私はoctreeのレンダリングを調べるでしょう、私はquadtreesとoctreeを見てきました。 – Bevin
キューブは、面よりもデータ構造のレベルが高いと仮定して、-ve x方向のすべての立方体を無視するという意味でした。キューブを無視することができれば、自動的に6つの顔をすべて無視することができます。そのため、キューブを先にドロップするほうが簡単です。潜在的に目に見えるキューブを設定すると、顔をドロップしようとします。 –
あなたはまだフレーム間で永続的なものとして頂点バッファを考えています。ほとんどのエンジンではそうではありません。フレームごとに頂点バッファをゼロから作成します。確かにスペースを割り当てることができますが、データを再構築します。潜在的に目に見える顔のセットは、すべてのフレームで変更されます。考えてみると、何百万ものキューブを持つ世界があるかもしれませんが、できるだけ多くの顔をレンダリングしたい各フレーム(おそらく数百という)は、頂点バッファのサイズを可能な限り小さくすることですフレーム。 –