. .
CREATE OR DIE Special Downloads Shop webinale

Schauplatz

Artikel
  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

November 2009

3D-Verbiegungen in Flash


Fortsetzung, Teil 2

Krumme Dinger in der dritten Dimension

(Link zum Artikel: http://www.createordie.de/cod/artikel/2657)

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.

  1. package {
  2. ///////////////////////////////////
  3. // import used classes
  4. ///////////////////////////////////
  5. import flash.display.*;
  6. import flash.events.*;
  7. import flash.filters.*;
  8. import flash.geom.*;
  9. import flash.media.*;
  10. import flash.utils.*;
  11. ///////////////////////////////////
  12. // class
  13. ///////////////////////////////////
  14. public class Main extends Sprite {
  15. private var core :TwistyCubes;
  16. private var surface :RgbScroller;
  17. ///////////////////////////////////
  18. // class constructor
  19. ///////////////////////////////////
  20. public function Main() {
  21. surface = new RgbScroller( 500, 500 );
  22. core = new TwistyCubes();
  23. core.surface = surface.surfaceMap;
  24. core.vortex = surface.bgMap;
  25. addChild( surface );
  26. addChild( core );
  27. stage.quality = StageQuality.LOW;
  28. }
  29. }
  30. }
  31. public class RgbScroller extends Sprite {
  32. public var bufferMap :BitmapData;
  33. public var bgMap :BitmapData;
  34. public var surfaceMap :BitmapData;
  35. private var perlinMap :BitmapData;
  36. private var bmp :Bitmap;
  37. private var disp :DisplacementMapFilter;
  38. private var conv :ConvolutionFilter;
  39. private var colors :Array;
  40. private var w :int = 0;
  41. private var h :int = 0;
  42. private var cnt :int = 0;
  43. private const colorShade :int = 48;
  44. private const sx :Number = Math.sin( ( -17800 ) % 3050 * 0.0315 * Math.PI / 180 );
  45. private const sy :Number = Math.cos( ( -17800 ) % 3050 * 0.0315 * Math.PI / 180 );
  46. private var pnt :Point = new Point;
  47. private const mtr :Matrix = new Matrix( 1, 0, 0, -1, 0, 500 );
  48. private var pi :Number = Math.PI;
  49. private var sin :Function = Math.sin;
  50. private var cos :Function = Math.cos;
  51. ///////////////////////////////////
  52. // class constructor
  53. ///////////////////////////////////
  54. public function RgbScroller( w:int, h:int ) {
  55. this.w = w;
  56. this.h = h;
  57. this.cnt = 0;
  58. this.colors = ColorPalette.create16ColorsArray( this.colorShade );
  59. this.bufferMap = new BitmapData( this.w, this.h, false, 0xFF0000 );
  60. this.bgMap = new BitmapData( this.w, this.h, false, 0xFF0000 );
  61. this.perlinMap = new BitmapData( this.w, this.h, false, 0x808080 );
  62. this.surfaceMap = new BitmapData( this.w, this.h, false, 0xFF0000 );
  63. this.bmp = new Bitmap( this.bgMap );
  64. ///////////////////////////////////
  65. // setup: filter(s)
  66. ///////////////////////////////////
  67. this.perlinMap.perlinNoise( 100, 100, 10, 1, true, true, 7, true );
  68. this.disp = new DisplacementMapFilter( this.perlinMap, null, BitmapDataChannel.RED, BitmapDataChannel.BLUE, this.sx * 200, this.sy * 200, "clamp" );
  69. this.conv = new ConvolutionFilter( 3, 3, new Array( 0, 20, 0, 20, -80, 20, 0, 20, 0 ), 20 );
  70. ///////////////////////////////////
  71. // add
  72. ///////////////////////////////////
  73. addChild(this.bmp);
  74. ///////////////////////////////////
  75. // event(s)
  76. ///////////////////////////////////
  77. addEventListener( Event.ENTER_FRAME, onUpdateFrame );
  78. }
  79. private function onUpdateFrame(evt:Event):void{
  80. var _sx :Number;
  81. var _sy :Number;
  82. var mod :int = 3050;
  83. var i :int = 0;
  84. this.cnt = getTimer() / 10;
  85. while ( i < this.h ) {
  86. this.bufferMap.fillRect( new Rectangle( 0, i, this.w, 1 ), this.colors[ ( i + this.cnt ) % ( colorShade << 4 ) ] );
  87. i++;
  88. }
  89. this.surfaceMap.applyFilter(this.bufferMap, this.bufferMap.rect, this.pnt, this.disp );
  90. this.bgMap.draw( this.bufferMap, this.mtr );
  91. }
  92. }

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

 

Kommentare
Gravatar Leeroy 19.01.2010
um 06:24 Uhr
Hallo,
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
Neuer Kommentar
  • Gute Kommentare werden belohnt.
  •   (optional)
  •   (Kommentar abonnieren/Gravatar - wird nicht veröffentlicht)
  •    Benachrichtige mich bei nachfolgenden Kommentaren per E-Mail
  • -+
Tags
Werbung
3d