用jogl协调系统问题

时间:2009-10-07 10:02:03

标签: java opengl jogl

目前我正在开发Jogl中的应用程序(实际上是我的第一个应用程序)。 首先我必须从.obj文件中将模型加载到画布中。(我设法这样做)。

接下来我必须使用鼠标拖动事件在相同的canvans上绘制笔划,并且笔划必须位于茶壶前面。(我使用GL.GL_LINE_STRIP)和(glu.gluUnproject获取坐标绘制)上)

直到这一点,我遇到了问题。 (该模型只是在x轴上水平放置的杆)

加载的模型的坐标似乎与mu鼠标光标点不同。例如:我使用鼠标单击确定我的光标所在的位置,我也点击模型的末尾(一根杆)。这将返回mi值为0.37599047216147075的X值。 然后我尝试寻找杆模型的最大顶点X值(应该是杆最右侧的顶点)。它返回一个1.xxx值...这与我的鼠标光标值没有关系。我点击的最大值仅为0.6xxx。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

您需要研究如何将使用鼠标事件给出的2D“视图空间”坐标转换为3D“世界空间”坐标,以便与模型数据进行比较。

This thread可能会有所帮助。

答案 1 :(得分: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);
}