【发布时间】:2010-12-06 09:36:12
【问题描述】:
我有一个简单的 OpenGL 应用程序,它显示一条线。我将x1, y1, x2 和y2 存储在全局变量中。
旋转功能使用feedback 功能,讨论here 和转换到原点方法,建议here。它旨在围绕其中心旋转一条线。
代码如下:
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 中围绕其中心(或任意点)旋转一条线?
【问题讨论】: