Javascript threejs,将对象保持在另一个对象的表面上

Javascript threejs,将对象保持在另一个对象的表面上,javascript,three.js,Javascript,Three.js,我正在生成一个地形几何体,如下所示: var geometry = new THREE.PlaneGeometry(100, 100, 100 , 100 ); for (var i = 0, l = geometry.vertices.length; i < l; i++) { geometry.vertices[i].z = Math.random() / 2; } geometry.computeFaceNormals()

我正在生成一个地形几何体,如下所示:

     var geometry = new THREE.PlaneGeometry(100, 100, 100 , 100 );
     for (var i = 0, l = geometry.vertices.length; i < l; i++) {
          geometry.vertices[i].z  = Math.random() / 2;
     }
     geometry.computeFaceNormals();
     floor = new THREE.Mesh(geometry, floorMaterial);
var几何体=新的三个平面几何体(100100100100);
对于(var i=0,l=geometry.vertices.length;i
还有另一个object3d,它应该在地板表面上行走。 我怎样才能知道我的物体需要上升或下降多少?也许是和雷卡斯特

[已编辑] 第一部分已经解决了,但第二部分是,光线投射器返回的距离不正确,它在某种程度上为每个面翻转。检查示例:

正如您已经猜到的,三个.Raycaster应该确实有效

在更新循环中,需要向下投射光线

var raycaster = new THREE.Raycaster();
raycaster.set(yourMovingObject.position, THREE.Vector3(0, -1, 0));
之后,您需要确定物体需要停止“坠落”的距离

var distance = 40; //set to your own measurements
最后但并非最不重要的是,检查交叉口

var velocity = new THREE.Vector3();

var intersects = raycaster.intersectObject(floor); //use intersectObjects() to check the intersection on multiple

//new position is higher so you need to move you object upwards
if (distance > intersects[0].distance) {        
    yourMovingObject.position.y += (distance - intersects[0].distance) - 1; // the -1 is a fix for a shake effect I had
}

//gravity and prevent falling through floor
if (distance >= intersects[0].distance && velocity.y <= 0) {
    velocity.y = 0;
} else if (distance <= intersects[0].distance && velocity.y === 0) {
    velocity.y -= delta ;
}

yourMovingObject.translateY(velocity.y);
var-velocity=new-THREE.Vector3();
var intersects=光线投射器。intersectObject(地板)//使用intersectObjects()检查多个对象上的交点
//新位置更高,所以您需要向上移动对象
如果(距离>与[0]相交,则距离){
yourMovingObject.position.y+=(距离-相交[0]。距离)-1;//1是我的抖动效果的修复
}
//重力作用,防止从地板上坠落

if(distance>=intersects[0]。distance&&velocity.y谢谢你的回答,它帮助我理解了这个概念,但我仍然无法正确理解。好的,我提供了一个链接,我遇到的问题很清楚,只需单击几次。光线[i]这是一个输入错误。我将查看您的示例警告:您正在生成非平面四边形。如果您按照答案中的说明进行操作,您的程序将运行良好。