2016-07-21 21 views
0

我通過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中運行,並且每個都得到相同的結果。

回答

0

您可能只需使用pygame coordinates/viewport即可獲得[0; 1]間隔(例如紋理座標)的座標或[-1; 1]間隔(NDC座標)的pygame coordinates/viewport * 2 - 1

我認爲使用谷歌這不會奏效,因爲你用pygame創建你的窗口,谷歌對這個窗口一無所知。我可能是錯的,雖然我知道既沒有過剩也沒有pygames。

只是一個提示谷歌搜索的OpenGL本身並不知道鼠標座標。

+0

OpenGL和GLUT有什麼區別?我只是假設GLUT是OpenGL的一個組件。 –

+1

@ J-bob,GLUT是「OpenGL Utility toolkit」,它可以處理輸入,創建窗口並創建OpenGL上下文。所以更多的是與操作系統交談。它也有一些更高級的繪圖方法。 OpenGL是一個與GPU交談的API,或者說它是驅動程序,所以這實際上是移動三角形,創建着色器等。 – karyon