그래픽스 관련
(GLUT)마우스모션처리 함수에서 파라미터로 받아온 좌표 변환하기.
present
2009. 10. 15. 01:05
파라미터 x,y 의 범위는 뷰포트의 0 ~ x,y너비값을 넘지 못할까?
그렇다면 x,y를 뷰포트의 너비로 나눠주면 0~1의 값을 갖고.
마우스로 찍은 위치를 다른 좌표로 바꾸고 싶다면?
예를 들어 아래 코드에서 point[1][0]는 x를 0~500 사이의 값으로 바꾸었다.
왜? 500을 곱했으니까. 만약 여기에 추가로 -250 을 했다면 x값은 -250 ~ 250 이 될 것이다.
그래서,
마우스로 삼각형을 이루는 세점을 찍었다면, 뷰포트에있었던 비율로 다른 영역으로 이동해서 삼각형이 그려질 수 있다.
주의할 점은 x,y에서 y값은 위쪽에서 아래로 가는 방향으로 증가한다는 것이다.glut는 윈도우즈의 좌표계를 따르기 때문에
glut에 전달했던 모션 처리함수또한 받아온 x,y를 윈도우즈기준 좌표값으로 받아온 것이다.
그렇다면 x,y를 뷰포트의 너비로 나눠주면 0~1의 값을 갖고.
마우스로 찍은 위치를 다른 좌표로 바꾸고 싶다면?
예를 들어 아래 코드에서 point[1][0]는 x를 0~500 사이의 값으로 바꾸었다.
왜? 500을 곱했으니까. 만약 여기에 추가로 -250 을 했다면 x값은 -250 ~ 250 이 될 것이다.
그래서,
마우스로 삼각형을 이루는 세점을 찍었다면, 뷰포트에있었던 비율로 다른 영역으로 이동해서 삼각형이 그려질 수 있다.
주의할 점은 x,y에서 y값은 위쪽에서 아래로 가는 방향으로 증가한다는 것이다.glut는 윈도우즈의 좌표계를 따르기 때문에
glut에 전달했던 모션 처리함수또한 받아온 x,y를 윈도우즈기준 좌표값으로 받아온 것이다.
void mouseMotion(int x,int y) { if(mouseLeftDown) { double viewport[4]; glGetDoublev(GL_VIEWPORT,viewport); point[1][0] = x / (float)viewport[2] * 500; point[1][1] = (viewport[3] - y)/(float)viewport[3] * 500; } glutPostRedisplay(); }