2010-07-20 3 views
4

여기 내 문제입니다, 나는 마우스 포인터가 돌출 된 스케일 포인트가 있습니다. . 또한카메라를 번역하면서 마우스를 확대하고 있습니까? (OpenGL)

I'v이 시도 기본적으로 마우스 위치로 확대 달성되어 내가 원하는 무엇 X와 Y에 의해 모든 개체를 변환하는 "카메라를 가지고 :

1. Find the mouse's x and y coordinates 
    2. Translate by (x,y,0) to put the origin at those coordinates 
    3. Scale by your desired vector (i,j,k) 
    4. Translate by (-x,-y,0) to put the origin back at the top left 

을하지만이되지 않습니다 대신 모든 개체를 이동 glTranslate를 사용하는 카메라의 번역 요인. 내가 제대로이 작업을 수행 할 수있는 방법

. 감사합니다

glTranslatef(controls.MainGlFrame.GetCameraX(), 
    controls.MainGlFrame.GetCameraY(),0); 
glTranslatef(current.ScalePoint.x,current.ScalePoint.y,0); 

glScalef(current.ScaleFactor,current.ScaleFactor,0); 
glTranslatef(-current.ScalePoint.x,-current.ScalePoint.y,0); 
+0

(I, J, K : 당신이 포인트를 확대 할 때

지금, 당신은 단순히 같은 것을 할 필요가) 당신이 넣을 때 z 축을 확대하려고 시도 했습니까? –

+0

자세한 정보 및 명확성이 필요합니다. 아마 소스 코드? "2. Translate by ..."는 프로젝션 뷰 매트릭스 변환을 의미합니까? 어떤 방식으로 이것은 "카메라 번역의 요소"가 아닙니까? 이것은 2D 정사영 뷰입니다. 맞습니까? – Detmar

+0

그 작업이 없습니다 – jmasterx

답변

3

, 당신은을 시도해야. 원하는 왼쪽 좌표, 오른쪽 좌표, 하단 좌표, 상단 좌표 및 최소/최대 깊이를 매개 변수로 사용합니다.

예를 들어 glOrtho (-5, 5, -2, 2, ...)를 호출하면; 화면에는 (-5,2)에서 (5, -2)까지 직사각형 안에 좌표가있는 모든 점이 표시됩니다. 장점은 줌 레벨을 쉽게 조정할 수 있다는 것입니다.

보기/투영 행렬 (이 경우에 해당한다고 가정)을 곱하지 않으면 기본 화면 좌표의 범위는 (-1,1)에서 (1, -1)까지입니다.

그러나 프로젝트에서 카메라를 제어하는 ​​것이 매우 유용 할 수 있습니다. glTranslate 대신 객체를 그리기 전에 이것을 호출하십시오.

float left = cameraX - zoomLevel * 2; 
float right = cameraX + zoomLevel * 2; 
float top = cameraY + zoomLevel * 2; 
float bottom = cameraY - zoomLevel * 2; 
glOrtho(left, right, bottom, top, -1.f, 1.f); 

이제 cameraX와 cameraY는 화면의 중심을 나타냅니다.

cameraX += (cameraX - screenX) * 0.5f; 
cameraY += (cameraY - screenY) * 0.5f; 
zoomLevel += 0.5f; 
나는이 잘못지고 있지만, 대신하여 원하는 벡터를 스케일링/이해 될 수
+1

glOrtho는 원근감 투영법을 만듭니다. 원근감 투영법은 아닙니다. 이는 일부 상황 (예 : 2D 타일 게임)에서는 바람직하지만 다른 경우 (예 : FPS)에서는 바람직하지 않습니다. 어쨌든 - 모든 물체 대신 카메라를 움직이는 것이 올바른 방법입니다. –

관련 문제