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 осуществлялось программно - и это работало для отдельных прямоугольников).
|
|
| |