在OpenGL中绕中心点旋转四边形

3 投票
2 回答
4030 浏览
提问于 2025-04-15 18:10

我正在制作一个2D游戏。我想在屏幕上显示一个纹理,并且希望它能够围绕一个中心点旋转一定的角度。简单来说,这是为了让关卡围绕玩家旋转。玩家的位置就是旋转的中心点,而玩家的朝向则是旋转的角度。不过,这段代码是不能工作的:

def draw_texture(texture,offset,size,a,rounded,rotation,point):
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity() #Loads model matrix
    glColor4f(1,1,1,float(a)/255.0)
    glTranslatef(point[0],point[1],0)
    glRotatef(rotation,0,0,1)
    glBindTexture(GL_TEXTURE_2D, texture)
    if rounded == 0:
        glBegin(GL_QUADS)
        glTexCoord2f(0.0, 0.0)
        glVertex2i(*offset) #Top Left
        glTexCoord2f(0.0, 1.0)
        glVertex2i(offset[0],offset[1] + size[1]) #Bottom Left
        glTexCoord2f(1.0, 1.0)
        glVertex2i(offset[0] + size[0],offset[1] + size[1]) #Bottom, Right
        glTexCoord2f(1.0, 0.0)
        glVertex2i(offset[0] + size[0],offset[1]) #Top, Right
        glEnd()
    else:
        #Nothing important here
    glEnd()

有没有办法让它正常运行呢?谢谢。

2 个回答

0

除非你有特别的理由去改变绘图的代码,否则我建议你保持绘图代码不变,只需要调整一下相机的角度。最简单的方法可能就是使用gluLookAt这个函数。在你的情况下,你显然是要朝着玩家的位置看,只需要改变最后两个参数中的“上方向”就可以了。

2

试着反转一下

glTranslatef(point[0],point[1],0)

然后

glRotatef(rotation,0,0,1)

你是要把东西转换到玩家身上,但要围绕原点旋转(而不是围绕玩家)

下面是来自红色书籍的插图:rotate

撰写回答