2013-09-17 4 views
0

Я наблюдал TheCherno игра программирования учебника:
http://www.youtube.com/watch?v=RKPEQfkhbAYJava 3D для разработки игр визуализации

И в этом эпизоде ​​он написал этот код, чтобы сделать мир 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

Что вы не понимаете? Значение значений или синтаксис кода? В основном это заполняет массив пикселей (предположительно на экране) с множеством значений глубины, то есть цвет пикселя зависит от его положения на экране, а названия переменных указывают на некоторую визуализацию расстояния до экрана (также как глубина). – Thomas

+0

Btw, разве видео не объясняет код? – Thomas

+0

nope .. он говорит «отлаживайте это в своем уме». – Israelg99

ответ

1

Я все еще считаю, что сами расчеты не имеют отношения к делу, это просто похоже на какой-то эксперимент (особенно с экранами из видео в уме).

Однако, я попытаюсь объяснить, что я думаю, что код делает (без дополнительной информации, это не так просто):

Во-первых, он перебирает все пиксели экрана и вычисляет цвет для них.

  • double ydepth = y - height/2; приведет глубина быть отрицательным для всех пикселей в верхней половине экрана
  • double xdepth = x - width/2; приведет глубина быть отрицательным для левой части экрана

Это кажется для того, чтобы центрировать сгенерированный шаблон внутри экрана. Есть два черных сегмента (нижний левый и правый верхний), но код, который вы опубликовали, не объясняет, что здесь делается.

int xx = (int) (xdepth) & 5; установит значение xx на 0 (то есть черный), если не установлены ни биты 1, ни 3 (5 бинарных 101). Таким образом, xx может иметь только значения 0, 1, 4 и 5, которые вызывают эти черные полосы.

xx * 128 увеличит значение до 0, 128, 512 и 640, что приведет к другому, в зависимости от того, как используется pixels. (Если pixels представляет цвета в формате ARGB, 0 будет черным, 128 будет темно-синим, 512 будет темно-зеленым (почти черный), а 640 также будет темно-синим с небольшим зеленым компонентом.

Это,

+0

Спасибо, человек .. Я сейчас понимаю это лучше. поскольку я смотрю на код и играю с ним немного, я начинаю видеть картину о том, как это работает. благодаря – Israelg99

Смежные вопросы