Визуализировать буфер глубины
Я пытаюсь визуализировать буфер глубины для целей отладки, рисуя его поверх фактического рендеринга при нажатии клавиши. В основном это работает, но результирующее изображение, похоже, увеличено. (Это не только исходное изображение в нечетном оттенке серого). Почему он не такой же, как и буфер цвета?
Вот что я использую в представлении буфера глубины:
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;
}
Ответы
Ответ 1
Я не уверен, является ли это вашей фактической ошибкой, но есть несколько вещей, которые я могу порекомендовать вам проверить. Было бы неплохо, если бы вы предоставили скриншот о том, как именно он увеличился.
Прежде всего, убедитесь, что матрицы проецирования/моделирования выглядят точно так же, как и рендеринг. Я не могу понять, как это повлияет на это, но это будет кое-что, чтобы заглянуть.
Во-вторых, spec указывает, что glPixelStore, glPixelTransfer и glPixelMap могут влиять на результаты, вы должны убедиться, что они правильно установить.
Если вы в конечном итоге получаете эту работу, пожалуйста, поделитесь тем, что пошло не так - кажется, интересный вопрос.:)
Ответ 2
Этот код должен работать. У вас есть что-то еще, вызывающее glPixelZoom? Это стоит сбросить его, чтобы проверить, что вы на самом деле не требуете увеличения.
Ответ 3
еще одна вещь, чтобы проверить, что ваша растровая позиция правильная. см. glRasterPos.
код, как указано, должен работать, но я могу видеть, как состояние запутано в другом месте (вы рисуете что-то перед визуализацией глубины...)
что вы, вероятно, находитесь в области драйверов gl, которые не очень хорошо протестированы, потому что это необычно.
что вам следует делать дальше:
- тест с другим поставщиком (ati/nv..)
- записать данные чтения в файл, чтобы увидеть, не работает ли рисование или чтение, как ожидалось
Ответ 4
модель и проекционные матрицы не будут влиять на это.
возможно попробуйте установить позицию ничьей на 0,0 с помощью glRasterPos или glWindowPos.
видимо там также glPixelZoom.
Ответ 5
1) Сбросьте необработанные данные буфера глубины в файл.
2) Откройте его, используя IrfanView (Открыть как → RAW файл)
3) Отрегулируйте параметры (ширину, высоту) и формат пикселей в соответствии с вашим буфером глубины BPP (8 бит, 16 бит,...). Убедитесь, что отмечена шкала серого.
4) Получите пиво.