2013-10-01 132 views
1

我正在使用現代OpenGL(3.3+)在Jogl中重寫我的應用程序。隨着鼠標移動相機的目標位置

我使用所有的常規基質,即objectToWorld,WorldToCamera和CameraToClip(或模型,視圖和投影)

我創建了一個類來處理所有的鼠標移動麥克森確實在其「學習現代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,我應該做的,p作爲頂點以下

C *(C * T * C^-1)*○* 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);