2015-11-25 1 views
1

фон моего вопроса следующий:
Я рисую простой текстурированный прямоугольник.
Прямоугольник всегда имеет тот же аспект, что и текстура.
Беспокойство в том, что я просто использую координаты текстуры (0,0), (0,1), (1,0), (1,1) в углах, чтобы получить полную текстуру.
Теперь я реализовал функцию поворота текстуры на прямоугольнике, изменив матрицу текстур OpenGL.Как устранить искажение при вращении текстуры

Просто поворачивая координаты текстуры, я получаю текстуру, повторяющую или обертывающую артефакты, потому что поворотные координаты текстуры иногда выходят из допустимого диапазона [0, 1].
Я уже решил эту проблему. Я вычисляю масштабный коэффициент, чтобы убедиться, что видимый вырез текстуры всегда будет в правильном интервале (масштабирование текстуры).

Возможно, одна простая проблема заключается в следующем.
Beucause из-за того, что пространство текстуры всегда [0,1] на оси u и v (независимо от реального аспекта текстуры), я получаю искажение текстуры при вращении текстуры.

Можете ли вы помочь мне о том, как вычислить масштабный коэффициент для текстурных координат (возможно, два для х и у), чтобы исправить это искажение на основе угла поворота и текстуры аспекта (ширина и высота)

Спасибо и наилучшими пожеланиями Себастьян

+0

Я бы поискал общие алгоритмы для поворота и/или сжатия текстуры. – kajacx

+0

никто, кто может мне помочь? Вопрос непонятен? Должен ли я объяснить это более подробно? – TosKen

+0

Вы когда-нибудь это выясняли? У вас есть образец кода, который приближает вас к тому, чего вы пытаетесь достичь? – GKeps

ответ

0

Пусть w и h быть ширину и высоту прямоугольника (или текстуру, вот только соотношение сторон w:h вопросы). Затем мы составляем полное преобразование текстуры следующим образом.

Сначала мы преобразуем координаты уф из (0,0) .. (1,1) до (0,0) .. (ж, з):

[ w 0 0 ] 
[ 0 h 0 ] 
[ 0 0 1 ] 

Далее, при условии, что вы хотите для поворота и масштабирования вокруг текстуры центр мы сдвигаем его на половину размера, так что (0,0) отображается на (-w/2, -h/2), (.5, .5) до (0, 0) и (1,1) до (ж/2, ч/2):

[ 1 0 -w/2 ] [ w 0 0 ] [ w 0 -w/2 ] 
[ 0 1 -h/2 ] x [ 0 h 0 ] = [ 0 h -h/2 ] 
[ 0 0 1 ] [ 0 0 1 ] [ 0 0 1 ] 

Затем мы применяем шкале S и вращение R с левой стороны, и конвертировать обратно в текстурного пространства путем применения обратного преобразования. Чистое преобразование:

[ 1/w 0 1/2 ]  [ w 0 -w/2 ] 
[ 0 1/h 1/2 ] R S [ 0 h -h/2 ] 
[ 0 0 1 ]  [ 0 0 1 ]