gpt4 book ai didi

c++ - OpenGL 二维旋转

转载 作者:行者123 更新时间:2023-11-30 04:36:45 24 4
gpt4 key购买 nike

我有一个简单的 OpenGL 应用程序,它显示一条线。我将 x1, y1, x2y2 存储在全局变量中。

旋转功能使用反馈功能,已讨论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 中围绕它的中心(或任意点)旋转一条线?

最佳答案

在我看来,您的翻译方向错误,原点位于左下角的视口(viewport)之外。你想将原点移动到你想要平移的点——所以如果原点在左下角,你需要平移 +center_x, +center_y。旋转,向后平移 (-center_x, -center_y),然后绘制。

关于c++ - OpenGL 二维旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com