2013-01-20 1 views
2

저는 2D로 도형을 그리려고합니다. gluProject를 사용하여 3D와 2D 좌표간에 변환하려고합니다. 기본적으로 내 목표는 (200,200)에 점을 그리는 것이며 점은 적절하게 그려집니다 (시작 위치가 0,0,0 인 경우).gluProject가 잘못된 좌표를 부여했습니다

이 같은 gluProject를 초기화 한 -

GLdouble modelView[16]; 
GLdouble projection[16]; 
GLint viewport[4]; 
glGetDoublev(GL_MODELVIEW_MATRIX,modelView); 
glGetDoublev(GL_PROJECTION_MATRIX,projection); 
glGetIntegerv(GL_VIEWPORT,viewport); 

와 내가 얻을 값은 이상하다이

double tx, ty, tz; 
gluProject(0.0,0.0,0.0,modelView,projection,viewport,&tx,&ty,&tz); 
cout<<"tx,ty,tz: "<<tx<<","<<ty<<","<<tz<<endl; 

처럼 내 애니메이션의 메소드를 호출하고있어 (-9e61, -9e61 , -9e61). 내가해야하는 것보다 다른 행렬을 곱해서 그런 것 같아요. 어떤 충고?

+2

'modelView','projection' 및'viewport'를 출력하고 그 값이 의미가 있는지 확인하십시오. 또한 glGetError를 사용하여 OpenGL 오류를 확인하십시오. – Thomas

답변

1

이 같은 gluProject를 초기화 한 -

바로 당신의 오류가있다. OpenGL은 상태 시스템입니다. 일회성 초기화는 없습니다. OpenGL 상태 머신이 프로젝트를 비우고 싶은 시점에 행렬과 뷰포트를 가져와야합니다. 예를 들어 가져 오는 경우 컨텍스트 생성 직후에, 당신은 나중에 얻은 것과 닮지 않은 뷰포트와 항등 행렬을 얻을 수 있습니다.

원하는 위치에 특정 지점을 그려야하는 경우 급진파 7의 응답을보십시오.

0

표시된 코드가 정확합니다. (wglMakeCurrent, glxMakeCurrent 또는 이에 상응하는 윈도우 툴킷을 호출하여) 컨텍스트 바운드가 있는지 확인하십시오. 그렇지 않으면 값 (glGetError의 값 포함)이 정의되지 않습니다.

그건 그렇고, 당신도 OpenGL을 사용하지 않고 있다고 생각합니다. 예를 들어 다음과 같은 경우 :

// Set up the projection transformation to match window coordinates 
glMatrixMode(GL_PROJECTION); 
glOrtho2D(0, windowWidth, 0, windowHeight); 

// No modeling transformation required for this rendering 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glColor3f(1.0, 1.0, 1.0); // set the current color to white 
glBegin(GL_POINTS); 
glVertex2i(200, 200); 
glEnd(); 

픽셀의 흰색 점 (200,200)이 창에 있어야합니다.

관련 문제