簡體   English   中英

如何使用Jogl拾取對象?

[英]How to pick objects using jogl?

我遇到了一些關於慢跑采摘的問題。 我需要選擇每個點並對其進行處理,但是我總是得到0命中(什么都沒選擇)。 誰能幫我這個?

display功能可以正確獲取光標周圍的2x2窗口。

public void display(GLAutoDrawable drawable) {
    GL2 gl = drawable.getGL().getGL2();

    switch(cmd){
        case UPDATE:
            gl.glPushMatrix();
            gl.glMultMatrixf(rot_matrix, 0);
            buildPoints(gl);
            buildAxes(gl);
            gl.glPopMatrix();
            break;

        case SELECT:
            int buffsize = 512;
            double x = mouseX, y = mouseY;
            int[] viewPort = new int[4];
            IntBuffer selectBuffer = Buffers.newDirectIntBuffer(buffsize);
            int hits = 0;

            gl.glGetIntegerv(GL2.GL_VIEWPORT, viewPort, 0);
            gl.glSelectBuffer(buffsize, selectBuffer);
            gl.glRenderMode(GL2.GL_SELECT);

            gl.glMatrixMode(GL2.GL_PROJECTION);
            gl.glPushMatrix();
            gl.glLoadIdentity();

            glu.gluPickMatrix(x, (double) viewPort[3] - y, 2.0d, 2.0d, viewPort, 0);

            //draw graph
            gl.glPushMatrix();
            gl.glMultMatrixf(rot_matrix, 0);
            buildPoints(gl);
            buildAxes(gl);
            gl.glPopMatrix();

            gl.glMatrixMode(GL2.GL_PROJECTION);
            gl.glPopMatrix();
            gl.glMatrixMode(GL2.GL_MODELVIEW);
            gl.glFlush();

            hits = gl.glRenderMode(GL2.GL_RENDER);
            processHits(hits, selectBuffer);
            cmd = UPDATE;
            break;
    }
}

所以我猜可能用於拾取的the drawing graph部分不正確。 這是buildPoints函數的代碼。

public void buildPoints(GL2 gl) {
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    gl.glPointSize((float) radius / 2);

    int pointName = 0;
    gl.glBegin(GL.GL_POINTS);
    for (point p : pointsList) {
        if(cmd == SELECT) gl.glLoadName(pointName);
        gl.glPushMatrix();
        gl.glTranslatef(p.getX(), p.getY(), p.getZ());
        gl.glColor3f(0.95f, 0.207f, 0.031f);
        gl.glVertex3f((float) (p.getX() * scaleFactor),
                (float) (p.getY() * scaleFactor),
                (float) (p.getZ() * scaleFactor));
        gl.glPopMatrix();
        pointName++;
    }
    gl.glEnd();
}

我建議您看一下使用JOGL 2進行揀貨的示例 但是,不建議使用OpenGL內置選擇。 我們在官方論壇上對此進行了很多討論,尤其是在本主題中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM