Я хочу нарисовать сетку с тремя. js так, чтобы, учитывая центр и размер объекта:
- Он динамически регулирует гранулярность (пространство между линиями сетки) по отношению к размеру объекта.
- Линии сетки не относятся к объекту
Я выполнил первое требование. Второй трудно объяснить, но, вероятно, его легче понять на примере: https://jsfiddle.net/rendoir/gua7qd0s
В этой демонстрации вы можете увидеть, что если вы нажмете 's', размер объект увеличивается, как и сетка. Разделение сетки изменяется в соответствии с порядком величины размера объекта.
Проблема 2) заключается в том, что положение сетки относительно положения объекта (они имеют одинаковый центр). Поэтому сетка всегда идеально соответствует объекту.
Я пытаюсь разрушить эту иллюзию, создавая впечатление, что сетка существует в мировом пространстве, начиная с источника мира и появляясь за объектом.
Наивным подходом было бы разработать сетку с размером, который мог бы охватывать объект, начиная с начала координат. Тем не менее, поскольку сцена и камера будут установлены c (в данном случае это не так), я хочу сетку, которой достаточно для размещения объекта (не нужно начинать с начала координат, поскольку объект может быть от этого), а количество делений (гранулярность между линиями сетки) все еще меняется в зависимости от его размера.
Я понимаю, что текущее решение первой проблемы может конфликтовать со второй проблемой, поэтому я ищу идеи или даже существующие решения, если таковые имеются.
Примечание. объект всегда четырехугольник. Нажав 'c', вы также можете изменить центр объекта.
Основной код находится в классе Grid
:
let divisions = getDivisions(size);
let step = size / divisions;
let halfSize = size / 2;
let vertices = [];
for ( let i = 0, k = - halfSize + step; i < divisions - 1; i ++, k += step ) {
vertices.push( - halfSize, k, 0, halfSize, k, 0 );
vertices.push( k, - halfSize, 0, k, halfSize, 0 );
}
// ...
lineSegments.position.set(this.center.x, this.center.y, this.center.z);