Как центрировать сетку в three.js только на X & Y - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время я центрирую объекты / модели (меш) в моей сцене, вызывая mesh.geometry.center()

. Это помогает мне разместить объект в центре на основе его ограничительной рамки.

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

Однако у меня также есть некоторые сложные 3D-модели (например - шар для боулинга, пара зубчатых скал и Эйфелева башня).

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

Мне нужен способ найти центр каждой сетки только по осям X и Y, чтобы я мог расположить эти модели в плоскости на плоскости XY без необходимости вручнуюотрегулируйте значение Z.Это возможно?

1 Ответ

0 голосов
/ 26 сентября 2018

Общий способ сделать это для объектов или деревьев объектов ... Здесь я получаю границы объекта ... затем масштабирую его так, чтобы он составлял 1 по наибольшей оси ... и центрировал его по x, zось, и сидит на Y.

    var cent = new THREE.Vector3();
    var size = new THREE.Vector3();
    var bbox = new THREE.Box3().setFromObject(yourObject);
    bbox.getCenter(cent);
    bbox.getSize(size);

    //Rescale the object to normalized space
    var maxAxis = Math.max(size.x, size.y, size.z);
    yourObject.scale.multiplyScalar(1.0 / maxAxis);

    //Now get the updated/scaled bounding box again..
    bbox.setFromObject(yourObject);
    bbox.getCenter(cent);
    bbox.getSize(size);

    yourObject.position.x = -cent.x;
    yourObject.position.y = 0;
    yourObject.position.z = -cent.z;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...