Неверные значения записаны в буфере трафарета

Я пытаюсь выбрать объекты по щелчку мыши. За этим я следовал этот урок, и попытался использовать буфер трафарета для этой цели.

Внутри «игрового» цикла я пытаюсь нарисовать 10 (5 пар) «выбираемых» треугольников следующим образом:

...

glClearColor(red, green, blue, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

glClearStencil(0); // this is the default value

/* Enable stencil operations */
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

/*Some other drawing not involving stencil buffer*/

GLuint index = 1;
for (GLshort i = 0; i < 5; i++)
{
//this returns 2 model matrices
auto modelMatrices = trianglePairs[i].getModelMatrices();

for (GLshort j = 0; j < 2; j++)
{
glStencilFunc(GL_ALWAYS, index, -1);
glUniformMatrix4fv(glGetUniformLocation(ourShader.Program, "model"), 1, GL_FALSE, glm::value_ptr(modelMatrices[j]));
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, BUFFER_OFFSET(2));
index++;
}
/*Some other drawing not involving stencil buffer*/
}

/*Some other drawing not involving stencil buffer*/
...

Однако, когда я пытаюсь прочитать значения трафарета, я получаю неправильные значения. Я читаю обратно значения как (это также часть вышеупомянутого учебника):

GLuint index;
glReadPixels(xpos, Height - ypos - 1, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_INT, &index);

Всякий раз, когда я нажимаю на первый треугольник пары, я получаю значения как i+1тогда как правильное значение должно было быть iи для второго треугольника пары я получаю 0 как index,

Пожалуйста, дайте мне знать, что мне здесь не хватает?

Обновить
Я обнаружил, что значения трафарета могут быть применены на четырехугольниках. Когда я попытался применить значение трафарета на единицу площади, он работал правильно. Однако, когда квад не является единичным квадратом, он возвращает 0, Что является причиной этого?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]