1

私はC#、XNAでMinecraftのようなエンジンを作りました。それは高いfpsを与え、fpsがまったく落ちないチャンクをロードしますが、グローバルなライトとシャドウに関しては、問題があります。

基本的に-チャンクのモデル作成ループ内

for (i = 0; i < 16; i++) 
{ 
    for(int j = 0; j < chunk_height; j++) 
    { 
        for(int k = 0; k < 16; k++) 
        {
            // check if block (and 4 blocks around 
            // a current one (i, j, k), (i + 1, j, k), 
            // (i - 1, j, k), (i, j, k + 1), (i, j, k -1)) 
            // are covered and put shadows to block face's vertex colors. 
        }
    }
}

結果は古いマインクラフトスタイルのシャドウです:

vsyncをオンにしてスクリーンショットを作成する前と同じパフォーマンスで、fpsは約350です

しかし、私はMinecraftの影、バイオームの色、光の滑らかさを実現しようとしています->

そのようなものに三角ストリップを使用することは不可能であるため、私は三角リストを使用しています。ただし、この場合、頂点の色はどの立方体の面の間でも滑らかではありません。

したがって、問題はこれらの頂点をスムージングすることです。Color-sはMinecraftのもののように見えます。

単純なアルゴリズムを作成しましたが、CPUの読み込みが高すぎる(vertices.Count ^ 2 - sized loop)ため、世界を旅して新しく読み込まれたチャンクのシャドウが計算されると、pcは毎回1〜2秒間遅れますが、mcではそのような速度低下はありません。

(主な目標はMinecraftのパフォーマンスを打ち負かすことであるため、スムージングアルゴリズムをリアルタイムで実行する必要があります(Minecraftの現在の最小/中程度のグラフィックスで結果が達成されます(Minecraftの70に対して約300 fps))

チャンクのクラス(主な問題あり)、ヘルパークラス(その他、プロジェクトで使用されるもの)、ブロッククラス(ブロックタイプベース(ブロックタイプの作成と登録に使用)、ブロックのモデルジェネレーター):

http://pastebin.com/GB1QqtdQ

PSそれが悪いなら私の英語で申し訳ありません、それは私の主な言語ではありません。

4

1 に答える 1

0

頂点をまったく共有していないようです。頂点を共有して床を構築すると、適切な結果が得られます。三角形ストリップではなく三角形リストであるからといって、インデックス バッファーが 2 つ以上の三角形の同じ頂点を参照できないわけではないことに注意してください。

于 2012-05-16T18:05:27.927 に答える