如何拉伸几何图形,使其边界框恰好适合Three.js中的屏幕

mtx

我正在寻找一种将几何图形(所有顶点z = 0)拉伸到可见屏幕(HTML 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);
  }

This however is using camera position so geometry will fit the view. However, I am looking for the way to stretch the geometry so its bounding box precisely fits the screen, ideally with some predefined padding. Since this is not related to camera settings I need to manipulate geometry vertices values to stretch it horizontally. How to achieve this? I want to retain values of vertices as they relate to underlying data.

I assume this would need to be a function of canvas dimensions (width, height), geometry coordinates, and camera settings returning new geometry coordinates? Any hint is appreciated.

mtx

A short answer to this question is: to set camera's aspect ratio to 1.0.

This will work if geometry bounds are in clip space already [-1, 1 ]. If not they have to be converted to clip space first.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在一个对象中组合简单的几何图形?

来自分类Dev

Three.js DoubleSided材料不会在平面参数化几何图形的两侧投射阴影

来自分类Dev

WPF中的几何图形

来自分类Dev

自定义three.js几何图形不会显示其外观

来自分类Dev

Three.js平铺,使用平面几何图形具有多个纹理

来自分类Dev

Three.js-我可以对几何图形“应用”位置,旋转和缩放吗?

来自分类Dev

如何拉伸图像以使其适合javafx的整个屏幕

来自分类Dev

创建JSON时,Vividsolutions JTS中的几何图形失败

来自分类Dev

链接几何图形的边界

来自分类Dev

如何更改p5js 3d几何图形的填充

来自分类Dev

使用ShaderMaterial为自定义几何图形加载纹理在Three.js中不起作用

来自分类Dev

如何使用js或jquery捕获html中的屏幕截图

来自分类Dev

如何在Three.js中拉伸圆几何?

来自分类Dev

如何在CSS中为几何图形添加边框?

来自分类Dev

如何在three.js中制作加载屏幕?

来自分类Dev

如何控制ggplot2中的哪些图例中显示哪些几何图形?

来自分类Dev

如何在d2d中设置外部几何图形蒙版,因此d2d仅在该几何图形外部绘制

来自分类Dev

在场景中多次添加相同的几何图形?

来自分类Dev

如何在openlayers 6中对不同类型的几何图形进行聚类?

来自分类Dev

如何在Node JS中拍摄整个屏幕的屏幕截图?

来自分类Dev

WPF中的几何图形

来自分类Dev

自定义three.js几何图形不会显示其外观

来自分类Dev

如何使用Three.js在JavaScript中从数组中创建几何图形?

来自分类Dev

如何更改p5js 3d几何图形的填充

来自分类Dev

如何选择图形以编程方式使其适合Matlab中的屏幕?

来自分类Dev

如何在d2d中设置外部几何图形蒙版,以便d2d仅在该几何图形外部绘制

来自分类Dev

如何在Postgis中更新复杂几何图形的特定点

来自分类Dev

在 WPF 中,如何使用路径标记语法绘制复合几何图形?

来自分类Dev

如何在three.js中修复这个几何图形

Related 相关文章

  1. 1

    如何在一个对象中组合简单的几何图形?

  2. 2

    Three.js DoubleSided材料不会在平面参数化几何图形的两侧投射阴影

  3. 3

    WPF中的几何图形

  4. 4

    自定义three.js几何图形不会显示其外观

  5. 5

    Three.js平铺,使用平面几何图形具有多个纹理

  6. 6

    Three.js-我可以对几何图形“应用”位置,旋转和缩放吗?

  7. 7

    如何拉伸图像以使其适合javafx的整个屏幕

  8. 8

    创建JSON时,Vividsolutions JTS中的几何图形失败

  9. 9

    链接几何图形的边界

  10. 10

    如何更改p5js 3d几何图形的填充

  11. 11

    使用ShaderMaterial为自定义几何图形加载纹理在Three.js中不起作用

  12. 12

    如何使用js或jquery捕获html中的屏幕截图

  13. 13

    如何在Three.js中拉伸圆几何?

  14. 14

    如何在CSS中为几何图形添加边框?

  15. 15

    如何在three.js中制作加载屏幕?

  16. 16

    如何控制ggplot2中的哪些图例中显示哪些几何图形?

  17. 17

    如何在d2d中设置外部几何图形蒙版,因此d2d仅在该几何图形外部绘制

  18. 18

    在场景中多次添加相同的几何图形?

  19. 19

    如何在openlayers 6中对不同类型的几何图形进行聚类?

  20. 20

    如何在Node JS中拍摄整个屏幕的屏幕截图?

  21. 21

    WPF中的几何图形

  22. 22

    自定义three.js几何图形不会显示其外观

  23. 23

    如何使用Three.js在JavaScript中从数组中创建几何图形?

  24. 24

    如何更改p5js 3d几何图形的填充

  25. 25

    如何选择图形以编程方式使其适合Matlab中的屏幕?

  26. 26

    如何在d2d中设置外部几何图形蒙版,以便d2d仅在该几何图形外部绘制

  27. 27

    如何在Postgis中更新复杂几何图形的特定点

  28. 28

    在 WPF 中,如何使用路径标记语法绘制复合几何图形?

  29. 29

    如何在three.js中修复这个几何图形

热门标签

归档