У меня странная проблема с рисованием текстуры скайбокса на Mac. На iPhone все идет хорошо. Я пытался изменить стоимость ближних и дальних самолетов, но безуспешно.
Это скайбокс из шести текстур, и для каждой текстуры я устанавливаю это:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
В чем может быть проблема?
Скриншот:
РЕДАКТИРОВАТЬ:
Я попытался установить красный цвет фона, чтобы убедиться, что он пропускает текстуру
Я также попытался изменить координаты текстуры следующим образом:
float err_corr = 0.5 / TEXTURE_SIZE;
GLfloat vertices[24] = {
-1.0f - err_corr, -1.0f - err_corr, 1.0f + err_corr,
1.0f + err_corr, -1.0f - err_corr, 1.0f + err_corr,
-1.0f - err_corr, 1.0f + err_corr, 1.0f + err_corr,
1.0f + err_corr, 1.0f + err_corr, 1.0f + err_corr,
-1.0f - err_corr, -1.0f - err_corr, -1.0f - err_corr,
1.0f + err_corr, -1.0f - err_corr, -1.0f - err_corr,
-1.0f - err_corr, 1.0f + err_corr, -1.0f - err_corr,
1.0f + err_corr, 1.0f + err_corr, -1.0f - err_corr,
};
И коробка рисуется в следующем порядке:
GLubyte indices[14] = {0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1};
РЕШЕНИЕ:
Решение состоит в том, чтобы установить GL_CLAMP_TO_EDGE для самой кубической карты!
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
иglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
вставка '0.5f / texture_width' слева и справа от текстуры и '0.5f / texture_height' сверху и снизу. Вы видите артефакты сэмплирования - сэмплеры текстуры обычно сэмплируют из центра текселей, так что слева и справа, сверху и снизу (при 0 и 1 мкВ) вы получаете 50% от тех текселей, которые получает ваш семплер, когда он выходит за пределы , Это либо другая сторона текстуры, либо цвет выборки по умолчанию.
источник
GL_CLAMP_TO_EDGE
набор, он должен заставить сэмплы вне границ принимать значения ближайших пикселей в текстуре. То, что вы описываете, может очень хорошо сработать, но это не объясняет, почему проблема существует в первую очередь.Я думаю, что разница между MAC и iPhone вызвана сглаживанием на MAC. Мое 3D-программирование немного ржавое, но я думаю, вам придется сделать все квадраты частью одной сетки или что-то в этом роде.
Грязным решением взлома было бы сделать все квадраты слишком большими, чтобы они перекрывали друг друга, зажимали друг друга и соответствующим образом корректировали UV-координаты.
источник
Это обычная проблема с кубами на старых HW (или, может быть, iphones). Проверьте на
расширение, если оно доступно на вашем hw. Если так. Проблема будет решена с помощью этого.
источник
Шесть текстур настроены, в частности, как карта куба, или каждая из граней скайбокса визуализируется отдельно со своей собственной текстурой? Я слышал, что некоторые ранние системы ПК имели довольно плохую фильтрацию, когда дело дошло до обработки кубических карт в том смысле, что они не обязательно фильтровали по одной текстуре лица к другой, когда вы производили выборку около краев куба. AFAIK SGX (iphone GPU) должен правильно фильтровать по краям.
Мне пришло в голову, что нижняя часть ваших боковых текстур похожа на синий оттенок артефакта. Не могли бы вы, скажем, сделать нижний ряд (или несколько рядов) пикселей отвратительным оттенком пурпурного и посмотреть, не изменит ли это цвет артефакта? Это может дать некоторое представление о том, что может или не может происходить.
источник