Я пытаюсь создать симулятор бильярда и использую glReadPixels вместе с gluUnProject для проецирования указателя мыши на сцену.
Это прекрасно работает, если мышь указывает на объект в сцене (например, на таблицу), но когда она указывает на фон, она портит gluUnProject из-за вызова glReadPixels, возвращающего 1.0.
Я пытаюсь понять, как нарисовать прозрачную плоскость на том же уровне таблицы, чтобы независимо от того, куда я указываю мышь в моей сцене, она получала глубину, как если бы она указывала на одну и ту же плоскость. как таблица.
Если я рисую прозрачный четырехугольник без glAlphaFunc (GL_GREATER, 0.01f); он отобразит квадратик белым цветом, и тестирование глубины будет работать так, как я планировал, но когда я добавлю вызов alphaFunc для обеспечения прозрачности квада, глубина вернется к тому, что было раньше. Из того, что я видел, glReadPixels считывает пиксели из буфера кадров, так что это имеет смысл, мне просто интересно, как я могу обойти это.
Я также попытался изменить направление намотки на четырехугольник, чтобы он не был виден сверху, но это та же проблема, что и glReadPixels, принимающих измерения из кадрового буфера.
Короче говоря, как я могу получить glReadPixels, чтобы получить его компонент глубины от объекта без рисования этого объекта на экране?
Вот вызовы glReadPixels и gluUnProject:
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels(x, (int) winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);