2013-10-01 1 views
1

Jogl의 최신 OpenGL (3.3+)을 사용하여 응용 프로그램을 다시 작성합니다. 나는 모든 기존의 매트릭스를 사용하고마우스와 함께 카메라 목표 위치 이동

, 즉 objectToWorld, WorldToCamera 및 CameraToClip (또는 모델, 뷰 및 프로젝션)

내가 맥 케슨 (McKesson)는 "학습 현대 3d에서와 같이 모든 마우스 움직임을 처리하기위한 클래스를 생성 방법과 그래픽 프로그래밍 ", 나머지는 명확해야 카메라 목표 위치

private void offsetTargetPosition(MouseEvent mouseEvent){ 

     Mat4 currMat = calcMatrix(); 

     Quat orientation = currMat.toQuaternion(); 

     Quat invOrientation = orientation.conjugate();   

     Vec2 current = new Vec2(mouseEvent.getX(), mouseEvent.getY()); 

     Vec2 diff = current.minus(startDragMouseLoc); 

     Vec3 worldOffset = invOrientation.mult(new Vec3(-diff.x*10, diff.y*10, 0.0f)); 

     currView.setTargetPos(currView.getTargetPos().plus(worldOffset)); 

     startDragMouseLoc = current; 
    } 

calcMatrix()를 카메라 행렬을 반환 상쇄

내가 오른쪽 마우스와 함께 내 객체를 이동하려면 이제는 마우스 움직임과 객체 변환이 일치하지 않습니다. 즉, 선형이 아니기 때문에 다른 공간을 다루고 있기 때문입니다.

공간 O에서 변형 T를 적용하려고하지만 스페이스 C에서, 나는

의 C * (C *의 T의 *의 C^-1) * O * P 유사한 어떻게해야

뭔가 정점과 같은 페이지로 다음을 수행해야합니까? 계정에 내 투영 행렬을 촬영

답변

0
난 빌어 먹을 간단한 비율로 해결

...

 float x = (float) (10000 * 2 * EC_Main.viewer.getAspect() * diff.x/EC_Main.viewer.getWidth()); 
     float y = (float) (10000 * 2 * diff.y/EC_Main.viewer.getHeight()); 
     Vec3 worldOffset = invOrientation.mult(new Vec3(-x, y, 0.0f)); 

Mat4 orthographicMatrix = Jglm.orthographic(-10000.0f * (float) EC_Main.viewer.getAspect(), 10000.0f * (float) EC_Main.viewer.getAspect(), 
        -10000.0f, 10000.0f, -10000.0f, 10000.0f);