Конвертировать положение окна SDL в положение мира OpenGL

Я использую 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);

2

Решение

Я создал изображение, которое объясняет процесс (я надеюсь)

  • Синий прямоугольник — это ваш (не увеличенный) базовый видовой экран.
  • Маленький зеленый прямоугольник — это область, выбранная в базовом окне просмотра
  • Большой зеленый прямоугольник — это новый увеличенный видовой экран
  • В увеличенном окне просмотра выделен новый прямоугольник (красный)

Красные координаты в красном прямоугольнике — это координаты, которые вы должны получить из положения мыши. Вы можете использовать эти координаты для вычисления значений для вашего текущего увеличенного видового экрана (зеленые координаты). Чтобы получить окончательные координаты без масштабирования (синие значения), вы должны добавить смещение зеленого прямоугольника (228,88).

Обратите внимание, что мой пример не лучший, потому что смещение зеленого прямоугольника и высота зеленого прямоугольника идентичны (оба значения 228)

вычисление

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]