2012-02-01 8 views
3

저는 2D로 작업 중이며 한 객체 주위의 모든 객체 (객체 포함)를 회전시키고 하나의 객체를 화면 중앙에 유지하려고합니다.OpenGL은 화면 중앙에 유지하면서 객체를 회전합니다.

여기 세상을 변화시키는 내 현재 코드, 모든 렌더링은 나중에 수행됩니다

얼굴을하고 HH는 반 폭과 화면의 높이입니다. p는 객체 좌표입니다.

float hw = 400; 
float hh = 300; 

float x = hw - p.x; 
float y = hh - p.y; 

glTranslatef(x, y, 0); 
glTranslatef(-hw, -hh, 0); 
glRotatef(level->angle, 0, 0, 1); 
glTranslatef(hw, hh, 0); 

그러나 예상대로 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

장면의 일부분 만 회전하려면, 매트릭스 스택을 누르고 해당 부분을 렌더링 한 다음 스택을 팝하십시오? 어떤 코드를 실제 코드로 보여주고 싶을 수도 있습니다. – pmr

+0

아마 내가 명확하지 않다, 나는 물체의 중심 주위의 물체를 포함하여 물체를 포함한 모든 물체를 화면 중앙에두고 회전시키고 싶다. 나는 스크린의 중앙에 그것을 얻을 수있다, 그렇지만 내가 회전 할 때 그 장소에 머물러있게 할 수는 없다. –

답변

3

glPushMatrix() 및 glPopMatrix()를 사용해보십시오.

glTranslatef(x, y, 0); 
glPushMatrix(); 
glTranslatef(-hw, -hh, 0); 
glRotatef(level->angle, 0, 0, 1); 
glTranslatef(hw, hh, 0); 
glPopMatrix(); 

glPushMatrix() 현재의 매트릭스 (모든 변환, 회전 등)을 저장하고 새로운 매트릭스를 설정 : 그래서, 당신은. 이 행렬은 이전 행렬에 상대적입니다. 따라서 변환하면 행렬을 밀지 않고 해당 행렬의 (0 | 0) 점을 중심으로 회전합니다. 새 Matrix를 설정하면 이전 Matrix 위치에 Matrix가 작성됩니다.

관련 문제