2010-06-08 2 views
5

화면 정렬 쿼드가 있는데, 해당 쿼드 내에서 임의의 사각형을 확대하고 싶습니다. 그러나 수학을 얻지는 못합니다. 권리.화면 정렬 쿼드 내에서 임의의 rect를 확대하려고 시도했습니다.

변환이 제대로 작동했다고 생각합니다. 스케일링이 아닙니다. 기본적으로 내 코드는 다음과 같습니다.

// 
// render once zoomed in 
glPushMatrix(); 
glTranslatef(offX, offY, 0); 
glScalef(?wtf?, ?wtf?, 1.0f); 

RenderQuad(); 

glPopMatrix(); 

// 
// render PIP display 
glPushMatrix(); 
glTranslatef(0.7f, 0.7f, 0); 
glScalef(0.175f, 0.175f, 1.0f); 

RenderQuad(); 

glPopMatrix(); 

누구나 어떤 팁이 있습니까? 사용자가 rect 영역을 선택하면 해당 값이 [x, y, w, h]로 렌더링 객체에 전달됩니다. 여기서이 값은 뷰포트의 너비와 높이의 비율입니다.

답변

0

필자는이 작업을 수행해야 할 때 항상 glOrtho, glFrustrum, gluPerspective 또는 그 중 무엇이든지 사용했던 매개 변수를 변경했습니다.

+0

저는 glOrtho (0, 1, 0, 1, 0, 1)를 사용하고 있습니다. 나는 왼쪽 하단 rect에서 확대를 시뮬레이트하기 위해 glOrtho (0, 0.5, 0, 0.5, 0, 1)로 변경해 보았습니다. 그러나 나는 단지 죽음의 검은 화면을 가지고 있습니다. – moswald

+0

@mos : 당신이 다른 것을 바꾼다면 (또는 물론 그 사분면에 아무것도 그려지지 않았다면) 그 일이 일어날 수있는 방법에 관해서는 조금 잃어 버렸습니다. 아마도 당신은'glMatrixMode (GL_Projection); glLoadIdentity();'? –

+0

Ack! 죄송합니다. 테스트를 마쳤을 때 현재 코드를 주석 처리했습니다. ... RenderQuad에 대한 호출 포함. 그 부분을 다시 넣으면 효과가있었습니다. – moswald

0

전체 이미지와 PIP 모드에서 동일한 쿼드 (RenderQuad())를 그리는 것처럼 보입니다.

PIP 창의 너비 PIP 및 높이 PIP 및 startXY 위치를 가정하면 widthPIP/totalWidth, heightPIP/totalHeight를 사용하여 원래의 4 배 배율을 조정하고 지정된 startXY에서 다시 렌더링합니다.

이게 당신이 찾고 있는게 있니?

1

귀하의 값이 [x, y, w, h]로 전달 된 것을 감안할 때 먼저 음수 방향으로 변환하여 0,0에서 왼쪽 위 모서리를 가져온 다음 1/w로 축척하고 1/h를 눌러 화면에 채 웁니다. 좋아요 :

// 
// render once zoomed in 
glPushMatrix(); 
glTranslatef(-x, -y, 0); 
glScalef(1.0/w, 1.0/h, 1.0f); 

RenderQuad(); 

glPopMatrix(); 

이 방법이 유용합니까?