package
{
import flash.display.Sprite;
import flash.events.*;
import flash.utils.Timer;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import org.papervision3d.scenes.MovieScene3D;
[SWF(width='400',height='400',backgroundColor='0x000000',frameRate='30')]
public class ExampleTransformationRotate extends Sprite
{
private var container: Sprite;
private var scene: MovieScene3D;
private var camera: Camera3D;
private var plane:Plane;
private var myTimer:Timer = new Timer(100);
public function ExampleTransformationRotate()
{
container = new Sprite;
container.x = 200;
container.y = 200;
addChild( container );
scene = new MovieScene3D( container );
camera = new Camera3D();
camera.z = -500;
camera.zoom = 5;
var material:ColorMaterial = new ColorMaterial();
material.doubleSided = true;
material.fillColor = 0xFF0000;
material.smooth = true;
plane = new Plane( material, 300, 300, 1, 1 );
scene.addChild( plane );
myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
}
private function timerHandler( ev:TimerEvent ): void
{
plane.rotationX += 5;
plane.rotationY += 2;
plane.rotationZ += 7;
scene.renderCamera( camera );
}
}
}
Этот пример немного отличается от использованного ранее. Здесь вращение плоскости осуществляется не на событие enterFrame, а по тику таймера.
- Эффект изменения прозрачности.
Для реализации нам понадобится изменить одно свойство материала, а именно fillAlpha. Если после подчеркнутой строки добавить material.fillAlpha = 0.1; , то вместо вращающегося ярко-красного квадратика перед нами окажется тусклый квадратик. Зачение свойства fillAlpha позволяет регулировать прозрачность заливки. Значение 0 соответствует полной прозрачности, а значение 1 - полной непрозрачности.
Для WireframeMaterial (провоочного каркаса) эффекта можно добиться при помощи изменения пары свойств материала: material.lineColor = 0xFF0000; - отвечает за цвет каркасных линий, material.lineAlpha = 0.1; - задает их прозрачность.
Для BitmapFileMaterial и для MovieAssetMaterial (он тоже на основе BitmapData вроде как) я пока не пойму, возможно ли изменение прозрачности заливки. - Эффекты с фильтрами.
Поскольку никто не отменял использование фильтров, посмотрим, как это может улучшить результат. Для реализации, во-первых, необходимо сделать импорт соответствующей библиотеки: import flash.filters.*;. Во-вторых, в любом месте после вызова конструктора переменной container нужно сформировать набор фильтров. Например, рассмотрим эффекты сияния:
var filter:Array = new Array();
filter.push(new GlowFilter(0x00FF00, 0.5, 20,20, 2, BitmapFilterQuality.HIGH, false, false));
filter.push(new GlowFilter(0x00FF00, 1, 40, 40, 2, BitmapFilterQuality.HIGH, true, false));
Я не объясняю принцип формирования массива фильтров, считаю, что это хорошо известно и понятно написано в хелпе для Flash. После того, как массив фильтров заполнен, можно его применять: container.filters = filter;. Отличный красный квадратик с зеленым сиянием - это то, что должно было получиться. Замечу, что фильтры применяются именно к контейнеру. Такой подход работает и для WireframeMaterial, и для битмапов.
Комментариев нет:
Отправить комментарий