2009-10-07 65 views
0

目前我正在開發一個應用程序在Jogl(我的第一個應用程序實際上)。 首先,我必須從.obj文件將模型加載到畫布中(我設法這樣做)。座標系統問題與jogl

接下來是我必須使用鼠標拖動的事件來繪製相同的canvans筆畫,它的筆畫必須在茶壺前(我使用GL.GL_LINE_STRIP)和(glu.gluUnproject獲取座標到借)

直到現在我有問題。 (該模型只是一個在x軸上垂直放置的棒)

加載的模型的座標看起來不像mu鼠標光標點。例如:我用鼠標單擊來確定我的光標所在的位置,並且還單擊了我的模型(杆)的末端。這會返回mi值爲0.37599047216147075的X值。 然後我嘗試尋找杆模型的最大頂點X值(應該是杆最右側的頂點)。它返回給我一個1.xxx值...這不是在我的鼠標光標值附近。我可以點擊的最大值僅爲0.6xxx。任何想法爲什麼是這樣?

+0

嗨,你解決了嗎? – elect 2015-08-07 13:29:33

回答

0

您需要研究如何將鼠標事件給出的2D「視圖空間」座標轉換爲與您的模型數據進行比較有意義的3D「世界空間」座標。

This thread可能是有幫助的。

0

那麼我嘗試使用glu.gluUnproject,但我不知道什麼應該是z值。

public void calObjectCoor(GL gl, float mousex, float mousey, float z) { 

    float x = mousex, y = mousey; 
    gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0); 
    gl.glGetDoublev(GL.GL_MODELVIEW_MATRIX, mvmatrix, 0); 
    gl.glGetDoublev(GL.GL_PROJECTION_MATRIX, projmatrix, 0); 

    /* note viewport[3] is height of window in pixels */ 
    realy = viewport[3] - (int) y ; 


    glu.gluUnProject((double) x, (double) realy, z, // 
      mvmatrix, 0, 
      projmatrix, 0, 
      viewport, 0, 
      wcoord, 0); 
}