#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:
Дельта, о которой я говорил в этих строках, должна вычисляться только один раз за щелчок мыши, а не при каждом перемещении мыши. Простая ошибка, на разгадку которой у меня ушло слишком много времени.