У меня есть простое приложение OpenGL, которое отображает строку.Я храню x1, y1, x2
и y2
в глобальных переменных.
Функция поворота использует функциональность feedback
, обсуждаемую здесь и метод перевода в начало координат, предлагаемый здесь .Она предназначена для поворота линии вокруг ее центра.
Вот код:
void rotate( float theta )
{
GLfloat* buff = new GLfloat[5];
glFeedbackBuffer( 5, GL_2D, buff );
glRenderMode( GL_FEEDBACK );
int center_x = x1 + ( x2 - x1 )/2;
int center_y = y1 + ( y2 - y1 )/2;
glPushMatrix();
glTranslatef( -center_x, -center_y, 0 );
glRotatef( theta, 0, 0, 1 );
glTranslatef( center_x, center_y, 0 );
line();
glPopMatrix();
x1 = (int)buff[1];
y1 = (int)buff[2];
x2 = (int)buff[3];
y2 = (int)buff[4];
delete[] buff;
glutPostRedisplay();
}
Однако оба перевода, похоже, не имеют большого эффекта - линия все еще вращается вокруг нижнего левого углаокна.Кроме того, линия обрезается, если она не помещается на видимой поверхности (этого не происходит с закомментированными переводами - линия просто отказывается двигаться, если она выпадает за пределы видимой поверхности).
Почему этот код не работает?Как повернуть линию вокруг ее центра (или любой произвольной точки) в 2D?