В моей сцене у меня есть рельеф, который я хочу "захватить", а затем передвинуть курсор на панораму камеры (с ее высотой, вектором обзора, полем зрения и т. Д., Все остальными),
Итак, начальная точка «захвата» будет рабочей точкой в мировом пространстве, и я бы хотел, чтобы эта точка оставалась под курсором при перетаскивании.
Мое текущее решение состоит в том, чтобы взять предыдущие и текущие точки экрана, снять их, вычесть одну из другой и перевести мою камеру с этим вектором. Это близко к тому, что я хочу, но курсор не остается точно над начальной позицией сцены, что может быть проблематично, если вы начинаете у края ландшафта.
// 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));
}
Любые идеи приветствуются.