Как повернуть градиент вместе со сторонами трехмерного куба во Flash - ActionScript 3.0

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

Я нашел несколько исходных кодов, относящихся к градиентам и вращающемуся трехмерному кубу, но вот проблема:

Когда я складываю эти две вещи вместе, эффект выглядит так, как будто куб был каркасом с прозрачностью некоторого градиентного фона, скрытого за сплошным черным фоном первой плоскости. Градиент всегда остается неподвижным.

Метод, который вращает / отображает куб, получил на входе три параметра rotx .roty, rotz. Я хотел бы использовать его и применить к градиентам, отображаемым с каждой стороны. У градиента есть собственная матрица, но я понятия не имею, как и когда манипулировать этим градиентом, чтобы получить желаемый эффект - я имею в виду преобразовать / повернуть градиент таким образом, чтобы он выглядел так, как будто он нарисован на стороне куба, и преобразовать его в трехмерную позицию. Я предполагаю, что каждая сторона должна иметь отдельную матрицу градиента для каждой стороны, но что делать, чтобы преобразовать эту матрицу, чтобы она соответствовала rotx, roty, i rotz. Может кто-нибудь помочь мне?

вот источник градиента http://snipplr.com/view.php?codeview&id=7050

и сайт, на котором можно получить fla-файл куба http://www.flashandmath.com/flashcs4/cs4simple3d/index.html

а вот код файла .fla по ссылке выше с моими модификациями

http://pastebin.com/fdc431a4


person MoreThanChaos    schedule 23.08.2009    source источник
comment
Мне нравится, как у вас есть код, это упрощает работу. Я не понимаю, чего именно вы пытаетесь достичь. Хотите заштрихованный куб? Если это так, вам нужны: 1. разные градиенты для каждого лица (или, по крайней мере, градиенты для видимых лиц) 2. изобразите, где будет ваш свет в 3D (просто x, y, z) ... тогда вам нужно будет совместите свет с лицами, которые «смотрят» на свет, и в зависимости от угла некоторые градиенты будут светлее, а другие темнее.   -  person George Profenza    schedule 23.08.2009


Ответы (1)


на самом деле это невозможно ... искажение перспективы - это не аффинное преобразование, поэтому не матрица, которая была бы подходящим параметром для создания градиента с правильным искажением перспективы ...

Я думаю, что самый простой способ для flash 10 - это пойти другим путем ... все объекты DisplayObject могут быть преобразованы в пространстве, поэтому вы просто представляете любое лицо с помощью DisplayObject, выполняете все преобразования на нем, а затем все, что остается do - это z-сортировка ...


изменить: приближение, которое вы ищете, совершенно невозможно ... представьте куб, обращенный к вам, с линейным градиентом от черного к белому, сверху вниз ... когда вы начинаете вращаться правильно, линии градиента больше не остаются параллельными, вместо этого они начинают формировать конический градиент, все сходящиеся в одной точке ...

подход во втором абзаце - это именно то, что вы ищете ... создайте DisplayObject (Shape должна это сделать, для этого вам не нужны MovieClips), нарисуйте градиент к нему, а затем преобразуйте его в трехмерном пространстве, используя x , y, z, rotationX, rotationY и rotationZ ... и как только вы используете более одного объекта, вам нужно будет вручную отсортировать их по оси z ... если вам нужны 3D-градиенты, вам придется отказаться от этого кода и используйте этот подход, который на сегодняшний день является самым простым ...

ваши проблемы с AS3 действительно не имеют ничего общего с языком ... вам следует пересмотреть свой подход ... начиная с нового языка и неизвестного API, пытаясь улучшить 3D-движок, не зная теории, лежащей в основе , это не лучший вариант ...

сначала вам следует начать привыкать к языку ... как только вы почувствуете себя комфортно с ним, я думаю, что лучший способ для вас - использовать хороший 3D-движок AS3, такой как sandy, papervision, away3d, alternativa или что-то еще ... например, с Sandy, вы создаете небесный бокс (трехмерный куб) и назначаете любые материалы, которые хотите, его граням, и все готово ... а также эти движки взаимодействуют с программным обеспечением для трехмерного моделирования, поэтому вместо простого создания нескольких многогранников вручную и экспериментируя с ними, вы можете импортировать сложную модель и делать довольно интересные вещи ... но делать все в логическом порядке и с достаточными теоретическими знаниями ...

что ж, удачи ... ;)


привет

back2dos

person back2dos    schedule 23.08.2009
comment
хорошо, но, возможно, вы можете предложить, что мне делать с этим кодом (или предложить какое-то другое решение), чтобы создать иллюзию такого преобразования, не точного, а путем манипулирования некоторыми параметрами градиента. Effexxt решается только тем, что преобразуется поверхность, на которой нарисован градиент. или, может быть, можно получить доступ к существующим клипам фильма и манипулировать ими вместе с его градиентами - person MoreThanChaos; 23.08.2009
comment
Я просто прыгнул в AS3 и с самого начала у меня возникли проблемы - person MoreThanChaos; 23.08.2009
comment
С моей точки зрения, я могу сказать, что это имеет значение, я впервые так серьезно познакомился со вспышкой, и могу только сказать, что на этот раз моя интуиция и предположения, которые обычно помогают мне решить проблему, на этот раз терпят неудачу. В любом случае спасибо за помощь - person MoreThanChaos; 23.08.2009