Я пытаюсь визуализировать буфер глубины для отладки целей путем рисования его сверх фактического рендеринга, когда клавиша нажата. Это является главным образом рабочим, но получающееся изображение, кажется, увеличено. (Это не просто исходное изображение в нечетной шкале полутонов), Почему это не тот же размер как цветной буфер?
Это - то, что я использую представление буфер глубины:
void get_gl_size(int &width, int &height)
{
int iv[4];
glGetIntegerv(GL_VIEWPORT, iv);
width = iv[2];
height = iv[3];
}
void visualize_depth_buffer()
{
int width, height;
get_gl_size(width, height);
float *data = new float[width * height];
glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, data);
glDrawPixels(width, height, GL_LUMINANCE, GL_FLOAT, data);
delete [] data;
}
Этот код должен работать. У вас случайно есть что-то еще, называемое glPixelZoom ? Стоит сбросить его, чтобы убедиться, что вы на самом деле не запрашиваете масштабирование.
Я не уверен, что это действительно ваша ошибка, но есть несколько вещей, которые я могу порекомендовать вам проверить. Было бы неплохо, если бы вы предоставили снимок экрана, на котором видно, как именно он увеличен.
Во-первых, убедитесь, что матрицы проекции/модельного вида точно такие же, как и в вашем рендере. Я не вижу, как это может повлиять, но на это стоит обратить внимание.
Во-вторых, в спецификации указано, что glPixelStore, glPixelTransfer и glPixelMap могут влиять на результаты, вам нужно убедиться, что они установлены правильно.
Если вам удастся заставить это работать, пожалуйста, поделитесь тем, что пошло не так - вопрос кажется интересным. :)
.Еще одна вещь, которую необходимо проверить, - правильность положения вашего растра. см. glRasterPos. опубликованный код должен работать, но я вижу, как состояние облажается в другом месте (вы что-то рисуете, прежде чем визуализировать глубину ...) Тем не менее, вы, вероятно, находитесь в области драйверов gl, которая не была хорошо протестирована, потому что это необычно. что делать дальше: - протестируйте с другим поставщиком (ATI / NV ..) - записать прочитанные данные в файл, чтобы увидеть, работает ли рисование или чтение не так, как ожидалось
1) Выгрузите необработанные данные буфера глубины в файл.
2) Откройте его с помощью IrfanView (Open as -> RAW file)
3) Настройте параметры (ширина, высота) и формат пикселей в соответствии с вашим буфером глубины BPP (8 бит, 16 бит, ...). Убедитесь, что отмечена шкала серого.
4) Выпейте пива.