Как сохранить положение мыши пропорциональным при перетаскивании нарисованного прямоугольника?

#c #opengl #xming

#c #opengl #редактирование

Вопрос:

В настоящее время я создаю поля, которые вы можете выбирать и перетаскивать с помощью OpenGL. Прямо сейчас у меня возникает проблема, когда, когда я нажимаю на поле, оно перемещает мышь в центр и перетаскивает поле из центральной точки. Я хочу, чтобы поля перетаскивались из точки, где щелкнула мышь, а не из центра.

Это appMotionFunc, вызываемый при перемещении мыши. Строки 10 и 11 удерживают мою мышь в центре. Я не могу понять, как заставить его правильно пропорционально изменять эти строки. Координаты (0,0) находятся в верхнем левом углу окна, и они отображают ширину вправо, а высоту вниз.

     void appMotionFunc(int x, int y) {
    // Convert from Window to Scene coordinates
    float mx = (float)x;
    float my = (float)y;

    windowToScene(mx, my);

    // Your code here...
    if(rects[0]->selected){
        rects[0]->x = mx - rects[0]->w/2;
        rects[0]->y = my   rects[0]->h/2;
    }
    // Again, we redraw the scene
    glutPostRedisplay();
}
  

Так выглядит функция, рисующая прямоугольники.

 void Rect::draw(){

    if (selected){

        glColor3f(1,1,1);
        glBegin(GL_LINES);

        glVertex3f(x, y, 0.1);
        glVertex3f(x w, y, 0.1);

        glVertex3f(x w, y, 0.1);
        glVertex3f(x w, y-h, 0.1);
        
        glVertex3f(x w, y-h, 0.1);
        glVertex3f(x, y-h, 0.1);
        
        glVertex3f(x, y-h, 0.1);
        glVertex3f(x, y, 0.1);

        glEnd();
        
        glColor3f(red, green, blue);

        glBegin(GL_POLYGON);

        glVertex3f(x, y, 0.1);
        glVertex3f(x w, y, 0.1);
        glVertex3f(x w, y-h, 0.1);
        glVertex3f(x, y-h, 0.1);

        glEnd();

        
    }
    else{
        glColor3f(red, green, blue);

        glBegin(GL_POLYGON);

        glVertex2f(x, y);
        glVertex2f(x w, y);
        glVertex2f(x w, y-h);
        glVertex2f(x, y-h);

        glEnd();
    }
}
  

Я предоставлю дополнительные части программы, если это не обеспечит достаточно полного контекста для решения проблемы, но я думаю, что это весь соответствующий код.

Ответ №1:

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