Я пишу программу на C ++ с переизбытком, рендеринг 3D-модели в окне.
я использую glReadPixels чтобы получить изображение пейзажа, отображаемого в окнах.
И я хотел бы знать, как я могу получить для конкретного пикселя (x, y) не напрямую его цвет, а цвет следующего объекта позади.
Если я отрисовываю синий треугольник и красный треугольник перед ним, glReadPixels дает мне красные цвета от красного треугольника.
Я хотел бы знать, как я могу получить цвета от синего треугольника, который я получу от glReadPixels если красный треугольник не был здесь.
По умолчанию кадровый буфер сохраняет только самый верхний цвет. Чтобы получить то, что вы предлагаете, потребуется определенный конвейер рендеринга.
Например, вы могли бы:
Окончательный результат последнего рендера должен быть исходной сценой с удаленным верхним слоем.
Редактировать:
Для создания закадрового кадрового буфера и рендеринга версии сцены только для глубины потребуется лишь небольшое количество нового кода, и вы можете использовать существующий конвейер рендеринга в сочетании с ним для выполнения шагов 1 и 2.
Однако я не могу придумать, каким образом вы могли бы затем повторно визуализировать сцену, чтобы получить необходимую информацию на шаге 3 без шейдера, потому что это и стандартный тест глубины плюс тест на предоставленную текстуру глубины. Это не значит, что его нет, просто я не очень хорошо разбираюсь в трюках GL.
Я могу придумать другие способы попытаться выполнить ту же задачу для определенных точек на экране, поигравшись с системой рендеринга, но все они гораздо сложнее, чем просто написание шейдера.