在我的场景中,我想要“抓住”地形,然后在移动光标时让相机平移(其高度,视图矢量,视野等等都保持不变)。
所以最初的“抓取”点将是世界空间中的工作点,我希望这一点在我拖动时保持在光标下。
我目前的解决方案是采用先前和当前的屏幕点,取消投影,从另一个中减去一个,并使用该矢量翻译我的相机。这接近我想要的,但是光标并没有完全保持在初始场景位置,如果你从地形边缘附近开始,这可能会有问题。
// 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));
}
任何想法都表示赞赏。
答案 0 :(得分:1)
多睡一会儿:
即使用screenToScene()
ray.start是camera.pos,ray.dir是(screenToScene() - camera.pos)
- > ray.start.y + x * ray.dir.y = initialpos_worldspace.y
- > x =(initialpos_worldspace.y - ray.start.y)/rad.dir.y(小心dividebyzeroexception)
- >在NewPos_worldspace = ray.start + x * ray.dir
中重新注入x但最后一点看起来很可疑。