0

glDrawPixels を使用して描画された画像の上に選択ボックスを描画しようとしていますが、表示できません。ボックスの座標を表すために、マウス操作で更新する 4 つのグローバル整数 (最初の 2 つはクリック時、残りはマウスのドラッグ時) を用意し、描画関数で使用します。描画関数が呼び出されるたびにそれらを印刷しようとしたので、マウスがドラッグされると描画関数が呼び出され、4 つの値が少なくとも更新されることは確かです。私が主に持っているOpenGL呼び出しは次のとおりです。

glutInit(&argc, argv);
glutInitWindowSize(WINDOW_DIM, WINDOW_DIM);
glutInitWindowPosition(0, 0);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutCreateWindow("Window");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glClearColor(0.0, 0.0, 0.0, 1.0);
glDisable(GL_DEPTH_TEST);
glutMainLoop();

そして私の表示機能:

void display()
{
    printf("calling display\n");
    for(unsigned int i=0; i<WINDOW_DIM*WINDOW_DIM; ++i)
    {
        pixels[i]=colors[img[i]];
    }
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawPixels(WINDOW_DIM, WINDOW_DIM, GL_RGB, GL_FLOAT, (float*)pixels);
    glutSwapBuffers();
    if(upd_xmin!=0 || upd_ymin!=0 || upd_xmax!=0 || upd_ymax!=0)
    {
        glDrawBuffer(GL_FRONT);
        glLogicOp(GL_XOR);
        glEnable(GL_COLOR_LOGIC_OP);
        printf("drawing selection\n");
        printf("coords %d %d %d %d\n", upd_xmin, upd_ymin, upd_xmax, upd_ymax);
        glColor3f(1.0, 1.0, 1.0);
        glLineWidth(3.0);
        glBegin(GL_LINE_LOOP);
        glVertex2i(upd_xmin, upd_ymin);
        glVertex2i(upd_xmin, upd_ymax);
        glVertex2i(upd_xmax, upd_ymax);
        glVertex2i(upd_xmax, upd_ymin);
        glEnd();
        glDisable(GL_COLOR_LOGIC_OP);
        glDrawBuffer(GL_BACK);
    }
}

私が言ったように、マウス イベントが発生したときにボックスの座標 (上記のコードの upd_x 変数と upd_y 変数) がどのように更新されるかを見て、問題はマウスとモーション機能にあるとは思いませんが、必要に応じてできますそれらも投稿します。

4

2 に答える 2

1

問題はここにあると思います:

glClear(GL_COLOR_BUFFER_BIT);
glDrawPixels(WINDOW_DIM, WINDOW_DIM, GL_RGB, GL_FLOAT, (float*)pixels);
glutSwapBuffers();
rest of drawing

render 呼び出しは次のようになります。

clear
render
swap buffers

renderすべての描画呼び出し (を含む) はどこにありますかglDrawPixels

また、glDrawPixelsOpenGL 3.2 で削除されました。その特定の方法を絶対に使用する必要がある場合を除き、正射投影を使用して GUI 要素を描画してみませんか (選択ボックスはそれと見なすことができます)。

編集: また、 の後glDrawPixelsに描画呼び出しを行うと、 で描画したものを上書きする可能性があることに注意してくださいglDrawPixels

于 2013-11-22T21:18:35.443 に答える