0

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

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

到目前为止,我遇到了问题。(模型只是一根水平放置在 x 轴上的杆)

加载的模型的坐标似乎与 mu 鼠标光标点不同。例如:我使用鼠标单击来确定我的光标所在的位置,并且我还单击了我的模型(一根杆)的末端。这将返回 mi 的 X 值 0.37599047216147075。然后我尝试寻找杆模型的最大顶点 X 值(应该是杆最右侧的顶点)。它返回给我一个 1.xxx 值......这与我的鼠标光标值相差无几。而我能点击的最大值只有0.6xxx。知道为什么会这样吗?

4

2 回答 2

0

您需要研究如何将鼠标事件给定的 2D“视图空间”坐标转换为与模型数据进行比较有意义的 3D“世界空间”坐标。

该线程可能会有所帮助。

于 2009-10-07T10:14:15.700 回答
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);
}
于 2009-10-08T04:09:06.817 回答