Проблема OpenGL ES Tiled Texture Mipmap - iPad / iPhone - PullRequest
2 голосов
/ 18 февраля 2011

enter image description here Я сталкиваюсь с традиционной проблемой тайла / мипмапа на iPad с использованием OpenGL ES.По сути, если у вас есть большая текстура (больше чем 1k X 1k), вы можете разбить ее на части и отобразить эти части на отдельные полигоны.Вы можете привязать координаты текстуры к краям, и это в основном работает, но вы получаете артефакты вдоль границ.

Теперь я знаю, почему вы это получаете, и знаете, что такое традиционное решение.То есть, вы делаете границы вокруг внешней стороны каждой маленькой текстуры (скажем, 6 пикселей).Вы делаете выборку из маленьких текстур в большую, так что вы просто используете эти внутренние пиксели (скажем, 256-2 * 6).Затем вы размазываете действительные пиксели в граничную область.Наконец, вы отображаете свои текстурные координаты, чтобы использовать только те действительные внутренние пиксели.Работает хорошо.

Если вы не киваете, не пытайтесь ответить.: -)

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

[Обновить] Снимок экрана с результатом прилагается здесь.Видимая линия находится в конце одной текстуры и в начале другой.Это использует CLAMP_TO_EDGE.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

GLES предоставляет GL_CLAMP_TO_EDGE, но не GL_CLAMP, который ограничивает центры самых крайних пикселей текстуры, а не крайних краев.Таким образом, доступ за пределы (границы или обтекания) полностью предотвращается с помощью CLAMP_TO_EDGE, но не с CLAMP.

CLAMP_TO_EDGE является частью спецификации GL ES (согласно здесь для 1.1 и здесь для 2.0 ), поэтому, если ваше оборудование не поддерживает его, то оно технически не совместимо с GL ES.Он также доступен в полной версии Open GL, но я думаю, что только с версии 1.2.Подразумевается, что CLAMP_TO_EDGE сделал скачок к ES, но CLAMP этого не сделал, потому что первый считается фиксированной версией последнего.

Мне кажется, что CLAMP_TO_EDGE должен подходить для того, что вы делаете -я неправильно понял?

0 голосов
/ 14 мая 2011

В конце концов проблема была связана со сжатием текстур. Линии были из-за метода сжатия, предполагая, что текстура обернута вокруг.

Я решил проблему, построив текстуры немного большего размера, чем нужно, сжимая и затем используя только область внутри каждой текстуры, оставляя таким образом границу.

...