工程中导入一个地形,不知道它的高度,如何求出来呢,我们可以用射线求,射线和地形焦点的z值就是地形高度,下面是我写的代码片段,不能通用但是基本结构差不多。定义方向——创建raycaster——将方向向量转换成视点坐标系中——形成归一化的射线——和场景求交。
在此贴一个连接写的很好https://www.cnblogs.com/lst619247/p/9071233.html
let points = [];
let vertexes = [];
let directVector = new THREE.Vector3(0,0,-1); //这个是方向
let raycaster = new THREE.Raycaster();
raycaster.setFromCamera(directVector,this.viewer.getCamera()); //根据坐标吧坐标转换成标准坐标系中,并且在视点坐标系中形成射线,起点是相机,方向是上面相对相机的方向,并且是归一化的
let intersects = raycaster.intersectObjects(this.viewer.scene.terrainLayers);
if(intersects.length > 0) {
points.push(intersects[0].point);
vertexes.push(intersects[0].point.x);
vertexes.push(intersects[0].point.y);
vertexes.push(intersects[0].point.z);
}
carCameraHeight = intersects[0].point.z+4.0;
setFromCamera: function ( coords, camera ) {
if ( ( camera && camera.isPerspectiveCamera ) ) {
this.ray.origin.setFromMatrixPosition( camera.matrixWorld );
this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();
} else if ( ( camera && camera.isOrthographicCamera ) ) {
this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera
this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );
} else {
console.error( 'THREE.Raycaster: Unsupported camera type.' );
}
}