模板拾取测试始终返回0

时间:2015-12-11 13:54:45

标签: opengl glreadpixels

我正在尝试在我的OpenGL程序中实现一个简单的拾取方法。 首先,我用

清除模板
glClearStencil(0);

在我的displayCallback函数开始时,我调用

GLbitfield mask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT;

glClear(mask);

然后我在场景中绘制所有对象,除了4个对象,我希望它是可选择的(其余的是非交互式的)。当我绘制这4个对象时,我首先启用并设置Stencil

glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

然后绘制

glStencilFunc(GL_ALWAYS, i + 1, -1);
drawItem( ... );

其中i是项目的索引,然后调用

glDisable(GL_STENCIL_TEST);

当我尝试在用户点击左边的按钮时选择一个项目时,我在mouseCallback函数中使用它

if ((buttonPressed == GLUT_LEFT_BUTTON) && (buttonState == GLUT_DOWN)) {

    unsigned char column = 0;

    glReadPixels(mouseX, 
                (WINDOW_WIDTH - mouseY + 1), 
                1, 
                1, 
                GL_STENCIL_INDEX, 
                GL_UNSIGNED_BYTE, 
                &column);

    if (column == 0) {      
        printf("Clicked at %d %d, No column clicked on\n", mouseX, mouseY);
    }
    else {              
        printf("Clicked on column with ID: %d\n", (int)column);
    }
}

但无论我点击哪里,我都不会选择任何列。我甚至添加了mouseX和mouseY以检查我是否没有点击相同的像素,但我发现这部分工作正常。

有没有人发现此代码存在任何问题?非常感谢 -

0 个答案:

没有答案