我看了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;
}
}
}
}我不太明白密码..。这样就能有人给我解释了?
发布于 2013-09-18 07:39:01
我仍然认为计算本身是不相关的,这似乎只是一些实验(特别是考虑到屏幕上的视频)。
但是,我将尝试解释我认为代码所做的事情(如果没有更多的信息,这并不容易):
首先,他遍历所有屏幕像素并计算出这些像素的颜色。
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也将为深蓝色和一些轻微的绿色成分。
话虽如此,我只是浏览了一下代码,并在必要时做了一些示例计算。要了解更多信息,只需遵循这条线索。
https://stackoverflow.com/questions/18847776
复制相似问题