2015-07-02 2 views
1

Каков правильный способ учета различных DPI мониторов, записывающих фрагментарный шейдер? Я использую glFragCoord, чтобы вещи отображались только на части экрана. Вещи отображаются как отступы на моем внешнем мониторе (снимая все мое маленькое окно GL) и неправильно на моем встроенном мониторе (уменьшенном, чтобы взять только нижнюю левую четверть окна). Есть ли кросс-платформенный способ решения такого рода проблем?Использование gl_FragCoord для мониторов с различными DPI

Я уверен, что это правильный диагноз моей проблемы, потому что мой шейдер выглядит по-разному на моем встроенном дисплее (15,4 дюйма 2880x1800) и на моем внешнем (22 дюйма 1680x1050). Кто-нибудь сталкивался с этим?

+0

Пропускайте размер видового экрана с равномерным и работайте в нормализованных координатах. См. Также: http://stackoverflow.com/questions/5144793/glsl-gl-fragcoord-issues. – sbabbi

+0

Я говорю ему использовать один и тот же размер видового экрана для каждого, то есть я указываю его в пикселях. Кроме того, я просто понял, что координаты, которые передаются в вершинный шейдер, отображаются правильно, это только те вещи, которые полностью определены внутри фрейдирующего шейдера. Я что-то не понимаю? – Chet

+0

Кроме того, программа не знает, когда я перетаскиваю между мониторами, поэтому не должно меняться, какое число я передаю, если это число не меняется. – Chet

ответ

0

Я нашел решение, но до сих пор не чувствую, что у меня действительно отличная проблема. Поскольку вершинный шейдер используется правильно, я просто передаю позицию в шейдер фрагмента как «изменяющуюся», а не используя gl_fragCoord. Он интерполирует на своем пути к фрагмент-шейдеру и, по-видимому, учитывает различия между мониторами. Он по-прежнему находится в пространстве клипов, поэтому вы должны соответствующим образом преобразовать его.

Смежные вопросы