Как растянуть геометрию так, чтобы ее ограничивающая рамка точно вписывалась в экран в Three. js - PullRequest
1 голос
/ 25 января 2020

Я ищу способ растянуть геометрию (со всеми вершинами z = 0) на видимый экран (HTML Элемент холста).

На данный момент я разработал, как подогнать геометрию к экрану, например:

geometry fitting the canvas

со следующим кодом, который в основном настраивает camera.z для подгонки геометрии к высоте холста.

    geometry.computeBoundingBox();

    const bbox = geometry.boundingBox;
    const geometryCenter = bbox.getCenter(new THREE.Vector3());
    const geometrySize = bbox.getSize(new THREE.Vector3())

    const cameraZ = getZFromGeometrySize(camera.fov, geometrySize);

    const scale = getScaleFromZ(height, camera.fov, cameraZ);

    const zoomTransform = d3.zoomIdentity
      .translate(width * 0.5, height * 0.5)
      .scale(scale);

    zoom.transform(canvasSelection, zoomTransform);

    camera.position.set(geometryCenter.x, geometryCenter.y, cameraZ)

    camera.updateProjectionMatrix();

с приведенными ниже определениями функций:

  function getZFromGeometrySize(fov, geometrySize) {
    const maxSize = Math.max( geometrySize.x, geometrySize.y );

    const halfFOVRadians = toRadians(fov * 0.5);

    return maxSize / ( 2 * Math.tan( halfFOVRadians ) );
  }


  function getScaleFromZ (height, fov, z) {

    const halfFOVRadians = toRadians(fov * 0.5);

    return height / (2 * Math.tan(halfFOVRadians) * z);
  }

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

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

1 Ответ

0 голосов
/ 18 марта 2020

Краткий ответ на этот вопрос: установить соотношение сторон камеры на 1,0.

Это будет работать, если геометрические границы уже находятся в пространстве клипа [-1, 1]. Если нет, они должны быть сначала преобразованы в пространство клипа.

...