Graphics 在Three.js中如何拉伸几何体,使其边界框精确地适合屏幕
我正在寻找将几何体(所有顶点z=0)拉伸到可见屏幕(HTML画布元素)的方法 现在,我已经解决了如何将几何体适配到屏幕上,如下所示: 下面的代码基本上调整camera.z以使几何体适合画布的高度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
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],则此操作将起作用。如果没有,则必须首先将其转换为剪辑空间