Для увеличения положения мыши, которое я использовал:
glTranslatef(current.ScalePoint.x,current.ScalePoint.y,0);
glScalef(current.ScaleFactor,current.ScaleFactor,current.ScaleFactor);
glTranslatef(-current.ScalePoint.x,-current.ScalePoint.y,0);
, поэтому в основном я перевожу на новое начало координат (положение мыши), затем масштабируюсь по текущему коэффициенту масштабирования, а затем переводю обратно.
Этот тип работает в целом хорошо, но он может быть немного глючным.Моя проблема в том, что теперь я ввел смещение камеры, поэтому я попробовал что-то вроде этого:
glTranslatef(controls.MainGlFrame.GetCameraX(),
controls.MainGlFrame.GetCameraY(),0);
glTranslatef(current.ScalePoint.x,current.ScalePoint.y,0);
glScalef(current.ScaleFactor,current.ScaleFactor,current.ScaleFactor);
glTranslatef(-current.ScalePoint.x,-current.ScalePoint.y,0);
Но это не сработало, как я планировал.Как я мог правильно сделать это, зная, что:
Источник матрицы - верхний левый угол (0,0)
1 единица == 1 пиксель
Мой масштабный коэффициент
Положение моей камеры относительно расстояния до (0,0) (начало координат) и
положение мыши (от экрана к клиенту).
Спасибо