我通過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