在OpenGL中旋转Quad无法正确显示(rotatef)

时间:2014-04-01 13:16:41

标签: opengl rotation lwjgl

我目前正在使用LWJGL创建一个简单的2D游戏。我想创建一些对象以使事情变得更容易。目前简单地绘制Quad对象工作正常,但后来我决定实现一种绘制四边形旋转的方法。

这是绘制旋转Quad的代码:

@Override
public void draw(float angle) {
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // translate the quad to the origin before rotation
    glTranslatef(-(this.x + (this.w / 2)), -(this.y + (this.h / 2)), 0);

    glRotatef(angle, (this.x + (this.w / 2)), (this.y + (this.h / 2)), 0);

    // translate the quad back to its original position
    glTranslatef((this.x + (this.w / 2)), (this.y + (this.h / 2)), 0);

    glColor4f(this.color.getRed(), this.color.getAlpha(), this.color.getBlue(), this.color.getAlpha());
    glBegin(GL_QUADS);
        glVertex2f(this.x, this.y);
        glVertex2f(this.x + this.w, this.y);
        glVertex2f(this.x + this.w, this.y + this.h);
        glVertex2f(this.x, this.y + this.h);
    glEnd();
}

我这样画一个Quad Quad q = new Quad(10,10,100,100); //新四(x,y,w,h) q.draw(Math.PI); //它是180度,但它不像它那样画出四边形

这就是它的绘制方式

Quad

我不确定这里发生了什么。

作为附带问题

如果我只是使用2D旋转矩阵来计算新的x和y,然后简单地计算其他x和y,那会不会产生同样的效果?

1 个答案:

答案 0 :(得分:3)

glRotatef的参数定义轴。并且您想围绕z轴旋转。因此:

glRotatef(angle, 0, 0, 1);