Увеличиваете положение мыши с переводом? - PullRequest
2 голосов
/ 01 июля 2010

Для увеличения положения мыши, которое я использовал:

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) (начало координат) и

положение мыши (от экрана к клиенту).

Спасибо

1 Ответ

2 голосов
/ 01 июля 2010

Более безопасно (а также для повторного использования кода) сначала отменить проекцию координатной точки мыши (от координат окна до координат модели), даже если вы знаете, как выполняется проекция.

Вы можете использовать следующую функцию:

void unProject(int ix, int iy, int &ox, int &oy)
{
 // First, ensure that your OpenGL context is the selected one
 GLint viewport[4];
 GLdouble projection[16];
 GLdouble modelview[16];

 glGetIntegerv(GL_VIEWPORT, viewport);
 glGetDoublev(GL_PROJECTION_MATRIX, projection);
 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

 int xx = ix;
 int yy = viewport[3] - iy;
 GLdouble x, y, z;
 gluUnProject(xx, yy, 0 /*check*/, modelview, projection, viewport, &x, &y, &z);

 ox = (int) x;
 oy = (int) y;
}

На выходе получается правильная точка в координатах модели для масштабирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...