Как вращать градиент вместе со сторонами 3D-куба во Flash - actionscript 3.0 - PullRequest
0 голосов
/ 23 августа 2009

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

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

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

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

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

и сайт, где вы можете получить файл cube fla http://www.flashandmath.com/flashcs4/cs4simple3d/index.html

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

http://pastebin.com/fdc431a4

1 Ответ

1 голос
/ 23 августа 2009

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

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


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

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

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

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

тогда удачи ...;)


Greetz

back2dos

...