3

私は、2Dゲームパネルと「疑似」-3Dパネルの両方を備えたJavaゲームに取り組んでいます。

これは、3D環境に配置された2D平面にすぎないため、実際の3Dではありません(カスタム作成されたモデルはありません)。

レンダリングエンジンとしてjPCTを使用しており、現在、壁をレンダリングすることを検討しています。

2Dビューでは、次のようになります。
ここに画像の説明を入力してください

3Dビューでは、次のように表示しようとしています。
ここに画像の説明を入力してください

これは、10個の平面を互いに積み重ねることで機能し、3D壁のような錯覚を与えます。

これを取得するためのコードは次のとおりです。

    Object3D obj = new Object3D(20);

    for (int y=0; y < 10; y++) {
        float fY = y / -10f;
        obj.addTriangle(new SimpleVector(-1, fY, 1), 0, 0,
                        new SimpleVector(-1, fY, -1), 0, 1,
                        new SimpleVector(1, fY, -1), 1, 1,
                        textureManager.getTextureID(topTexture));
        obj.addTriangle(new SimpleVector(1, fY, -1), 1, 1,
                        new SimpleVector(1, fY, 1), 1, 0,
                        new SimpleVector(-1, fY, 1), 0, 0,
                        textureManager.getTextureID(topTexture));
    }

問題は、それをまっすぐに見ると、次のような効果が得られることです。
http://i.stack.imgur.com/s8hyX.png

これは、平面の数を増やしてそれらを近づけることで減らすことができますが、同じ効果を得るより効率的な方法を探しています。

2D画像を上部のテクスチャとして立方体をレンダリングし、ピクセルの最後の行を側面のテクスチャとして使用することを考えていました。たとえば、ベース画像から(0,0)と(0,39)で40x1の画像を抽出し、ストレッチします。これらは立方体の側面全体にあります(元の画像は40x40です)。

ただし、これらの画像の表示部分は40x40よりも小さいため(たとえば、上下の40x9ピクセルは水平壁に対して透明であるため)、これは完全には機能しません。したがって、エッジ検出を実行して、そこでカットを開始する必要があります。

同じことをしようとするより良い提案はありますか?

4

1 に答える 1

0

最も単純だがパフォーマンスが最も低い可能性が高いソリューションは、透明なピクセルと透明でないピクセルの両方に隣接する画像内の任意のピクセルに対して、そのピクセルだけに対して背の高い長方形の立方体をレンダリングすることです。

于 2012-05-20T05:37:54.927 に答える