[Logo]
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing  
[Register] Register / 
[Login] Login 
гранезависимая динамическая текстура  XML
Forum Index » Alternativa3D 5
Author Message
Golem

[Avatar]

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 материалов.
минусы: неудобно в управлении. затраты ресурсов (памяти). некрасиво (в плане реализации).
пока что остановился на этом варианте

соответственно ни один из вариантов мне не нравится.
у кого-нибудь есть идеи как это сделать более кравиво/правильно/удобно/быстро?
int

[Avatar]

Joined: 28/10/2008 14:31:34
Messages: 299
Offline

Мне нравится вариант с uv. Посоветовать не знаю что.

Vladimir Babushkin
[Email]
makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1704
Offline

можно вот сделать как в блендере (к примеру).
минусы: перекосы при расчете UV-мапинга (для меня очень важны края текстуры)
дык на то делаются маргины между фейсами, которые не уложены общим ребром друг к другу.
 Filename uvcalc_lightmap.py [Disk] Download
 Description
 Filesize 16 Kbytes
 Downloaded:  136 time(s)

[WWW]
Golem

[Avatar]

Joined: 15/04/2009 07:36:30
Messages: 238
Offline

дык на то делаются маргины между фейсами

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

можно вот сделать как в блендере (к примеру).

скрипт довольно большой, в усталом состоянии моя голова его не охватит..
если не трудно - можно кратко суть описать, чтобы я знал что смотреть?
makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1704
Offline

скрипт раскладывает фейсы на текстуру без пересечений.

если есть готовый UV mapping, то это не нужно, просто отрисуй линии в текстуре по брезенхейму, или через тот же спрайт/дров.
[WWW]
Golem

[Avatar]

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

makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1704
Offline

ну а чем тебе не угодил TextureMaterial (surface.material).texture.bitmapData ?
[WWW]
Golem

[Avatar]

Joined: 15/04/2009 07:36:30
Messages: 238
Offline

как раз тем что он surface.material, а не face.material
т.е. он на всю поверхность, на все 20 граней (при условии, что я не делаю 20 поверхностей).
а мне нужна битмапдата одной грани.
makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1704
Offline

мне нужна битмапдата одной грани
так откуда она возьмётся
при условии, что я не делаю 20 поверхностей
[WWW]
Golem

[Avatar]

Joined: 15/04/2009 07:36:30
Messages: 238
Offline

так откуда она возьмётся

вот-вот
поэтому и придется изворачиваться.
вот и думаю, пожертвовать памятью и создать 20 отдельных поверхностей, зато линии будут аккуратнее. или это и на скорости отрисовки тоже скажется?..

а вот вопрос кстати, lineTo по какому алгоритму линию рисует?
makc

[Avatar]

Joined: 02/06/2008 12:19:17
Messages: 1704
Offline

clicky
 Filename 2cubes.swf [Disk] Download
 Description
 Filesize 43 Kbytes
 Downloaded:  151 time(s)

[WWW]
Golem

[Avatar]

Joined: 15/04/2009 07:36:30
Messages: 238
Offline

блин, круто. а я-то думал, что я уже начинающий Специалист в AS
интересный алгоритм. использовать UV-координаты вершин для отрисовки грани я не додумался, придумал только держать дополнительный массив...
 
Forum Index » Alternativa3D 5
Go to:   
Powered by JForum 2.1.8 © JForum Team