我有一个地形山脉与相机飞行视图定位接近heightmap。摄像机使用标准键盘控制,不允许在y轴上移动;它保持在设定的y轴上。由于地形不是一个均匀的水平和随机渲染。如何让相机跟随地形高度图?这里是example。下面是一个尝试添加raycaster的规模超过地形。所有代码都在项目的animate函数中。我注意到当摄像机试图放大地形时。如果太陡,它会直接通过。此外,它不会随着地形下降。摄像头保持在最高位置。
var raycaster = new THREE.Raycaster(camera.position.clone(), new THREE.Vector3(0, -1, 0));
raycaster.ray.origin.copy(camera.position);
var intersections = raycaster.intersectObjects( terrain );
if (intersections.length > 0){
var distance = intersections[0].distance;
if(distance > 0 && distance < 10){
camera.position.y= intersections[0].point.y + 20;
}
}
字符串
3条答案
按热度按时间jfewjypa1#
在这个片段中:
字符串
...距离> 10的交点将被忽略,但随后摄影机将移动到地形上方+20处。我怀疑这就是为什么它不能跟随地形下降。我不太确定“太陡”的问题,但这可能是类似的…试着将光线投射器保持在高于最大地形高度的高度,而不是相机的位置。
如果问题仍然存在,您可能需要包括现场演示或地形导出。
cgfeq70w2#
将camera.position复制为一个向量,然后提升vector position.y并将raycaster设置为向量。
字符串
6l7fqoea3#
字符串