我正在制作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()
任何方式让它运作?谢谢。
答案 0 :(得分:2)
尝试倒车
glTranslatef(point[0],point[1],0)
和
glRotatef(rotation,0,0,1)
你正在翻译给玩家,但随后围绕原点(不是玩家)旋转
来自red book:rotate http://www.glprogramming.com/red/images/Image52.gif
的插图答案 1 :(得分:0)
除非你有充分的理由不这样做,否则我会单独留下绘图代码,只需更改摄像机角度即可。可能最简单的方法是使用gluLookAt。在你的情况下,你显然会看到玩家的位置,只需改变最后两个参数中给出的“向上方向”。