Визуализируйте буфер глубины - PullRequest
12 голосов
/ 30 апреля 2010

Я пытаюсь визуализировать буфер глубины для целей отладки, рисуя его поверх фактического рендеринга при нажатии клавиши. В основном это работает, но результирующее изображение кажется увеличенным. (Это не просто исходное изображение в нечетной шкале серого) Почему размер не совпадает с размером цветового буфера?

Это то, что я использую для просмотра буфера глубины:

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;
}

Ответы [ 5 ]

1 голос
/ 02 мая 2010

Я не уверен, является ли это вашей действительной ошибкой, но есть несколько вещей, которые я могу порекомендовать вам проверить. Было бы неплохо, если бы вы на самом деле предоставили скриншот того, как именно он увеличен.

Прежде всего, убедитесь, что матрицы проекции / просмотра модели точно такие же, как ваш рендеринг. Я не понимаю, как это повлияет на это, но это будет что-то, на что можно посмотреть.

Во-вторых, spec указывает, что glPixelStore, glPixelTransfer и glPixelMap могут влиять на результаты, вы должны убедиться, что они установлены правильно.

Если у вас все получится, пожалуйста, поделитесь, что пошло не так - это кажется интересным вопросом. :)

0 голосов
/ 14 ноября 2010

модель и матрицы проекций не будут влиять на это.

возможно, попробуйте установить позицию рисования на 0,0 с glRasterPos или glWindowPos. по-видимому, есть также glPixelZoom.

0 голосов
/ 10 июня 2010

1) Сбросить необработанные данные буфера глубины в файл.

2) Откройте его, используя IrfanView (Открыть как -> файл RAW)

3) Настройте параметры (ширину, высоту) и формат пикселя в соответствии с вашим буфером глубины BPP (8 бит, 16 бит, ...). Убедитесь, что шкала серого проверена.

4) Получить пиво.

0 голосов
/ 07 июня 2010

еще одна вещь, которую нужно проверить, - это правильная позиция растра. см. glRasterPos. код, как размещено, должен работать, но я могу видеть, как состояние испорчено в другом месте (вы рисуете что-то, прежде чем визуализировать глубину ...) Тем не менее, вы, вероятно, находитесь в области драйверов GL, которая не очень хорошо протестирована, потому что это необычно. что вы должны делать дальше: - тест с другим поставщиком (ati / nv ..) - записать прочитанные данные в файл, чтобы проверить, работает ли чертеж или чтение должным образом

0 голосов
/ 30 апреля 2010

Этот код должен работать.У вас случайно есть что-то еще, называемое glPixelZoom ?Стоит сбросить его, чтобы убедиться, что вы на самом деле не запрашивает увеличение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...