Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 在Three.js中如何拉伸几何体,使其边界框精确地适合屏幕_Graphics_Three.js_Geometry_Coordinate Transformation - Fatal编程技术网

Graphics 在Three.js中如何拉伸几何体,使其边界框精确地适合屏幕

Graphics 在Three.js中如何拉伸几何体,使其边界框精确地适合屏幕,graphics,three.js,geometry,coordinate-transformation,Graphics,Three.js,Geometry,Coordinate Transformation,我正在寻找将几何体(所有顶点z=0)拉伸到可见屏幕(HTML画布元素)的方法 现在,我已经解决了如何将几何体适配到屏幕上,如下所示: 下面的代码基本上调整camera.z以使几何体适合画布的高度 geometry.computeBoundingBox(); const bbox = geometry.boundingBox; const geometryCenter = bbox.getCenter(new THREE.Vector3()); const ge

我正在寻找将几何体(所有顶点z=0)拉伸到可见屏幕(HTML画布元素)的方法

现在,我已经解决了如何将几何体适配到屏幕上,如下所示:

下面的代码基本上调整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


如果几何体边界已在剪辑空间中[-1,1],则此操作将起作用。如果没有,则必须首先将其转换为剪辑空间

这个问题的简单答案是:将相机的纵横比设置为1.0

如果几何体边界已在剪辑空间中[-1,1],则此操作将起作用。如果没有,则必须首先将其转换为剪辑空间