Странные проблемы с наложением текстур

Я пытаюсь использовать координаты текстуры из предварительно сгенерированного файла PNG в трехмерном мире квадов, загруженных в Java с расширением slick-util LWJGL.

Файл текстуры имеет размер 192x96 пикселей и правильно отформатирован. Он состоит из тайлов 6x3 32x32.

Трехмерные четырехугольники имеют ширину и длину 1,5f. Они правильно разнесены.

У меня проблемы с получением правильных координат текстуры. Когда я помещаю 0.0f в 0.333333f в качестве координаты y, я получаю немного больше, чем отображаемая высота верхней плитки. Однако, если я поставлю 0.0f-0.25f, я получу ровно 1/3, что является высотой моей плитки. Мне еще предстоит найти магическое число для координаты X, но, может быть, кто-нибудь может объяснить мне, почему 1/4 от 96 составляет 24 по координатам текстур, или что я делаю неправильно? Я подозреваю, что это может быть конфликт между размером моего квадроцикла и текстурами.

Скриншот

Вершины кубов используют текстурные координаты (0.0, 0.0f), (0.0, 0.333333f), (0.166666f, 0.333333f), (0.166666f, 0.0f), которые применяются против часовой стрелки от верхнего левого угла к вверху справа. Опять же, основной файл текстуры представляет собой тайлы размером 32x32, расположенные так, чтобы получить 192x96 (96 – высота).

Обратите внимание, что я поместил белую линию в верхней части одной из плиток, чтобы увидеть ее границу, и черную линию внизу, а затем белую линию для верхней части следующей под ней. Текстура «кровоточит» слишком глубоко. Как видите, у других текстур есть свои, еще более странные координаты.

Упорядочивание текстурных координат с предположением, что верхняя часть изображения равна 1,0, а не нижняя, дает нечетные квадраты с прямоугольным отверстием в центре, где должны быть четырехугольники.

Я использую TEX_ENV GL_MODULATE.


person Sean    schedule 28.09.2011    source источник


Ответы (2)


Размер текстуры обычно равен степени 2. Я подозреваю, что что-то изменило размер вашей текстуры 192x96 на текстуру 256x128 или 256x256. Однако на самом деле это не объясняет значения, которые вы нашли... Но, я думаю, если вы измените размер текстуры на 256x256 (увеличьте размер, не масштабируйте!) и вычислите координаты текстуры на основе этого, ваша проблема исчезнет. прочь.

person Ishtar    schedule 28.09.2011

Я не знаю о java, но с моими атласами изображений в объективном C и openGL ES вам нужно сделать текстуры меньше, чем вы имеете в виду при выборе их из атласа.

Оставили ли вы достаточный зазор между изображениями текстуры, чтобы предотвратить «вытекание»?

person Paul Reed    schedule 28.09.2011
comment
Зазора нет, все ровно. Однако я сомневаюсь, что это проблема, поскольку координаты отлично работают на 0,25f. Начинаю задаваться вопросом, не растягивает ли размер квадрата координаты текстуры, поскольку 1,5x0,25 довольно близко к 0,33, что было бы правильно. Проверяю это сейчас. - person Sean; 28.09.2011