Воскресенье, 22 Декабря 2024, 08:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
OpenGL. Наложение текстуры (маппинг)?
Gargolev43Дата: Среда, 05 Декабря 2012, 18:13 | Сообщение # 1
частый гость
Сейчас нет на сайте
Как наложить текстуру на неправильный четырехугольник?
Например, в моем случае это ломаная, нарисованная треугольниками (line strip). Получается, что рисунок текстуры прямоугольный, а наложить нужно на область по форме напоминающей параллелограмм
SEvgДата: Среда, 05 Декабря 2012, 18:55 | Сообщение # 2
Алхимик
Сейчас нет на сайте
Это всё не важно... Главное текстурные координаты! Можно хоть на круг наложить квадратную текстуру.
Как будут заданы текстурные координаты, так текстура и ляжет, просто некоторые участки тектуры не будут использоваться или будут искажения.
Gargolev43Дата: Четверг, 06 Декабря 2012, 11:11 | Сообщение # 3
частый гость
Сейчас нет на сайте
Можно на более конкретном примере?

допустим желтая полоса - текстура. На второом рисунке черное - фигура, на которую нужно наложить текстуру, желтые треугольники - выступающие края текстуры.
На рисунке для удобства известны координаты всех точек. В реальности известны координаты только для черной фигуры.
Тогда какие координаты должны быть у текстуры?
(0, 0), (-sqrt(2), 1), (1, 1), (1 + sqrt(2), 0)?
linuxДата: Четверг, 06 Декабря 2012, 12:06 | Сообщение # 4
частый гость
Сейчас нет на сайте
Можно (0,0,1,1). Немного искривится, а так ничего будет. Вообще принцип такой, к каждой вершине привязывается текстурная координата, можно хоть ко всем вершинам одну точку из текстуры привязать. Тогда всё станет одним цветом, цветом пикселя в этой позиции.
Если не в курсе, текстурные координаты от 0 до 1.

Советую просто повозится, поэксперементировать с текстурными координатами, тогда станет понятно. Можно даже повернуть текстуру, отразить и т.д. Надо пробовать и ещё раз пробовать!
Gargolev43Дата: Четверг, 06 Декабря 2012, 15:58 | Сообщение # 5
частый гость
Сейчас нет на сайте
0 0 1 1 - наверное не получится, потому что текстура квадратная со стороной 2^n, а картинка прямоугольная
daunДата: Четверг, 06 Декабря 2012, 19:13 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Вершинные координаты не имеют ни какого отношения к текстурным.
Если развертку полигонов наложить на текстуру и замерить вершины, получим пиксельные координаты,
и пиксельные перегоняем в текстурные:
программную ширину текстуры равную 1, делим на действительную =512, и умножаем на пиксельную координату.

Gargolev43Дата: Пятница, 07 Декабря 2012, 12:49 | Сообщение # 7
частый гость
Сейчас нет на сайте
Получилось кое-как нарисовать. Причина была тупо в том, что массив точек для треугольников размером n, а массив точек для текстуры - всего лишь 8.

daun, да, спасибо за картинку. Теперь понятно, почему у меня сегменты полосатые и похожи на рождественский леденец. Но все равно не совсем это требовалось.

Надеюсь это лучше пояснит задачу:

Это очень грубое приближение - как я себе представляю алгоритм. За основу взял последний рисунок, но скорее всего у фигуры две стороны, которые на моем рисунке окрашиваются в белый цвет, будут параллельные.
Я пока плохо себе представляю реализацию. Наверное надо сначала фигуру и текстуру поместить в начало координат, потом повернуть фигуру, наложить текстуру, повернуть фигуру обратно и вернуть на место.
SEvgДата: Пятница, 07 Декабря 2012, 13:09 | Сообщение # 8
Алхимик
Сейчас нет на сайте
Вращение фигуры, на текстурные коорданаты не повлияет...

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


На словах трудно объяснить...


Сообщение отредактировал SEvg - Пятница, 07 Декабря 2012, 13:11
daunДата: Пятница, 07 Декабря 2012, 20:19 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Ой! А зачем поворачивать, если положение в пространстве пофиг, может лучше попробовать менять порядок точек текстуры,
по часовой там, против.
Вообще то текстура должна соответствовать фигуре, иначе будут искажения.
В примере с градиентом искажения пойдут вдоль оси градиента и будут незаметны, сойдет простое наложение, типа четырехугольник.
Если накладывать на параллелограмм что-то посложней градиента, придется деформировать изображение текстуры, как у текстуры луны,
правда, как это должно выглядеть даже не представляю.
Может делать обратный наклон изображения на текстуре и смещать точки по неиспользованным полям.
Gargolev43Дата: Понедельник, 10 Декабря 2012, 16:39 | Сообщение # 10
частый гость
Сейчас нет на сайте
Спасибо всем, проблему решил, хоть и криво и не понял в чем дело. Длину и ширину аппроксимировал до нужных размеров и еще с добавил пустое место, чтобы текстура поместилась в квадрат 256х256 (раньше картинка была произвольного размера, приведение к размеру 2^n осуществлялось программно - и это работало для отдельных прямоугольников).
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг