2016-07-21 15 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