我正在尝试使用 pygame 和 pyopengl,在主窗口中我有 2 个视口、1 个大地图和 1 个小地图(都呈现相同的框架)。我需要两个地图都围绕一个不是 0,0,0 的中心旋转(假设我需要旋转中心为 -130,0,60,这需要是一个常数点)
我也需要 1 个视图来查看距离,glTranslatef(0, 0, -1000)
而第 2 个视图是glTranslatef(1, 1, -200)
两个距离都是恒定的
我试着用
gluLookAt()
glOrtho()
但它不会改变旋转.... 0,0,0 左右,否则我可能用错了。
代码如下所示:
pygame.init()
display = (1700, 1000)
pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
gluPerspective(50, (display[0] / display[1]), 0.1, 5000)
glTranslatef(0, 0, -1000) # this is the view distance i want from map 1
while True:
##### i use this function to zoom in and out with mouse Wheel
##### also the zoom in/out zooms to 0,0,0 and i need (-130,0,60)
if move_camera_distance:
if zoom_in:
glScalef(0.8,0.8,0.8)
elif zoom_out:
glScalef(1.2, 1.2, 1.2)
move_camera_distance = False
zoom_in = False
zoom_out = False
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
###### Map 1
###### Need to rotate around (-130,0,60)
###### distance from camera need to be (0,0,-1000)
glViewport(1, 1, display[0], display[1]) # splits the screen
glCallList(obj.gl_list)
DrawBuffer(bufferObj, noPoints, noCirclePoints, noCrossPoints)
###### Map 2
###### Need to rotate around (-130,0,60)
###### distance from camera need to be (0,0,-300)
glViewport(1300, 650, 400, 400) # splits the screen
glCallList(obj.gl_list)
DrawBuffer(bufferObj, noPoints, noCirclePoints, noCrossPoints)
pygame.display.flip()
pygame.time.wait(10)
我得到的输出是 2 张地图,都围绕 0,0,0 旋转,两者都距离 (0,0,-1000) 并且如果我在 While 循环中更改任何内容,它们都会一起改变。感谢帮助。