2010-01-18 173 views
3

我正在制作2D游戏。我希望能够在围绕中心点旋转一定量后在屏幕上渲染纹理。基本上这是为了围绕玩家进行关卡旋转。玩家位置是旋转点,玩家的方向是角度。此代码不会工作:在OpenGL中围绕中心点旋转四角形

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

尝试扭转

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

glRotatef(rotation,0,0,1) 

您要翻译的球员,但随后绕原点(不是玩家)

插图从red bookrotate http://www.glprogramming.com/red/images/Image52.gif

+0

它似乎不允许我将纹理移动到正确的位置。当我尝试移动播放器时,它会卡住。奇。 谢谢你的回复。 我可能会使用三角函数来做到这一点。我只会更喜欢更简单的方法。 – 2010-01-19 00:18:27

+0

调试的一种方法:以0旋转在原点处启动所有内容,然后逐渐重新添加翻译和旋转,并确保它们在您期望的位置。 – cobbal 2010-01-19 01:24:58

0

除非你有很好的r如果不这样做,我会离开绘图代码,然后改变相机角度。可能最简单的方法是使用gluLookAt。在你的情况下,你显然会看着玩家的位置,只是改变最后两个参数给出的“向上方向”。

+0

我该怎么做?我根本不明白这个功能。 我知道有3组坐标,但我不知道该怎么办。 我会赌一把,认为眼球坐标应该在球员坐标上,中心球员也应该如此。向上坐标应该是一个坐标,这个坐标是我想要的玩家角度。我猜想三角几何可以做到这一点。 – 2010-01-19 00:25:11

+0

大失败: gluLookAt(point [0],point [1],0,point [0],point [1],0,point [0] + maths.sin(rotation),point [1] - maths.cos(rotation),0) – 2010-01-19 00:31:08

+0

gluLookAt可能不是您想要的,因为您正在定位模型而不是相机。虽然这是可能的,但这没有多大意义。 – cobbal 2010-01-19 01:23:29