Странные проблемы с наложением текстур - PullRequest
3 голосов
/ 28 сентября 2011

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

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

3-ий квадрат - 1.5f ширины и длинны. Они правильно разнесены.

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

Скриншот http://i52.tinypic.com/2qbafqp.jpg

Вершины кубов используют координаты текстуры (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.

Ответы [ 2 ]

4 голосов
/ 28 сентября 2011

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

0 голосов
/ 28 сентября 2011

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

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

...