November 2009
3D-Verbiegungen in Flash
Fortsetzung, Teil 2
Krumme Dinger in der dritten Dimension
Schon ist es verdreht
In wirklich kürzester Zeit haben wir nun zwei Würfel erstellt, die zwar, wie schon oft gesehen, per Mausklick auf der y-Achse rotieren, sich dabei aber zusätzlich gummiartig in sich selbst verdrehen. Das sorgt für neuen Schwung und Abwechslung in der sonst so gewohnten Animationsmechanik.
Wer jetzt aber an dieser Stelle den eben beschrieben Sourcecode schon kopiert und verwendet hat, wird sich just mit einigen Error-Meldungen befassen. Das rührt daher, dass unseren Würfeln noch die generativen Texturen fehlen, ohne die das BitmapMaterial hier nun mal nicht verwendet werden kann. Das sowie den Kernaufruf von kontinuierlicher Texturgenerierung und den 3D-Würfel-Modifizierer reiche ich hiermit nach.
package {///////////////////////////////////// import used classes///////////////////////////////////import flash.display.*;import flash.events.*;import flash.filters.*;import flash.geom.*;import flash.media.*;import flash.utils.*;///////////////////////////////////// class///////////////////////////////////public class Main extends Sprite {private var core :TwistyCubes;private var surface :RgbScroller;///////////////////////////////////// class constructor///////////////////////////////////public function Main() {surface = new RgbScroller( 500, 500 );core = new TwistyCubes();core.surface = surface.surfaceMap;core.vortex = surface.bgMap;addChild( surface );addChild( core );stage.quality = StageQuality.LOW;}}}public class RgbScroller extends Sprite {public var bufferMap :BitmapData;public var bgMap :BitmapData;public var surfaceMap :BitmapData;private var perlinMap :BitmapData;private var bmp :Bitmap;private var disp :DisplacementMapFilter;private var conv :ConvolutionFilter;private var colors :Array;private var w :int = 0;private var h :int = 0;private var cnt :int = 0;private const colorShade :int = 48;private const sx :Number = Math.sin( ( -17800 ) % 3050 * 0.0315 * Math.PI / 180 );private const sy :Number = Math.cos( ( -17800 ) % 3050 * 0.0315 * Math.PI / 180 );private var pnt :Point = new Point;private const mtr :Matrix = new Matrix( 1, 0, 0, -1, 0, 500 );private var pi :Number = Math.PI;private var sin :Function = Math.sin;private var cos :Function = Math.cos;///////////////////////////////////// class constructor///////////////////////////////////public function RgbScroller( w:int, h:int ) {this.w = w;this.h = h;this.cnt = 0;this.colors = ColorPalette.create16ColorsArray( this.colorShade );this.bufferMap = new BitmapData( this.w, this.h, false, 0xFF0000 );this.bgMap = new BitmapData( this.w, this.h, false, 0xFF0000 );this.perlinMap = new BitmapData( this.w, this.h, false, 0x808080 );this.surfaceMap = new BitmapData( this.w, this.h, false, 0xFF0000 );this.bmp = new Bitmap( this.bgMap );///////////////////////////////////// setup: filter(s)///////////////////////////////////this.perlinMap.perlinNoise( 100, 100, 10, 1, true, true, 7, true );this.disp = new DisplacementMapFilter( this.perlinMap, null, BitmapDataChannel.RED, BitmapDataChannel.BLUE, this.sx * 200, this.sy * 200, "clamp" );this.conv = new ConvolutionFilter( 3, 3, new Array( 0, 20, 0, 20, -80, 20, 0, 20, 0 ), 20 );///////////////////////////////////// add///////////////////////////////////addChild(this.bmp);///////////////////////////////////// event(s)///////////////////////////////////addEventListener( Event.ENTER_FRAME, onUpdateFrame );}private function onUpdateFrame(evt:Event):void{var _sx :Number;var _sy :Number;var mod :int = 3050;var i :int = 0;this.cnt = getTimer() / 10;while ( i < this.h ) {this.bufferMap.fillRect( new Rectangle( 0, i, this.w, 1 ), this.colors[ ( i + this.cnt ) % ( colorShade << 4 ) ] );i++;}this.surfaceMap.applyFilter(this.bufferMap, this.bufferMap.rect, this.pnt, this.disp );this.bgMap.draw( this.bufferMap, this.mtr );}}
Der Quellcode steht auch als Download bereit.
Noch mehr Verdrehtes
Auf den Geschmack gekommen? Die komplette Bibliothek kann über http://code.google.com/p/as3dmod/ heruntergeladen werden. Noch mehr abgedrehte Beispiele hält Bartek Drozdz, der Entwickler der AS3mod-Lib, in seinem Blog bereit (http://www.everydayflash.com/blog/index.php/2008/09/26/update-as3dmod-1/). Natürlich muss man dieses Add-on nicht benutzen, sondern kann auch getrost Verbiegungen, Verdrehungen oder sonst welche Verformungen selbst per Script berechnen – aber für solide Resultate, die noch dazu zeitlich schnell herzustellen sind, ist AS3mod eine wirklich gute Lösung.
Frank Reitberger arbeitet und entwickelt als Flash-Teamleiter für anyMOTION GRAPHICS Internet- und Offlineanwendungen im B2C- und B2B-Bereich. Frank veröffentlicht unter seinem Nickname „pwdVergesser“ auch viele seiner kleinen Flash Snippets im Flashforum sowie in seinem Blog www.prinzipiell.com
ich habe ein paar Beispiele im Netz gefunden die ich sehr beeindruckend finde!
Ich weis nicht genau ob die Beispiele eine der hier aufgeführten Klassen benutzt,aber es sieht stark danach aus ;)
Beispiel 1:
http://www.flashdevelopment.de/CONTENTS/DYNAMIC3DVIDEOSHOWCASE02/dynamic3dvideoshowcase02.php
Beispiel 2:
http://www.flashdevelopment.de/CONTENTS/DYNAMIC3DPRODUCTSLIDER01/dynamic3dproductslider01.php
Beispiel 3:
http://www.flashdevelopment.de/CONTENTS/3DCURVESHOWCASE01/3dcurveshowcase01.php
Beispiel 4:
http://www.flashdevelopment.de/CONTENTS/DYNAMIC3DCURVESTACK01/dynamic3dcurvestack01.php
Viele Grüße :) #zitieren


























