| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 17:10:11
|
Golem
![[Avatar]](/images/avatar/4d0c87e77cf8fb0b2ea63f71fa8abf83f530a92c.png)
Joined: 15/04/2009 07:36:30
Messages: 238
Offline
|
Добрый вечер!
Нужен совет.
Суть вот в чем:
У меня есть два десятка граней с TextureMaterial, и есть mySprite:Sprite, который рисует bitmapData для текстур этих граней.
Для каждой грани mySprite рисует свою картинку. при этом, в определенный момент все текстуры должны перерисоваться.
Перерисовку я обеспечил созданием Texture с параметром bitmapData=mySprite.getMyBitmapData.
А теперь проблема:
Как мне обойтись одной поверхностью, одним объектом Texture и одним TextureMaterial, создаваемым на основе mySprite.getMyBitmapData?
(одним - это в идеале. сойдет и просто небольшое количество. то есть я не хочу создавать 20 поверхностей, 20 текстур для них и соответственно 20 TextureMaterial)
по сути мне нужна "гранезависимая" текстура, которая будет анализировать грань, на которую она накладывается и рисовать на ней соответствующую картинку.
это опять же в идеале, до которого я не могу добраться.
Я вижу два направления: либо играться с UV-мапингом, либо увеличивать кол-во поверхностей.
соответственно варианты:
1. Создать одну поверхность из всех граней. усложнить Sprite чтобы он возвращал bitmapData сразу для всех граней.
минусы: перекосы при расчете UV-мапинга (для меня очень важны края текстуры). ограничения на размер bitmapData.
2. Разбить грани на несколько поверхностей, и для каждой поверхности реализовать первый вариант.
минус: тот же - точность расчета UV.
3. Создать 20 поверхностей, 20 текстур и 20 материалов.
минусы: неудобно в управлении. затраты ресурсов (памяти). некрасиво (в плане реализации).
пока что остановился на этом варианте
соответственно ни один из вариантов мне не нравится.
у кого-нибудь есть идеи как это сделать более кравиво/правильно/удобно/быстро?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 17:25:25
|
int
![[Avatar]](/images/avatar/b2734281b95f1e3c58e230cd3ef308a2dd9579cd.jpg)
Joined: 28/10/2008 14:31:34
Messages: 299
Offline
|
Мне нравится вариант с uv. Посоветовать не знаю что.
|
Vladimir Babushkin |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 17:42:18
|
makc
![[Avatar]](/images/avatar/bbcbb1e844266f4abdfc29b3d8a64628607fa47e.png)
Joined: 02/06/2008 12:19:17
Messages: 1704
Offline
|
можно вот сделать как в блендере (к примеру).
минусы: перекосы при расчете UV-мапинга (для меня очень важны края текстуры)
дык на то делаются маргины между фейсами, которые не уложены общим ребром друг к другу.
| Filename |
uvcalc_lightmap.py |
Download
|
| Description |
|
| Filesize |
16 Kbytes
|
| Downloaded: |
136 time(s) |
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 18:00:41
|
Golem
![[Avatar]](/images/avatar/4d0c87e77cf8fb0b2ea63f71fa8abf83f530a92c.png)
Joined: 15/04/2009 07:36:30
Messages: 238
Offline
|
дык на то делаются маргины между фейсами
в том то и дело, что мне по краю фэйса нужна тонкая полоска, по всем ребрам, одинаковая по толщине.
я все еще пытаюсь сымитировать FillMaterial, только без лишних линий из-за распилов.
в спрайте рисуется прямоугольник, по размерам фэйса, и обводится линией с толщиной 0 (при отображении в сцене толщина линии все равно плывет, но незначительно).
ну и потом накладывается на поверхность как TextureMaterial. Другого способа не придумал..
можно вот сделать как в блендере (к примеру).
скрипт довольно большой, в усталом состоянии моя голова его не охватит..
если не трудно - можно кратко суть описать, чтобы я знал что смотреть?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 21:59:50
|
makc
![[Avatar]](/images/avatar/bbcbb1e844266f4abdfc29b3d8a64628607fa47e.png)
Joined: 02/06/2008 12:19:17
Messages: 1704
Offline
|
скрипт раскладывает фейсы на текстуру без пересечений.
если есть готовый UV mapping, то это не нужно, просто отрисуй линии в текстуре по брезенхейму, или через тот же спрайт/дров.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/12/2009 07:08:00
|
Golem
![[Avatar]](/images/avatar/4d0c87e77cf8fb0b2ea63f71fa8abf83f530a92c.png)
Joined: 15/04/2009 07:36:30
Messages: 238
Offline
|
про скрипт - понял, спасибо, поковыряю.
и за брезенхейма спасибо!
ну вобщем если нельзя никак добраться до текстуры грани из поверхности - придется делить общую текстуру uv-маппингом.
все еще раз спасибо!
PS. хотя было бы неплохо например наложить текстуру на поверхность,а потом выдернуть кусок битмапдаты с конкретной грани и отредактировать его.
господа разработчики случайно не планируют добавить в Face свойство bitmapData?
This message was edited 1 time. Last update was at 09/12/2009 07:10:01
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/12/2009 15:23:25
|
makc
![[Avatar]](/images/avatar/bbcbb1e844266f4abdfc29b3d8a64628607fa47e.png)
Joined: 02/06/2008 12:19:17
Messages: 1704
Offline
|
ну а чем тебе не угодил TextureMaterial (surface.material).texture.bitmapData ?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/12/2009 15:31:29
|
Golem
![[Avatar]](/images/avatar/4d0c87e77cf8fb0b2ea63f71fa8abf83f530a92c.png)
Joined: 15/04/2009 07:36:30
Messages: 238
Offline
|
как раз тем что он surface.material, а не face.material
т.е. он на всю поверхность, на все 20 граней (при условии, что я не делаю 20 поверхностей).
а мне нужна битмапдата одной грани.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/12/2009 16:49:08
|
makc
![[Avatar]](/images/avatar/bbcbb1e844266f4abdfc29b3d8a64628607fa47e.png)
Joined: 02/06/2008 12:19:17
Messages: 1704
Offline
|
мне нужна битмапдата одной грани
так откуда она возьмётся
при условии, что я не делаю 20 поверхностей
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/12/2009 18:58:02
|
Golem
![[Avatar]](/images/avatar/4d0c87e77cf8fb0b2ea63f71fa8abf83f530a92c.png)
Joined: 15/04/2009 07:36:30
Messages: 238
Offline
|
так откуда она возьмётся
вот-вот
поэтому и придется изворачиваться.
вот и думаю, пожертвовать памятью и создать 20 отдельных поверхностей, зато линии будут аккуратнее. или это и на скорости отрисовки тоже скажется?..
а вот вопрос кстати, lineTo по какому алгоритму линию рисует?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 17:42:41
|
makc
![[Avatar]](/images/avatar/bbcbb1e844266f4abdfc29b3d8a64628607fa47e.png)
Joined: 02/06/2008 12:19:17
Messages: 1704
Offline
|
clicky
| Filename |
2cubes.swf |
Download
|
| Description |
|
| Filesize |
43 Kbytes
|
| Downloaded: |
151 time(s) |
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2009 13:49:33
|
Golem
![[Avatar]](/images/avatar/4d0c87e77cf8fb0b2ea63f71fa8abf83f530a92c.png)
Joined: 15/04/2009 07:36:30
Messages: 238
Offline
|
блин, круто. а я-то думал, что я уже начинающий Специалист в AS
интересный алгоритм. использовать UV-координаты вершин для отрисовки грани я не додумался, придумал только держать дополнительный массив...
|
|
|
 |
|
|