По сути, я пытаюсь сделать 3D-проекцию на 2D-холст с имитацией глубины. Как правило, тела, которые находятся дальше, «затенены» больше и меньше, чем тела, которые находятся ближе к зрителю. Единственное, чего не хватает, так это того, что тела, которые находятся дальше, всегда тянутся за телами, которые находятся ближе.
Иногда тела, которые находятся дальше, тянутся за более близкими телами, но всегда есть маленькие тела, которые рисуются перед более крупными, это означает, что те, которые находятся дальше, иногда появляются перед телами, которые должны быть ближе.
Я пытаюсь решить это, сортируя тела по z-позиции. Массив тел представляет собой массив объектов с 0, содержащим массив позиции тела, 0 - это x, 1 - это y, 2 - это z. Сначала у меня обновляется положение тел в соответствии с поворотами по осям x, y и z, сохраняются в значении np объекта body, затем выполняется сортировка и рисуется тело. Я пытался изменить порядок сортировки массива, изменить порядок цикла, но сигары по-прежнему нет.
Просто интересно, может ли кто-нибудь указать мне правильное направление, чтобы заставить этот трехмерный «движок» вести себя правильно. Любая помощь приветствуется. Несколько быстрых примечаний: Вращение по трем осям осуществляется с помощью клавиш Q / A, W / S и E / D, увеличение и уменьшение оси Z осуществляется с помощью клавиш R / F, а вращение по умолчанию относительно ось z может быть выполнена с помощью клавиши P. То, что я пытаюсь сделать, находится здесь:
http://jsbin.com/aholu/5/