Я использую SDL и OpenGL для этого проекта. Мой экран при запуске программы имеет размер 640 x 480, как и моя настройка glOrtho. Итак, программа запускается синхронизированной. Но моя программа позволяет пользователю создавать выделение с помощью мыши части экрана для увеличения. Например, пользователь может выбрать область от 320 240 (_mouseStart) до 640 480 (_mouseEnd). Эта область выбора затем передается в glOrtho, чтобы она могла центрироваться и увеличивать выбранную область. Моя проблема в том, что я пытаюсь выбрать область уже увеличенной области, потому что координаты мыши SDL находятся в диапазоне от 0,0 до 640,480 вместо новой выбранной области, которая в этом случае была 320, 240 до 640,480. Мне нужен способ, чтобы рассчитать, каково реальное положение мыши при попытке выделить и уже увеличено в области.
Я не могу публиковать фотографии здесь, но я создал пост в gamedev.net, к которому вы могли бы обратиться, если вам нужна дополнительная информация. http://www.gamedev.net/topic/636257-opengl-2d-selection-scaling-multiple-times/
Здесь я вычисляю все позиции мыши после того, как пользователь выбрал область (КОТОРОЕ СЕЙЧАС ПРАВИЛЬНО)
// modify mouse coordinates to fit scaled image
_mouseStart.x = ((_mouseStart.x / SCREEN_WIDTH) * (_portionEnd.x - _portionStart.x)) + _portionStart.x;
_mouseStart.y = ((_mouseStart.y / SCREEN_HEIGHT) * (_portionEnd.y - _portionStart.y)) + _portionStart.y;
_mouseEnd.x = ((_mouseEnd.x / SCREEN_WIDTH) * (_portionEnd.x - _portionStart.x)) + _portionStart.x;
_mouseEnd.y = ((_mouseEnd.y / SCREEN_HEIGHT) * (_portionEnd.y - _portionStart.y)) + _portionStart.y;
Вот как я сбрасываю glOrtho для центрирования и отображения выбранной области.
glLoadIdentity();
glOrtho(_portionStart.x, _portionEnd.x, _portionEnd.y, _portionStart.y, 1, -1);
Я создал изображение, которое объясняет процесс (я надеюсь)
Красные координаты в красном прямоугольнике — это координаты, которые вы должны получить из положения мыши. Вы можете использовать эти координаты для вычисления значений для вашего текущего увеличенного видового экрана (зеленые координаты). Чтобы получить окончательные координаты без масштабирования (синие значения), вы должны добавить смещение зеленого прямоугольника (228,88).
Обратите внимание, что мой пример не лучший, потому что смещение зеленого прямоугольника и высота зеленого прямоугольника идентичны (оба значения 228)
Других решений пока нет …