[Papervision3D] How to make my MovieMaterial loads after the MovieClips ???
Ohm
qkate at free.fr
Fri May 30 02:59:29 PDT 2008
Hello All,
Everything is in the title... I understand that I have to create my
MovieMaterial(s) after my mc's have been created but I can't figure out
where (or when) within this code :
Main mxml :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:comp="com.peanuts.*" layout="absolute"
backgroundColor="#000000"
backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#ffffff,
#000000]"
applicationComplete="init()"
cachePolicy="on" creationPolicy="all">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import org.papervision3d.materials.MovieMaterial;
import mx.events.*;
import flash.display.*;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.view.*;
import org.papervision3d.scenes.*;
import org.papervision3d.events.*;
import org.papervision3d.render.*;
import org.papervision3d.lights.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.shadematerials.*;
import caurina.transitions.Tweener;
import com.peanuts.*;
private const SPHERE_SIZE:Number = 300;
private var scene :Scene3D;
private var camera :Camera3D;
private var viewPort :Viewport3D;
private var renderer :BasicRenderEngine;
private var sp :Sphere;
private var spPivot :DisplayObject3D;
private var locations :Array = new Array();
private var pointLight :PointLight3D;
private var mouseDownX :Number = 0;
private var mouseDownY :Number = 0;
private var xDiff :Number = 0;
private var yDiff :Number = 0;
private var mouseIsDown :Boolean = false;
private var planeWidth :Number = 100;
private var planeHeight :Number = 80;
private var sW :int = 12;
private var sH :int = 12;
private var maxPlanes :Number = 90;
private var radius :Number = 305;
private var pict :Plane;
private var pictMaterial:MovieMaterial;
private var cube :Cube;
private var rot :Number = -989;
private var rotRad :Number;
private var loadData:LoadData = new LoadData();
private function init():void
{
init3D();
stage.align = StageAlign.TOP_LEFT;
stage.quality = StageQuality.LOW;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener( MouseEvent.MOUSE_DOWN, mousePressed );
stage.addEventListener( MouseEvent.MOUSE_UP, mouseReleased );
stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
private function init3D():void
{
scene = new Scene3D();
renderer = new BasicRenderEngine();
viewPort = new Viewport3D( this.width, this.height, true, true );
var uic:UIComponent = new UIComponent();
uic.addChild( viewPort );
this.addChild( uic );
camera = new Camera3D();
camera.zoom = 5;
camera.z = -300;
var spMaterial:WireframeMaterial = new WireframeMaterial( 0xFF00FF,
0 );
spMaterial.smooth = false;
spPivot = new DisplayObject3D();
scene.addChild( spPivot );
sp = new Sphere( spMaterial, SPHERE_SIZE, sW, sH );
spPivot.z = 400;
sp.x = 0;
spPivot.addChild( sp );
pointLight = new PointLight3D( true );
pointLight.y = 0;
pointLight.z = -290;
addPlane();
}
private function mousePressed(event:Event ):void
{
mouseIsDown = true;
}
private function mouseReleased(event:Event ):void
{
mouseIsDown = false;
}
private function onEnterFrame( evt:Event ):void
{
if( mouseIsDown )
{
var currentX:Number = mouseX;
var currentY:Number = mouseY;
var mouseAngle:Number = BDGalaxy.rad2deg( Math.atan2( mouseDownX
- currentX, mouseDownY - currentY ) );
if( Math.abs( mouseDownX - currentX ) > 5 )
{
xDiff = mouseDownX - currentX;
}
yDiff = mouseDownY - currentY;
}
xDiff *= 0.8;
yDiff *= 0.8;
sp.rotationY += xDiff;
sp.rotationY = BDGalaxy.clamp( sp.rotationY );
spPivot.rotationX -= yDiff;
spPivot.rotationX = Math.min( 80, spPivot.rotationX);
spPivot.rotationX = Math.max( -80, spPivot.rotationX);
mouseDownX = mouseX;
mouseDownY = mouseY;
renderer.renderScene(scene, camera, viewPort, true);
}
private static function deg2rad( degrees:Number):Number
{
return degrees * ( Math.PI /180 );
}
private static function rad2deg( rad:Number):Number
{
return rad * ( 180/Math.PI );
}
private static function clamp( src:Number ):Number
{
while ( src < 0 )
{
src += 360;
}
while ( src >= 360 )
{
src-= 360;
}
return src;
}
private function addPlane( ):void
{
var planeMaterial:FlatShadeMaterial = new FlatShadeMaterial( pointLight,
0x3399CC, 0x000033 );
planeMaterial.doubleSided = true;
planeMaterial.smooth = true;
for ( var i:int = maxPlanes; i >= 0; i-- )
{
var plane:Plane = new Plane( planeMaterial, planeWidth, planeHeight, 1, 1
);
// Uniform distribution
// phi, theta - spherical coordinates
// i - plane index
// max - plane amount
var phi:Number = Math.acos( -1 +( 2 * i - 1 ) / maxPlanes );
var theta:Number = Math.sqrt( maxPlanes * Math.PI ) * phi;
// Coordinate conversion
// radius - radius of the sphere
plane.x = radius * Math.cos( theta ) * Math.sin( phi );
plane.y = radius * Math.sin( theta ) * Math.sin( phi );
plane.z = radius * Math.cos( phi );
// Add planes
var plName:String = "Plane" + String(i);
sp.addChild( plane, plName );
plane.lookAt( sp );
// Add pictures
trace("imgURLs: "+ loadData.tabMC[i] );//-> UNDEFINED
pictMaterial = new MovieMaterial( loadData.tabMC[i] );// -> TOO SOON !
pictMaterial.doubleSided = false;
pictMaterial.smooth = true;
pictMaterial.interactive = true;
pict = new Plane( pictMaterial, planeWidth, planeHeight, 1, 1 );
pict.addEventListener( InteractiveScene3DEvent.OBJECT_RELEASE,
pictHandler );
pict.x = sp.getChildByName( plName ).x + (plane.x * 1.5);
pict.y = sp.getChildByName( plName ).y + (plane.y * 1.5);
pict.z = sp.getChildByName( plName ).z + (plane.z * 1.5);
sp.addChild( pict );
pict.lookAt( plane );
Tweener.addTween( pict, { x:sp.getChildByName( plName ).x,
y:sp.getChildByName( plName ).y,
z:sp.getChildByName( plName ).z,
time:5,
transition:"easeInOutExpo",
onComplete:function removePlanes():void {
planeMaterial.fillAlpha = 0; //kind of remove planes...
}
} );
}
}
private function pictHandler( evt:InteractiveScene3DEvent ):void
{
var clickedPlane:Plane = evt.target as Plane;
trace( "pictHandler: " + clickedPlane );
}
]]>
</mx:Script>
</mx:Application>
And here is the class to load my pictures in movieclips :
package com.peanuts
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import org.papervision3d.materials.MovieMaterial;
public class LoadData
{
[Bindable]
public var tabMC:Array = [];
public function LoadData( )
{
loadXmlData();
}
private function loadXmlData():void
{
var loader:URLLoader = new URLLoader();
loader.load( new URLRequest( "imgs/data.xml" ) );
loader.addEventListener( Event.COMPLETE, onXmlComplete );
}
private function onXmlComplete( evt:Event ):void
{
var dataXml:XML = new XML(evt.currentTarget.data);
var entries:XMLList = dataXml.children();
var numberOfPhotos:int = entries.length();
for ( var j:int = 0; j < numberOfPhotos; j++ )
{
var _entryNode:XML = entries[j];
var _imageUrl:String = _entryNode.img;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE,
loaderHandler, false, 5 );
var req:URLRequest = new URLRequest( _imageUrl );// OK
loader.load( req );
}
}
private function loaderHandler( evt:Event ):void
{
var loader:Loader = Loader( evt.target.loader );
var img:Bitmap = Bitmap( loader.content );
var bmp:BitmapData = img.bitmapData;
var mc:MovieClip = new MovieClip();
mc.addChild( img );
setMC( mc );
}
private function setMC( _mc:MovieClip ):void
{
this.tabMC.push( _mc );
}
}
}
Thx for any help, I've been struggling with this without any solution :-(
--
View this message in context: http://www.nabble.com/How-to-make-my-MovieMaterial-loads-after-the-MovieClips-----tp17555415p17555415.html
Sent from the Papervision3D mailing list archive at Nabble.com.
More information about the Papervision3D
mailing list