В настоящее время я создаю блоки, которые вы можете выбирать и перетаскивать с помощью 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();
}
}
Я предоставлю больше частей программы, если это не дает достаточно полного контекста для решения проблемы, но я думаю, что это весь соответствующий код.