在我的场景中,我想要“抓取”地形,然后让相机平移(使用其高度,视图向量,视野等等)与我移动光标相同)。在3D场景中实现“抓取”相机平移工具
所以最初的“抓取”点将成为世界空间中的工作点,并且我希望这个点在我拖动时保持在光标下方。
我目前的解决方案是采取以前和当前的屏幕点,不投影他们,从另一个减去一个,并翻译我的相机与该向量。这与我想要的很接近,但光标不能完全保留在最初的场景位置上,如果您在地形的边缘附近开始,这可能会有问题。
// Calculate scene points
MthPoint3D current_scene_point =
camera->screenToScene(current_point.x, current_point.y);
MthPoint3D previous_scene_point =
camera->screenToScene(previous_point.x, previous_point.y);
// Make sure the cursor didn't go off the terrain
if (current_scene_point.x != MAX_FLOAT &&
previous_scene_point.x != MAX_FLOAT)
{
// Move the camera to match the distance
// covered by the cursor in the scene
camera->translate(
MthVector3D(
previous_scene_point.x - current_scene_point.x,
previous_scene_point.y - current_scene_point.y,
0.0));
}
任何想法表示赞赏。
您是否试图在地形上“抓取”实际的3D点,或者您能否抓住Z = 0处的2D点? – genpfault 2011-06-02 21:17:25
这个想法是,光标将保持在地形上的初始3D点上,所以这就是我试图“抓住”。例如,如果您正在查看远处有山脉的场景,并且您在“抓取”了山峰中的一个山峰时,在向下拖动(或拉动)光标时,当光标保持点亮时,山峰会向您走来整个时间的高峰期。 – 2011-06-02 21:39:44
现在想想一个体面的解决方案为时已晚,但你要做的是解决这个系统问题:{从相机到鼠标的高峰时间; mountain.position.y = 0},对吧? – Calvin1602 2011-06-02 22:23:29