1

这里没有任何问题能够提供帮助。我想在 LWJGL 中围绕它的中心旋转一个精灵,一个带有纹理的四边形。

这是我的代码,目前,它围绕其他一些中心旋转。

public void draw(int x, int y, int rot) {

// 存储当前模型矩阵 glPushMatrix();

    // bind to the appropriate texture for this sprite
    texture.bind();

    // translate to the right location and prepare to draw
    glTranslatef(x, y, 0);
            glRotatef(rot,0f,0f,1f);
    // draw a quad textured to match the sprite
    glBegin(GL_QUADS);
    {
    texture.bind(); // or GL11.glBind(texture.getTextureID());

    glBegin(GL_QUADS);
        glTexCoord2f(0,0);
        glVertex2f(100,100);
        glTexCoord2f(1,0);
        glVertex2f(100+texture.getTextureWidth()*2,100);
        glTexCoord2f(1,1);
        glVertex2f(100+texture.getTextureWidth()*2,100+texture.getTextureHeight()*2);
        glTexCoord2f(0,1);
        glVertex2f(100,100+texture.getTextureHeight()*2);
    glEnd();
    }
    glEnd();

    // restore the model view matrix to prevent contamination
    glPopMatrix();
}
4

1 回答 1

4

围绕它们的中心(或任何偏移点,实际上)旋转 2d 精灵意味着将要旋转的点平移到窗口的原点。如果它是你的精灵的中间,这意味着将精灵翻译成点:
-sprite.width/2 , -sprite.height/2
设想精灵被“绘制”,四分之一在屏幕区域,四分之三在屏幕区域之外此时屏幕区域。现在是旋转它的时候了,它仍然会围绕原点旋转,但这恰好也是精灵的中间。最后,将精灵翻译回您希望它在屏幕上显示的位置。
在旁注中,我不明白为什么人们评论他的方式已被弃用。这与问题完全无关,并且在某些情况下不想使用更新的功能。

于 2013-02-23T12:27:57.613 回答