2009-10-07 86 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); 
}