C++/OpenGL - 旋转矩形

标签 c++ opengl rotation

对于我的项目,我需要旋转一个矩形。我想,这很容易,但我在运行它时遇到了不可预测的行为......

代码如下:

    glPushMatrix();
    glRotatef(30.0f, 0.0f, 0.0f, 1.0f);
    glTranslatef(vec_vehicle_position_.x, vec_vehicle_position_.y, 0);
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glBegin(GL_QUADS);

        glTexCoord2f(0.0f, 0.0f);
        glVertex2f(0, 0);
        glTexCoord2f(1.0f, 0.0f);
        glVertex2f(width_sprite_, 0);
        glTexCoord2f(1.0f, 1.0f);
        glVertex2f(width_sprite_, height_sprite_);
        glTexCoord2f(0.0f, 1.0f);
        glVertex2f(0, height_sprite_);

    glEnd();
    glDisable(GL_BLEND);
    glDisable(GL_TEXTURE_2D);
    glPopMatrix();

问题在于,我的矩形在旋转时在窗口中的某处进行平移。换句话说,矩形不保持位置:vec_vehicle_position_.xvec_vehicle_position_.y

有什么问题?

谢谢

最佳答案

您需要翻转转换的顺序:

glRotatef(30.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(vec_vehicle_position_.x, vec_vehicle_position_.y, 0);

成为

glTranslatef(vec_vehicle_position_.x, vec_vehicle_position_.y, 0);
glRotatef(30.0f, 0.0f, 0.0f, 1.0f);

关于C++/OpenGL - 旋转矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1009150/

相关文章:

c++ - 为什么我的double变量通过添加c++来显示nan?

c# - 不支持 8 位无符号整数 vector

c++ - 无法在 Linux 上找到 SDL2_gfx 库

python - 在numpy中使用旋转矩阵有效地旋转一组点

c++ - 是什么导致 “Could not find QtWebEngineProcess”错误?

c++ - Qt 多线程 QThreads 保持 TCP 连接并被重用

flash - glGenTextures GLuint 还是数组?

opengl - glActiveTexture() 抛出 GL_INVALID_ENUM

ios - 使用最短角度旋转 Sprite 节点

matlab - 如何使用 MATLAB 围绕不是图像中心点的点旋转图像?