2016-07-21 7 views
0

저는 파이 게임을 통해 OpenGL을 사용하여 상황을 렌더링하고 OpenGL 마우스 정보를 얻고 싶습니다. 나는 마우스 위치 & 클릭 상태를 Pygame을 통해 직접 얻을 수 있다는 것을 알고 있지만 OpenGL의 좌표에서 뷰포트의 픽셀 좌표가 아니라 마우스 위치가 필요합니다. 문제는 OpenGL의 마우스 콜백을 실행할 수 없다는 것입니다. 다음 코드를 고려하십시오 :이 코드를 실행하면파이 게임에서 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_mouse_pos = pygame.mouse.get_pos()에서 얻어진 파이 게임에 따라 마우스 위치 의 연속 출력을 시작합니다. 하지만 OpenGL 마우스 콜백을받을 수 없습니다.이 콜백은 glutMouseFunc(mouse_handler)으로 시작하여 발생합니다. 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 이 코드는 Python 2와 Python 3에서 모두 실행되며 각각에서 동일한 결과를 얻습니다.

답변

0

pygame coordinates/viewport을 사용하면 [0; 1] 간격 (예 : 텍스처 좌표) 또는 pygame coordinates/viewport * 2 - 1 ([-1; 1] 간격 (NDC 좌표)) 좌표를 가져올 수 있습니다.

저는 파이 게임과 창문으로 창을 만들 때 그 창에 대해 아무것도 모르기 때문에이 기능을 사용하지 않을 것이라고 생각합니다. 나는 틀렸을 지 모르지만, 나는 glut도 pygames도 모른다.

단지 검색 팁으로, OpenGL 자체는 마우스 좌표를 전혀 모릅니다. 이것은 과음으로 제공됩니다.

+0

OpenGL과 GLUT의 차이점은 무엇입니까? GLUT가 OpenGL의 구성 요소라고 가정했습니다. –

+1

@ J-bob, GLUT는 입력 처리, 창 생성 및 OpenGL 컨텍스트를 만드는 "OpenGL 유틸리티 툴킷"입니다. 운영 체제와 대화하는 것이 중요합니다. 또한 좀 더 높은 수준의 그리기 방법을 제공합니다. OpenGL은 GPU와 대화하기위한 API이거나 오히려 드라이버이기 때문에 실제 삼각형을 움직이고 쉐이더를 만드는 것입니다. – karyon