gpt4 book ai didi

c++ - 我们如何在 openGL 中相对于一个点(而不是原点)旋转 2d 中的图形?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:47 25 4
gpt4 key购买 nike

使用 glrotatef() 函数将图形相对于原点旋转指定的角度。如何在不手动使用变换矩阵的情况下相对于另一点旋转同一个图形?谢谢!

void display(){
glClear(GL_COLOR_BUFFER_BIT);
gluOrtho2D(0,499,0,499);
glMatrixMode(GL_PROJECTION);
glColor3f(1,0,0);
drawhouse();
glFlush();
glColor3f(0,0,1);
glTranslatef(0.5 ,0.5,0.5);
glRotatef(45,1,1,1);
glTranslatef(-0.5 ,-0.5,-0.5);
drawhouse();
glFlush();
}

这是发生的情况的屏幕截图。 http://postimage.org/image/q81bhupw/

最佳答案

基本上:

如果你想围绕P旋转,通过-P平移(这样P移动到原点),然后执行你的旋转, 然后通过 P 进行翻译(以便原点移回 P)。

glTranslatef(P.x, P.y, P.z);
glRotatef(angle, A.x, A.y, A.z);
glTranslatef(-P.x, -P.y, -P.z);

(注意:这是“倒序”的,因为根据 OpenGL 规则,最后添加的变换是第一个应用的变换。)

因此在您的设置代码中,您需要这些调用:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 499, 0, 499);
glMatrixMode(GL_MODELVIEW);

然后您的 display() 方法应该如下所示:

void display() {
glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();
glTranslatef(0.5f, 0.5f, 0.5f);
glRotatef(45.f, 1.f, 1.f, 1.f);
glTranslatef(-0.5f, -0.5f, -0.5f);
glColor3f(0.f, 0.f, 1.f);
drawhouse();
glFlush();
}

关于c++ - 我们如何在 openGL 中相对于一个点(而不是原点)旋转 2d 中的图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236929/

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