我观看了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;
}
}
}
}
我真的不明白代码..所以有人可以向我解释一下吗?
答案 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表示深蓝色表示颜色为绿色。
话虽如此,我只是略过了代码并在必要时进行了一些示例计算。有关更多信息,请按照该路径进行操作。