我通过Pygame使用OpenGL来渲染事物,我想获得OpenGL鼠标信息。我知道我可以直接通过Pygame获得鼠标位置&点击状态,但我需要在OpenGL坐标中的鼠标位置,而不仅仅是视口的像素坐标。问题是我无法让OpenGL的鼠标回调触发。考虑下面的代码:在Pygame中使用OpenGL鼠标回调的问题
import pygame
from pygame.locals import DOUBLEBUF, OPENGL
from OpenGL.GLUT import glutMouseFunc, glutInit
def mouse_handler(button, state, x, y):
print("mouse handler: ",button, state, x, y)
pygame.init()
display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
glutInit()
glutMouseFunc(mouse_handler)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
pygame_mouse_pos = pygame.mouse.get_pos()
print(pygame_mouse_pos)
当运行该代码将根据pygame的,其从线路pygame_mouse_pos = pygame.mouse.get_pos()
得到启动鼠标位置的连续打印输出。但我无法获得OpenGL鼠标回调,设置为glutMouseFunc(mouse_handler)
,即可启动。有人可以告诉我我做错了什么吗?这段代码在Python 2和Python 3中运行,并且每个都得到相同的结果。
OpenGL和GLUT有什么区别?我只是假设GLUT是OpenGL的一个组件。 –
@ J-bob,GLUT是“OpenGL Utility toolkit”,它可以处理输入,创建窗口并创建OpenGL上下文。所以更多的是与操作系统交谈。它也有一些更高级的绘图方法。 OpenGL是一个与GPU交谈的API,或者说它是驱动程序,所以这实际上是移动三角形,创建着色器等。 – karyon