coupons adderall malta weather forecast 15 days winter olympics 2010 opening ceremony satellite tv for pc elite edition kathy van zeeland handbags cigarette coupons bmx bike online game chicken laying word game mazda miata specs ebay india coupons famous hispanic people that are dead portfolio management metrics all inclusive caribbean vacations for singles motorola l6 driver software movies new releases in theaters cable modem router bathroom wall cabinets espresso pantyhose photo art formula song download free font background music for video presentation englander pellet stove problems apartments for rent in new york craigslist mitsubishi electric mr slim manual download free hairstyle software summer glau wallpaper sony psp repair guide bathroom medicine cabinets memory foam mattress 2007 kia sorento recalls swf games gratisan software kamera tembus pandang samsung telephones rolex oyster perpetual price roses are red violets are blue poems for mom suzuki samurai for sale in texas helmet decals graphics tattoo lettering styles alphabet mario land download free candy templates computer science resume internship bmw m3 2011 coupe easy homemade halloween costumes digimon adventure games playstation network games torrent leather clutch handbags bra size calculator animation jobs los angeles facebook emoticons monkey youtube belly debian linux download iso maximum ride art compaq presario c500 drivers for xp karastan carpeting reviews brenda song in bleach heat the download megaupload download movie caligula in zip format trucks for sale in panama city wedding invitation wording etiquette soccer games miniclip bathroom medicine cabinets with mirrors recessed sample certificate of dodge trucks parts catalog majong games free vertex programming software free download software for horoscope hyundai santa fe 2010 interior phoenix winphlash download dell keyboard troubleshoot jaguar xj6 parts catalog houston harvest gift products mitsubishi electric mr slim parts mattress world portland oregon football poster slogans download tense english urdu virtual dating games simulation diagnostic software samsung tv problems power strawberry shortcake costumes for adults plus size long range weather forecast butterfly fairy tattoo designs bathroom sinks and countertops nero smart free download rtl driver download samsung eternity games torrent summer olympics 2012 brazil dvd shrink cyclic redundancy check error presentation templates strip quiz games jizz movies really funny jokes one liners pant suits dressy famous poems about love and loss animation mentor rig torrent youtube raptor rollercoaster download hrvatska muzika bathroom vanity lights clearance toyota oem parts lookup female tattoo gallery pontiac firebird formula specs movie quotes from step brothers dino software famous people birthdays in february barbie song mazda5 2010 colors verizon ringback tones wedding songs first dance country suzuki sx4 sedan body kit to make a trojan horse free software pizza recipes for kids toyota parts replacement uk saturn sky hardtop boston shopping guide husqvarna chain saw samsung omnia 2 review computer parts wholesale distributors free download prave mobi melodije lotto 6 results mercedes benz scl600 video pc angel software valentine s gifts for boyfriend free unlock nokia with cable windows vista screensaver porsche careers usa skype for blackberry curve 8310 download chapter indonesian free christian powerpoint templates intimate love coupons dayton electric manufacturing company clothes over bros merchandise mitsubishi tv lamp replacement instructions guitar chords tabs hindi songs kia motors philippines price list replica breitling watches uk which juice cleans pennies best hyundai sonata spoiler logo maker download torrent download runescape autominer kawasaki small engine parts diagram louis replica shoes chrysler 300 commercial song sway free download full strip poker kawasaki oem parts fiche warcraft 4 wiki guitar chords tabs easy disney computer wallpaper resume templates microsoft office mac cingular gps tracking canon s90 review test wet t shirt thanksgiving desktop moving animations for websites free civil software free pinball download spanish dress satellite heart lyrics new moon soundtrack dvd shrink windows 7 64 bit funny wedding poems create your own basketball shoes online email providers canon 7d vs 5d mark ii cadillac cts for sale by owner male masterbation guide wheeled backpacks for college students marc ecko shoes photography jobs in florida removal of a mazda crankshaft pulley gamecube emulators for mac minivan mpg comparison cherry blossom tattoo erotic art gallory battery capacity tester mac rpg games freeware jacket patterns for kids online shirt design maker windows xp wallpapers izvorne mp3 download siding materials seattle motorola cable modem drivers for windows 7 girls pantsed and wedgied keyboard piano lessons for beginners pizza sauce recipe from scratch sony ericsson xperia x10 release date lemonade math game car auction ebay motors uk 4x4 nikon d3000 vs canon xsi mitsubishi outlander 2003 repair manual repair manuals for kenmore washers satellite phone providers in india objective resume career saturn vue 2003 transmission fluid jeep grand cherokee lift kits zj furniture factory outlet los angeles sony vaio recovery disk rapidshare lingerie wallpaper rolex serial numbers stolen gamecube cheats northwave snowboard boots size chart bathroom tile ideas images glass pipes for sale chevrolet trucks for sale in texas underwear for women photos pants off dance off fuse mazda 323 gtx for sale size wedding dresses amc movie coupons wireless bridges for sony tv toyota camry recall list toyota venza lease specials best ds games guy pantsing women summer heights high episode 1 megavideo sofa slipcovers cheap famous spanish people from spain wireless internet service providers in india hertz rental free online digimon games jeep grand cherokee accessories parts desktop destroyer 2 chicken carnage free canon powershot sx120 is manual sony playstation roms free download famous haiku poems by basho wallpaper abyss earth youtube malayalam movies free download caribbean cinemas 8 trinidad movie listing facebook login problems subaru forum forester dvd burning software reviews 2009 spongebob games guitar bar chords chart chrysler town and country commercial song 2009 lexus recall metro new phones famous quotes about change screensavers for mac snow leopard suzuki outboard parts diagrams bluetooth headset ps3 snowflake patterns printable auctioneer advanced tutorial famous black and white photographers and their works formal pant suits for weddings laminate sheets for countertops scientific atlanta cable modem skype emoticons pictures desktop destroyer for mac os x flowers by zoe wholesale leer truck samsung lcd tv parts suzuki samurai engine swaps hairstyles for long hair round face boots uk headquarters nikon d3000 best price smash flash dojo boots for women with skinny legs egyptian last names and meanings chair cushion covers design your own tattoo for free toyota camry parts and accessories pontiac g6 recalls sony vaio drivers for windows xp download travian famous hispanic artists nikon d90 vs canon 50d reviews playstation network store hack hairstyles for round faces and curly hair floor tile layout tool skype for macbook jeep grand cherokee 2011 open swiss bank account dodge aftermarket parts wholesale replica designer handbags china mitsubishi eclipse spyder jackets for petite women toyota tacoma lift kits free animated sex games discount coach handbags nintendo ds emulator for mac download house md season 6 huddy spoilers pizza dough without yeast download for backgammon kia sorento 2011 power repair jeep grand cherokee valentines wallpaper anchor subaru summer medical internships for high school students cheap replica designer handbags wholesale games unblocked handgun for bear protection subwoofer box calculators linux mint review take off bra games roses are red violets are blue poems dirty free lotto dream books hair colors for your skin tone quiz juicer pulp recipes winterbells 1337 pantyhose art my big teen movie porsche cayman for sale dubai download a skateboarding rolex submariner price 2009 hot hot video slots laminate floors home depot pizza hut nutrition info pdf kia sorento 2010 price bathroom wall paint ideas samsung glyde sync software spa days thompson manning wedding compaq presario v6000 drivers for xp download cdspace full version 2008 mazda 6 performance parts furniture warehouse los angeles printer ink refill office max porsche 928 gts for sale australia lowrider art drawings fantasy wallpaper toyota echo transmission fluid rpg maker xp resources pack cyrus bra pictures nanny jobs mattress king richmond va unique tattoo ideas for couples wedding dresses 2010 spring abby movies jeans on sale for juniors nail art gallery bathroom wall cabinets oak brande movies software development life cycle sdlc pdf windows xp desktop rearrange deepthroat movies canon rebel t1i price samsung impression a877 blue unlocked mazda 626 manuals tourism jobs in hawaii hyundai sonata 2009 problems pediatric nurse job description free format software youtube malayalam movies full samsung moment sprint accessories download pokemon porsche cayman used advantage disadvantages e business toyota floor mat recall pictures carrie prejean video download minivan ratings honda civic si for sale in nj avira antivir personal antivirus free xbox subscription codes rolex watches replica yiff flash game weekend fun quotes fashion jeans online printer ink warehouse small bathroom tile ideas photos dvd releases for this week blockbuster autotune online flash bicycle trainer reviews desktop performance for windows aero wives panties and bra rpg maker vx tutorial laminate mazda 626 timing belt change lolita nymph nude art pants off dance off unrated bathroom floor tile layout t shirt dresses plus size rolex daytona price uk basketball quotes by kobe bryant super party slot machine female 3d art jeep grand cherokee 2011 release stores with layaway online icebreaker games small groups printable questions newlywed game widescreen wallpaper bathroom ideas for decorating receiver hitch cargo carrier walmart linux distro comparison 2009 compaq nc6000 drivers ethernet controller box silverado subwoofer rpg maker vx download subwoofers for sale cheap plants vs zombies 2 game eastenders up game bad dog screensaver windows xp printable coupons for walmart electronics volkswagen jetta tdi wagon dish network remote codes panasonic top perfumes with pheromones hair games for girls english samsung moment battery life fix network crossover cable diagram bmw forums e39 equipment auctions ohio dvd shrink download windows 7 gamecube emulator roms torrent play free online slot tournaments pokemon silver game cheats trucks for sale by owner in texas boots for women with large calves gifts for her under 50 dollars valentine heart templates flash flash revolution game online cablevision optimum online speed student portal itt tech poker games free downloads common dodge caliber problems wow addons cartographer 3 tones for nextel phones soccer jerseys wholesale jeep identification free bike stickers drs foster and smith coupon free antivirus removal dodgeball team names funny compaq laptops prices in dubai mercedes benz used parts los angeles nfl power rankings 2010 espn personal assistant job description mitsubishi tv repair manual marriage counseling online free screensaver software porsche cayman caribbean cruise line scam wedding dresses vera wang love dating sims for boys cheats dawnload gta san car mods reel king slots feature cheats mew mew youtube 1970 opel gt specs download pokemon red rom summer internships for college freshmen mitsubishi eclipse spyder convertible parts virtual surgery games jeep liberty accessories limewire basic for mac tiger porsche boxster hardtop conversion remodeling basement stairs autominer download perfume factory outlet niagara on the lake volkswagen liverpool 2010 gmc acadia problems subaru impreza wrx wagon for sale christian marriage quotes and sayings multilanguage microsoft office download build own letterman jacket bathroom mirrors with lights cruises from charleston sc in 2010 cheap laptop skins for gateway karen strip blackjack siding square calculator wow cataclysm beta server furniture liquidators hp c5280 software download confirmation clip art and borders lottery results mcafee free antivirus snowbird snow report and arrow games motorola driver hp compaq nc6000 drivers free download bathroom wall decorating ideas samsung sgh a737 minivan rentals printer drivers lexmark x2600 download muzika za compaq evo drivers vga motorola w175 funny jokes for adults cable modem speed test time warner download for windows xp jar creator using mobile cpu fan controller software compaq 110c netbook review rolex replica swiss made free self hypnosis download mitsubishi lancer forum singapore dare devil download mp3 free floor sample furniture sale nyc software architecture in practice download dvd43 for mac download vire sample marketing backpacks for school at target suzuki m50 boulevard famous poems about life lessons toyota 4runner parts list wallpaper woman subaru forester accessories mazda cx gps maps for blackberry curve view free movies online serial numbers guitar tuner microphone online replica handbags wholesale in new york toyota vitz rs lg software mercedes guardian pictures famous people who died in 2009 wiki cable modem splitters free sonicstage software for sony nw e003f opel astra 2010 review furniture warehouse sarasota fl download jeopardy theme auran download station mitsubishi air conditioners prices free no download mmorpg metro furniture warehouse nashville tn small bathroom renovation ideas sherwood rpg tattoo ideas for men shoulder


Tag Archive for 'BitmapFileMaterial'

A Simple Papervision Carousel

Papervision 3D Carousel

download-source

This week I set out to create a Papervision Carousel in it's simplest form. At the heart of this carousel is a simple "for" loop / math which places the items in a circle in 3D space

Actionscript:
  1. for (var i:int = 0; i <planes.length; i++)
  2. {
  3.     var angle:Number    = Math.PI * 2 / numItems * i;
  4.     var plane:Plane     = planes[i];
  5.     plane.x             = Math.cos(angle) * radius;
  6.     plane.z             = Math.sin(angle) * radius;
  7.     plane.rotationY     = -360 / numItems * i - 90;
  8. }

Then to rotate our carousel we apply some similar math

Actionscript:
  1. var rotateTo:Number = (-360 / numItems) * currentItem + 90;
  2. TweenLite.to(planesHolder, 1, { rotationY:rotateTo, ease:Quint.easeInOut } );

This code allows us to just increment currentItem and rotate our carousel. Another easy add-on would be to setup a navigation along the bottom where you could control and change the currentItem to a specific number to rotate right to that section of the carousel.

It's also very easy to customize the number of items and radius of the carousel by adjusting these numbers.

Actionscript:
  1. protected var numItems:Number = 20;
  2. protected var radius:Number = 500;

Here is the full code.

Actionscript:
  1. package
  2. {
  3.     import flash.display.DisplayObject;
  4.     import flash.display.MovieClip;
  5.     import flash.display.Sprite;
  6.     import flash.events.Event;
  7.     import flash.events.MouseEvent;
  8.     import gs.easing.Quint;
  9.     import gs.TweenLite;
  10.     import org.papervision3d.materials.BitmapFileMaterial;
  11.     import org.papervision3d.objects.DisplayObject3D;
  12.     import org.papervision3d.objects.primitives.Plane;
  13.     import org.papervision3d.view.BasicView;
  14.    
  15.     /**
  16.      * ...
  17.      * @author Charlie Schulze, charlie[at]woveninteractive[dot]com
  18.      */
  19.    
  20.     public class Main extends BasicView
  21.     {
  22.         protected var planes:Array = [];
  23.         protected var numItems:Number = 20;
  24.         protected var radius:Number = 500;
  25.         protected var currentItem:Number = 0;
  26.        
  27.         protected var mat:BitmapFileMaterial;
  28.         protected var planesHolder:DisplayObject3D;
  29.         protected var rightBtn:Sprite;
  30.         protected var leftBtn:Sprite;
  31.        
  32.         public function Main():void
  33.         {
  34.             super();
  35.             init();
  36.         }
  37.         protected function init():void
  38.         {
  39.             createChildren();
  40.             createButtons();
  41.             commitProperties();
  42.             startRendering();
  43.         }
  44.         protected function createChildren():void
  45.         {
  46.            
  47.             planesHolder = new DisplayObject3D();
  48.            
  49.             //Create Material
  50.             mat             = new BitmapFileMaterial("images/queen.gif");
  51.             mat.smooth   = true;
  52.             mat.doubleSided = true;
  53.            
  54.             for (var i:int = 0; i <numItems; i++)
  55.             {
  56.                 var plane:Plane = new Plane(mat, 150, 234);
  57.                 planes.push(plane);
  58.                
  59.                 //Add plane to the scene
  60.                 planesHolder.addChild(plane);
  61.             }
  62.             scene.addChild(planesHolder);
  63.         }
  64.        
  65.         protected function commitProperties():void
  66.         {
  67.             //Set properties of our planes
  68.             for (var i:int = 0; i <planes.length; i++)
  69.             {
  70.                 var angle:Number    = Math.PI * 2 / numItems * i;
  71.                 var plane:Plane     = planes[i];
  72.                 plane.x             = Math.cos(angle) * radius;
  73.                 plane.z             = Math.sin(angle) * radius;
  74.                 plane.rotationY     = -360 / numItems * i - 90;
  75.             }
  76.            
  77.             //Adjust camera
  78.             camera.y = 200;
  79.            
  80.             //Rotate once
  81.             rotate();
  82.         }
  83.  
  84.         //Rotates the carousel
  85.         protected function rotate():void
  86.         {
  87.             var rotateTo:Number = (-360 / numItems) * currentItem + 90;
  88.             TweenLite.to(planesHolder, 1, { rotationY:rotateTo, ease:Quint.easeInOut } );
  89.         }
  90.        
  91.         /*
  92.          * Everything below this point is just for creating the buttons and
  93.          * setting button events for controlling the carousel.
  94.          */
  95.  
  96.         protected function createButtons():void
  97.         {
  98.             //Create Buttons
  99.             rightBtn = createButton();
  100.             leftBtn = createButton();
  101.                
  102.             addChild(leftBtn);
  103.             addChild(rightBtn);
  104.            
  105.             //Add button listeners
  106.             rightBtn.buttonMode = true;
  107.             leftBtn.buttonMode = true;
  108.             rightBtn.addEventListener(MouseEvent.CLICK, buttonClick);
  109.             leftBtn.addEventListener(MouseEvent.CLICK, buttonClick);
  110.                        
  111.             //Place buttons on stage
  112.             rightBtn.x    = stage.stageWidth - 120;
  113.             leftBtn.x       = 100;
  114.             rightBtn.y    =  stage.stageHeight / 2;
  115.             leftBtn.y       =  (stage.stageHeight / 2) + 20;
  116.             leftBtn.rotation    = 180;
  117.         }
  118.        
  119.         //Button actions
  120.         protected function buttonClick(evt:MouseEvent):void
  121.         {
  122.             switch (evt.target)
  123.             {
  124.                 case rightBtn:
  125.                 currentItem --;
  126.                 break;
  127.                
  128.                 case leftBtn:
  129.                 currentItem ++;
  130.                 break;
  131.             }
  132.             rotate();
  133.         }
  134.        
  135.         //Creates a simple arrow shape / returns the sprite
  136.         protected function createButton():Sprite
  137.         {
  138.             var btn:Sprite = new Sprite();
  139.            
  140.             btn.graphics.beginFill(0x333333);
  141.             btn.graphics.moveTo(0, 0);
  142.             btn.graphics.lineTo(0, 20);
  143.             btn.graphics.lineTo(10, 10);
  144.             btn.graphics.lineTo(0, 0);
  145.             btn.graphics.endFill();
  146.             return btn;
  147.         }
  148.     }
  149. }

Feel free to post links to ways you expand upon this file.

download-source

Post to Twitter Post to Delicious Delicious Post to Digg Digg This Post Post to Facebook Facebook Post to StumbleUpon Stumble This Post

Panorama Viewer

*FIXED!!*

Here's a really simple example, all it does is texture a sphere and rotate it depending on what the camera is doing:

Click Here (1.3Mb download so I didn't embed this one)

Source Code (Uses the Base Class):

Actionscript:
  1. /**
  2. * ...
  3. * @author Luke Mitchell
  4. * @version 1
  5. */
  6.  
  7. package  {
  8. \timport org.papervision3d.materials.BitmapFileMaterial;
  9. \timport flash.events.MouseEvent;
  10. \timport org.papervision3d.materials.ColorMaterial;
  11. \timport org.papervision3d.materials.utils.MaterialsList;
  12. \timport org.papervision3d.objects.primitives.Cube;
  13. \t
  14. \tpublic class Main extends PaperBase {
  15. \t\t
  16. \t\tpublic var materials:MaterialsList = new MaterialsList(
  17. \t\t{
  18. \t\t\tfront: new BitmapFileMaterial("http://papervision2.com/wp-content/pano/s1.gif"),
  19. \t\t\tback: new BitmapFileMaterial("http://papervision2.com/wp-content/pano/s3.gif"),
  20. \t\t\tleft: new BitmapFileMaterial("http://papervision2.com/wp-content/pano/s4.gif"),
  21. \t\t\tright: new BitmapFileMaterial("http://papervision2.com/wp-content/pano/s2.gif"),
  22. \t\t\ttop: new ColorMaterial(0x000000),
  23. \t\t\tbottom: new ColorMaterial(0x000000)
  24. \t\t});
  25. \t\tpublic var cubemap:Cube = new Cube(materials, 2000, 2000, 900, 5, 5, 5,Cube.ALL);
  26. \t\t
  27. \t\tpublic function Main() {
  28. \t\t\tinit(600,300);
  29. \t\t\tcubemap.x = 0;
  30. \t\t\tcubemap.y = 0;
  31. \t\t\tcubemap.z = 0;
  32. \t\t\t
  33. \t\t\tdefault_scene.addChild(cubemap);
  34. \t\t\tdefault_camera.z = 0;
  35. \t\t\tdefault_camera.x = 0;
  36. \t\t\tdefault_camera.y = 0;
  37. \t\t\tdefault_camera.lookAt(cubemap);
  38. \t\t\t
  39. \t\t\tdefault_camera.zoom = 5;
  40. \t\t\tstage.addEventListener(MouseEvent.MOUSE_WHEEL, mWheel);
  41. \t\t}
  42. \t\t
  43. \t\tpublic function mWheel(e:MouseEvent):void {
  44. \t\t\tdefault_camera.zoom += e.delta / 5;
  45. \t\t\tif (default_camera.zoom &lt;5) {
  46. \t\t\t\tdefault_camera.zoom = 5;
  47. \t\t\t}else if (default_camera.zoom&gt; 20) {
  48. \t\t\t\tdefault_camera.zoom = 20;
  49. \t\t\t}
  50. \t\t}
  51. \t\t
  52. \t\toverride protected function processFrame():void {
  53. \t\t\tcubemap.yaw( -((stage.mouseX - (stage.width / 2)) / stage.width)*4);
  54. \t\t\tdefault_camera.rotationX = -((stage.mouseY - (stage.height / 2)) / stage.height) * (Math.sqrt(default_camera.zoom*6));
  55. \t\t}
  56. \t}
  57. }

You can use this for pretty much any panoramic image, just change the image url and tweak it a bit :)

-Luke

Post to Twitter Post to Delicious Delicious Post to Digg Digg This Post Post to Facebook Facebook Post to StumbleUpon Stumble This Post

10. Advanced Interactivity

**UPDATE
This tutorial has been updated:
Updates:
1) Removed InteractiveScene3DEvent and replaced it with standard MouseEvents
2) Updated to use papervision's BasicView.as class

view-update

Today we're going to learn how to handle more advanced interactivity. We'll be making something like this:

Click on a face of the cube to zoom into it. Click it again to make the cube spin again.

So, in this tutorial I'm going to show you exactly how to work out which material has been clicked on the cube and act accordingly.

If you haven't read it already, I strongly suggest that you read the Basic Interactivity tutorial first or you'll probably miss something.

Ok, so on to the code.

Firstly we'll want six materials to apply to each face of the cube. Here are mine, although you can create whatever materials you like:

Actionscript:
  1. private var frontMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/front.jpg");
  2.         private var backMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/back.jpg");
  3.         private var leftMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/left.jpg");
  4.         private var rightMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/right.jpg");
  5.         private var topMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/top.jpg");
  6.         private var bottomMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/bottom.jpg");

So, in this code I'm just loading six images from my server to use as each face.

Also, add the following declaration beneath the texture declarations to hold our Cube object:

Actionscript:
  1. private var cube:Cube;

Now we need to set up the 3d initiation code. In this code we will firstly set all of our materials as interactive, and then give each of our materials a name. This is VERY important to be able to easily find out which material has been clicked. If we didn't give each material a name then we wouldn't be able to easily work out which face has been clicked.

So, add the following code to your init3d() function:

Actionscript:
  1. override protected function init3d():void {
  2.             // We need to be able to identify each side. We'll do this
  3.             // by asssigning names to each material. During this process
  4.             // we'll also make the materials interactive.
  5.             frontMaterial.interactive = true;
  6.             frontMaterial.name = "front";
  7.             backMaterial.interactive = true;
  8.             backMaterial.name = "back";
  9.             leftMaterial.interactive = true;
  10.             leftMaterial.name = "left";
  11.             rightMaterial.interactive = true;
  12.             rightMaterial.name = "right";
  13.             topMaterial.interactive = true;
  14.             topMaterial.name = "top";
  15.             bottomMaterial.interactive = true;
  16.             bottomMaterial.name = "bottom";
  17.             // ---------------------------------------------
  18.            
  19.             cube = new Cube(new MaterialsList( {
  20.                 front: frontMaterial,
  21.                 back: backMaterial,
  22.                 left: leftMaterial,
  23.                 right: rightMaterial,
  24.                 top: topMaterial,
  25.                 bottom: bottomMaterial
  26.                 } ), 500, 500, 500, 3, 3, 3);
  27.             cube.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS, onPress);
  28.             default_scene.addChild(cube);
  29.         }

So, In this code, we've set each material as interactive, given each one a sensible name, and initialised our cube with the materials assigned to the correct faces.

We then add an event listener to trigger the "onPress" event when the cube is clicked, then finally we add the cube to the scene.

We've now got a cube with six materials on it listening for a click event.

Now, the code which will let us work out which face has been clicked:

Actionscript:
  1. private function onPress( e:InteractiveScene3DEvent ):void {
  2.     switch(e.face3d.material.name) {
  3.         case "front":
  4.             // This code will be run when the front face is clicked
  5.         break;
  6.         case "back":
  7.             // This code will be run when the back face is clicked
  8.         break;
  9.         case "left":
  10.             // This code will be run when the left face is clicked
  11.         break;
  12.         case "right":
  13.             // This code will be run when the right face is clicked
  14.         break;
  15.         case "top":
  16.             // This code will be run when the top face is clicked
  17.         break;
  18.         case "bottom":
  19.             // This code will be run when the bottom face is clicked
  20.         break;
  21.     }
  22. }

Pretty self explanitary. The "e" variable in this code holds lots of data about the click event, including which material has been clicked, so, because we know which material is on each face, we can tell by the materials name which face has been clicked!

With a little bit of code, you can make a nice spinning cube gallery like the example above:

Here is my final code, have fun!

Actionscript:
  1. package  {
  2.    
  3.     import flash.display.DisplayObject;
  4.     import org.papervision3d.materials.BitmapFileMaterial;
  5.     import org.papervision3d.materials.utils.MaterialsList;
  6.     import org.papervision3d.events.InteractiveScene3DEvent;
  7.     import org.papervision3d.objects.primitives.Cube;
  8.    
  9.     public class Main extends PaperBase {
  10.        
  11.         private var frontMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/front.jpg");
  12.         private var backMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/back.jpg");
  13.         private var leftMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/left.jpg");
  14.         private var rightMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/right.jpg");
  15.         private var topMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/top.jpg");
  16.         private var bottomMaterial:BitmapFileMaterial = new BitmapFileMaterial("http://papervision2.com/wp-content/pvTex/bottom.jpg");
  17.        
  18.         private var targetrotationX:Number = 0;
  19.         private var targetrotationY:Number = 0;
  20.         private var targetrotationZ:Number = 0;
  21.        
  22.         private var tweening:Boolean = false;
  23.        
  24.         private var cube:Cube;
  25.        
  26.         public function Main() {
  27.             init(400, 400);
  28.         }
  29.        
  30.         override protected function init3d():void {
  31.             // We need to be able to identify each side. We'll do this
  32.             // by asssigning names to each material. During this process
  33.             // we'll also make the materials interactive.
  34.             frontMaterial.interactive = true;
  35.             frontMaterial.name = "front";
  36.             backMaterial.interactive = true;
  37.             backMaterial.name = "back";
  38.             leftMaterial.interactive = true;
  39.             leftMaterial.name = "left";
  40.             rightMaterial.interactive = true;
  41.             rightMaterial.name = "right";
  42.             topMaterial.interactive = true;
  43.             topMaterial.name = "top";
  44.             bottomMaterial.interactive = true;
  45.             bottomMaterial.name = "bottom";
  46.             // ---------------------------------------------
  47.            
  48.             cube = new Cube(new MaterialsList( {
  49.                 front: frontMaterial,
  50.                 back: backMaterial,
  51.                 left: leftMaterial,
  52.                 right: rightMaterial,
  53.                 top: topMaterial,
  54.                 bottom: bottomMaterial
  55.                 } ), 500, 500, 500, 3, 3, 3);
  56.             // Listen for the click:
  57.             cube.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS, onPress);
  58.             // Add to scene:
  59.             default_scene.addChild(cube);
  60.         }
  61.        
  62.         private function onPress( e:InteractiveScene3DEvent ):void {
  63.             // If the cube has been moved to the front:
  64.             if (tweening) {
  65.                 // Let it rotate again
  66.                 tweening = false;
  67.             }else {
  68.                 // Find which rotation we need to be able to see
  69.                 // the face image:
  70.                 switch(e.face3d.material.name) {
  71.                     case "front":
  72.                         targetrotationX = 0;
  73.                         targetrotationY = 180;
  74.                         targetrotationZ = 0;
  75.                         tweening = true;
  76.                     break;
  77.                     case "back":
  78.                         targetrotationX = 0;
  79.                         targetrotationY = 0;
  80.                         targetrotationZ = 0;
  81.                         tweening = true;
  82.                     break;
  83.                     case "left":
  84.                         targetrotationX = 0;
  85.                         targetrotationY = -90;
  86.                         targetrotationZ = 0;
  87.                         tweening = true;
  88.                     break;
  89.                     case "right":
  90.                         targetrotationX = 0;
  91.                         targetrotationY = 90;
  92.                         targetrotationZ = 0;
  93.                         tweening = true;
  94.                     break;
  95.                     case "top":
  96.                         targetrotationX = 90;
  97.                         targetrotationY = 0;
  98.                         targetrotationZ = 0;
  99.                         tweening = true;
  100.                     break;
  101.                     case "bottom":
  102.                         targetrotationX = -90;
  103.                         targetrotationY = 0;
  104.                         targetrotationZ = 180;
  105.                         tweening = true;
  106.                     break;
  107.                 }
  108.             }
  109.         }
  110.        
  111.         override protected function processFrame():void {
  112.             if (tweening) {
  113.                 // If a face has been clicked
  114.                 if (default_camera.zoom &lt;6.8) {
  115.                     // If the camera isn't zoomed enough then zoom in a bit more:
  116.                     default_camera.zoom += Math.sqrt(6.8-default_camera.zoom)/5;
  117.                 }
  118.                
  119.                 // Test each rotation and rotate it towards the target rotation:
  120.                 // X axis:
  121.                 if (cube.rotationX &lt;targetrotationX) {
  122.                     cube.rotationX += Math.sqrt(targetrotationX-cube.rotationX);
  123.                     cube.rotationX = Math.round(cube.rotationX);
  124.                 }else if (cube.rotationX&gt; targetrotationX) {
  125.                     cube.rotationX -= Math.sqrt(cube.rotationX-targetrotationX);
  126.                     cube.rotationX = Math.round(cube.rotationX);
  127.                 }
  128.                 // Y axis:
  129.                 if (cube.rotationY &lt;targetrotationY) {
  130.                     cube.rotationY += Math.sqrt(targetrotationY-cube.rotationY);
  131.                     cube.rotationY = Math.round(cube.rotationY);
  132.                 }else if (cube.rotationY&gt; targetrotationY) {
  133.                     cube.rotationY -= Math.sqrt(cube.rotationY-targetrotationY);
  134.                     cube.rotationY = Math.round(cube.rotationY);
  135.                 }
  136.                 // Z axis:
  137.                 if (cube.rotationZ &lt;targetrotationZ) {
  138.                     cube.rotationZ += Math.sqrt(targetrotationZ-cube.rotationZ);
  139.                     cube.rotationZ = Math.round(cube.rotationZ);
  140.                 }else if (cube.rotationZ&gt; targetrotationZ) {
  141.                     cube.rotationZ -= Math.sqrt(cube.rotationZ-targetrotationZ);
  142.                     cube.rotationZ = Math.round(cube.rotationZ);
  143.                 }
  144.             }else {
  145.                 // If the camera is zoomed in, it shouldn't be now
  146.                 if (default_camera.zoom&gt; 2) {
  147.                     // So zoom out a bit.
  148.                     default_camera.zoom -= Math.sqrt(default_camera.zoom-2)/5;
  149.                 }
  150.                
  151.                 // Rotate the cube a bit:
  152.                 cube.rotationX += 2;
  153.                 cube.rotationY += 2;
  154.                
  155.                 // Make sure that we dont "wind up" the rotation
  156.                 if (cube.rotationX&gt;= 360) cube.rotationX = 0;
  157.                 if (cube.rotationY&gt;= 360) cube.rotationY = 0;
  158.             }
  159.         }
  160.     }
  161. }

Post to Twitter Post to Delicious Delicious Post to Digg Digg This Post Post to Facebook Facebook Post to StumbleUpon Stumble This Post


Follow papervision2 on Twitter

Flash and the City banner
2010 Flash And The City Speaker

RSS Feed