1、将模型,场景,点云加入camera场景中,camera.add(object),然后object.position.set(0,0,10),这样模型的位置总是相对于相机的z轴正10位置。
注意,我在实习中,用camera.add(model); scene.add(camera)在我的电脑无报错,在前端的电脑就报错,受环境影响,需要灵活变换。用中间变量加入camera中,操作如下:
camera.add(temp);
temp.position.x =0;
temp.position.y =1;
temp.position.z =0;//永远放在相机的y方向1处
temp.getWorldPosition(model.position);//将上面的本地坐标转化为世界坐标,并且赋值给模型,这样就可以直接渲染了
scene.add(model);
2、另一种方法是找到相机的前向矢量,可以编写'pLight.position = camera.position + camForwardVec * distance;'。
3、还有一种比较笨的方法,就是比较现在和上一次位置移动的情况,x变得比y变得多就是在x轴上移动,同理yz。不过这一种方法仅限于移动位置局限性比较大的情况,比如道路场景判断汽车移动的方向。
let tempX = targetPosition1.x - targetPosition.x; //现在位置和上一次位置相减
let tempY = targetPosition1.y - targetPosition.y;
let abTempX = tempX > 0? tempX:-tempX; //绝对值,用来判断沿着x轴还是y轴
let abTempY = tempY > 0? tempY:-tempY;
if(abTempX>abTempY && tempX>0)
{
forwardMode = 0; //沿x轴正方向移动
}
else if(abTempX>abTempY &&tempX<0)
{
forwardMode = 1; //沿x轴负方向移动
}
else if(abTempX<abTempY && tempY>0)
{
forwardMode = 2; //沿y轴正方向移动
}
else if(abTempX<abTempY && tempY<0)
{
forwardMode = 3; //沿y轴负方向移动
}
三种方法实测有效并根据不同的场景运用不同的方法,欢迎补充