gpt4 book ai didi

opengl - glRotatef 无法正常工作

转载 作者:行者123 更新时间:2023-12-02 07:26:23 25 4
gpt4 key购买 nike

我是 openGl 的初学者。我正在做非常基本的事情。只想将对象绕 x 轴旋转 20.0 度。但它不是旋转而是向上移动。

谁能帮我解决我做错的地方。

下面是我的代码,

void drawScene(){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glColor3f(1.0f, 0.0f, 0.0f);
glPushMatrix();
//glTranslatef(1.0f,0.0f,0.0f);
glRotatef(20.0f,1.0f,0.0f,0.0f);

glBegin(GL_QUADS);
glVertex3f(-0.7f, -0.5f, -5.0f);
glVertex3f(0.7f, -0.5f, -5.0f);
glVertex3f(0.4f, 0.5f, -5.0f);
glVertex3f(-0.4f, 0.5f, -5.0f);
glEnd();
glPopMatrix();

glutSwapBuffers();
}

最佳答案

旋转总是相对于它接收的顶点的坐标系发生。您的物体似乎是 Z 轴上 -5.0 的平面。旋转矩阵围绕坐标系的原点 (0, 0, 0) 旋转。由于您的对象不以原点为中心,因此它将绕原点旋转。

处理此问题的典型方法是将对象平移到原点,进行旋转,然后将其平移回来。在你的情况下,这看起来像:

glTranslatef(0.0f, 0.0f, -5.0f); //Translate back to the original location.
glRotatef(...); //Rotate.
glTranslatef(0.0f, 0.0, 5.0f); //Translate to the origin

请注意,您应该始终从下到上阅读连续的转换操作。

更新

需要注意的是,上述解决方案更多的是权宜之计。完成此操作的典型方法是以原点为中心构建模型。该坐标系通常称为“模型空间”。

您可以在模型空间中旋转点,然后将它们转换到世界中您想要的位置。在上面的代码中,我们必须将其移动到原点的唯一原因是因为模型不是在模型空间中构建的,因此我们必须将其移动到模型空间。

关于opengl - glRotatef 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351260/

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