Java 3D游戏开发渲染

时间:2013-09-17 10:47:06

标签: java render java-3d

我观看了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;
            }
        }
    }
}

我真的不明白代码..所以有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

我仍然认为计算本身并不重要,它似乎只是一些实验(特别是考虑到视频中的屏幕)。

但是,我会尝试解释我认为代码的作用(没有更多信息,这并不容易):

首先,他遍历所有屏幕像素并为这些像素计算颜色。

  • double ydepth = y - height / 2;会导致屏幕上半部分所有像素的深度为负值
  • double xdepth = x - width / 2;会导致屏幕左半部分的深度为负值

这似乎是为了使生成的模式在屏幕中居中。有两个黑色部分(左下角和右上角),但你发布的代码并没有解释这里做了什么。

只要设置了位1和3(5是二进制101),

int xx = (int) (xdepth) & 5;就会将xx的值设置为0(即黑色)。因此xx只能有值0,1,4和5,这会导致那些黑色条纹。

xx * 128会将值提升为0,128,512和640,这将导致不同,具体取决于pixels的使用方式。 (如果pixels表示ARGB格式的颜色,0表示黑色,128表示深蓝色,512表示深绿色(几乎为黑色),640表示深蓝色表示颜色为绿色。

话虽如此,我只是略过了代码并在必要时进行了一些示例计算。有关更多信息,请按照该路径进行操作。