0

TheCherno のゲーム プログラミング チュートリアルを見ました:
http://www.youtube.com/watch?v=RKPEQfkhbAY

そしてこのエピソードで、彼はこのコードを書いて 3D 世界を作りました。

package game.display.graphics;

public class Render3D extends Render {

    public Render3D(int width, int height) {
        super(width, height);
    }

    public void floor() {
        for(int y = 0; y < height; y++) {
            double ydepth = y - height / 2;
            double z = 100.0 / ydepth;

            for(int x = 0; x < width; x++) {
                double xdepth = x - width / 2;
                xdepth *= z;
                int xx = (int) (xdepth) & 5;

                pixels[x+y*width] = xx * 128;
            }
        }
    }
}

私はコードをよく理解していません..誰かが私にそれを説明できますか?

4

1 に答える 1

1

計算自体はまだ関係ないと思いますが、実験のように思えます (特にビデオの画面を念頭に置いて)。

ただし、コードが何をしていると思うかを説明しようとします (詳細情報がないと、それほど簡単ではありません)。

まず、すべての画面ピクセルをループして、それらの色を計算します。

  • double ydepth = y - height / 2;画面の上半分のすべてのピクセルの深度が負になります
  • double xdepth = x - width / 2;画面の左半分の深度が負になる

これは、生成されたパターンを画面の中央に配置するために行われているようです。2 つの黒いセグメント (左下と右上) がありますが、投稿したコードでは、ここで何が行われているかが説明されていません。

int xx = (int) (xdepth) & 5;xxビット 1 もビット 3 (5 は 2 進数の 101) も設定されていない場合は常に、 の値を 0 (つまり、黒) に設定します。したがってxx、値 0、1、4、および 5 のみを持つことができ、これらの黒い縞が発生します。

xx * 128値を 0、128、512、および 640 にブーストしますpixels。使用方法によって結果が異なります。(pixelsが ARGB 形式で色を表す場合、0 は黒、128 は濃い青、512 は濃い緑 (ほぼ黒)、640 も濃い青にわずかに緑の成分が含まれます。

そうは言っても、コードをざっと読んで、必要に応じていくつかの計算例を実行しました。詳細については、そのトレイルに従ってください。

于 2013-09-18T07:39:01.700 に答える