Сортировать объекты в 3d - PullRequest
0 голосов
/ 31 декабря 2018

Итак, я разрабатываю своего рода 3d игру с фиксированным положением камеры.У меня есть много сущностей, каждая из которых получает эти свойства:

  • Позиция (координатаX, координата Y, координата Z) * ​​1006 *
  • Хитбокс (sizeX, sizeY, sizeZ)

Например, сущность может быть структурирована следующим образом:

  • Позиция (3, 4, 9)
  • Хитбокс (2, 3, 1)

Теперь у меня на 3D-карте много сущностей, которые я хочу нарисовать.Так как я хочу нарисовать объекты на переднем плане перед объектами на заднем плане, я должен отсортировать рисунок объектов на холсте.Это означает, что объекты, которые находятся за другими объектами, должны быть нарисованы первыми и так далее ...

Я много часов пытался выяснить, как сортировать объекты.С этой функцией сортировки я пришел к концу, потому что, к сожалению, расчет не работает так, как должен.Правда, я не знаю, как вообще исправить этот расчет, но я подумал, что добавление своих мыслей к вопросу не так уж плохо для всех нас.

enter image description here

img

let objects = {
  entity1: {
    position: {
      x: 0,
      y: 10,
      z: 5
    },
    hitbox: {
      sizeX: 4,
      sizeY: 1
    }
  },
  entity2: {
    position: {
      x: 4,
      y: 2,
      z: 4
    },
    hitbox: {
      sizeX: 3,
      sizeY: 3
    }
  }
}


let layeredObjects = Object.values(objects).sort((itemA, itemB) =>  {
  if ((itemA.position.x - itemA.hitbox.sizeX < itemB.position.x + itemB.hitbox.sizeX) &&
    (itemA.position.y + itemA.hitbox.sizeY < itemB.position.y - itemB.hitbox.sizeY) ||
    (itemA.position.x + itemA.hitbox.sizeX < itemB.position.x - itemB.hitbox.sizeX)) return -1;
  return 1;
})

console.log(layeredObjects)

Таким образом, лучшим решением для моей проблемы был бы метод, который мог бы возвращать отсортированные сущности (слои) так, как я могу легко нарисовать их в своемхолст.

Буду очень рад вашей помощи.


...