Thread
:
Flex Gumbo Papervision Memory Issue
View Single Post
Flexilicious
2008-11-20 #
3
My code is as follows:
..............................................
..............................................
Main App (Interface) Code portion:
<mx:State name="Car3DScene"
enterState="initSWF(event);"
exitState="unloadSWFHandler(event);">
<mx:AddChild relativeTo="{panel1}" position="lastChild">
<mx:Canvas width="100%" height="100%"
minHeight="340" minWidth="920"
borderColor="#1d1d1d" borderThickness="1" borderStyle="solid"
backgroundAlpha="1" backgroundColor="#000000">
<mx:Image x="0" y="0" width="295" height="250"
id="myLogo" source="@Embed('assets/images/scene3dMainImage.png')"
autoLoad="true" maintainAspectRatio="false"/>
<mx:Script>
<![CDATA[
import flash.events.*;
import flash.net.URLRequest;
import mx.controls.SWFLoader;
import mx.events.FlexEvent;
import flash.display.Loader;
public var swfContent:MovieClip;
public function initSWF(e:Event):void
{
myLoader.addEventListener(Event.INIT,loadHandler,f alse, 0, true);
myLoader.addEventListener(Event.UNLOAD,unloadSWFHa ndler,false, 0, true);
myLoader.load("assets/swfs/PV3DCanvasSWFFVPortWR.swf");
}
private function loadHandler(e:Event):void
{
swfContent = e.target.content;
}
private function unloadSWFHandler(e:Event):void
{
swfContent.loaderInfo.loader.unloadAndStop(true);
//myLoader.unloadAndStop(true);
}
]]>
</mx:Script>
<mx:SWFLoader x="295" y="0"
width="625" height="250"
minWidth="625" minHeight="250"
maintainAspectRatio="false"
scaleContent="true" blendMode="normal"
id="myLoader" alpha="1"/>
.................................................. .....
.................................................. .....
Here is the code of the incoming SWF:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
preloader="com.usppro.BasicCustomPreloader"
layout="absolute"
applicationComplete="init3D();">
<mx:Script>
<![CDATA[
import mx.controls.*;
import flash.display.*;
import objects.*;//The as3 geom (3d model) classes
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.render.*;
import org.papervision3d.scenes.*;
import org.papervision3d.view.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.view.*;
import org.papervision3d.core.utils.*;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.core.geom.renderables.*;
private var camera :Camera3D;
private var renderer :BasicRenderEngine;
private var scene :Scene3D;
private var viewport :Viewport3D;
private var universe isplayObject3D;
private var c:CarFinal;//The car 3d model class
[Embed(source="/assets/Car_Black.jpg")]
private var CarTexture:Class;
private function init3D():void
{
Application.application.stage.align = StageAlign.TOP_LEFT;
Application.application.stage.scaleMode = StageScaleMode.NO_SCALE;
Application.application.stage.quality = StageQuality.LOW;
Application.application.stage.frameRate = 30;
viewport = new Viewport3D(625,250,false,false,true,true);
pv3dCanvas.rawChildren.addChild(viewport);
pv3dCanvas.rawChildren.addChild(new Stats());
renderer = new BasicRenderEngine();
scene = new Scene3D();
camera = new Camera3D(universe,18,200);
camera.x = 0;
camera.y = 0;
camera.z = -200;
createObjects();
addEventListeners();
}
private function createObjects():void
{
c = new CarFinal();
c.material = new BitmapMaterial(new CarTexture().bitmapData);
c.x = 0;
c.y = 0;
c.z = 0;
universe = new DisplayObject3D();
universe.addChild(c);
scene.addChild(universe);
universe.x = 200000;
universe.y = -200000;
universe.rotationY = -90;
camera.target = universe;
}
private function addEventListeners():void
{
addEventListener(Event.ENTER_FRAME, loop3D,false,0,true);
}
public function loop3D(e:Event):void
{
camera.target.x -= (((mouseX - (pv3dCanvas.width * 0.5)) * 12) + camera.target.x) / 24;
camera.target.y -= (((mouseY - (pv3dCanvas.height * 0.5)) * 12) + camera.target.y) / 24;
universe.yaw(-0.6);
renderer.renderScene(scene, camera, viewport);
}
]]>
</mx:Script>
<mx:Canvas width="625" height="250"
x="0" y="0"
blendMode="normal"
id="pv3dCanvas"
backgroundColor="#000000" backgroundAlpha="1">
</mx:Canvas>
</mx:Application>
..............................................
..............................................
Here is a code portion of the 3d car model class
package objects
{
import org.papervision3d.core.*;
import org.papervision3d.core.geom.*;
import org.papervision3d.core.geom.renderables.Triangle3D ;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.core.math.NumberUV;
import org.papervision3d.core.proto.*;
public class CarFinal extends TriangleMesh3D
{
public var verts :Array;
public var faceAr:Array;
public var uvs :Array;
private function v(x:Number,y:Number,z:Number):void
{
verts.push(new Vertex3D(x,y,z));
}
private function uv(u:Number,v:Number):void
{
uvs.push(new NumberUV(u,v));
}
private function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int,uvn2:int):void
{
faceAr.push( new Triangle3D( this, [verts[vn0],verts[vn1],verts[vn2] ], null, [uvs[uvn0],uvs[uvn1],uvs[uvn2]] ) );
}
public function cobraCarFinal( material:MaterialObject3D=null, initObject:Object=null )
{
super( material, new Array(), new Array(), null );
verts = this.geometry.vertices;
faceAr= this.geometry.faces;
uvs =new Array();
v(108.544,-31.9748,-101.242);
...........................
f(1248,5195,5196,1248,5195,5196);
this.geometry.ready = true;
}
}
}
Pls show me how
Flexilicious
View Public Profile
Find all posts by Flexilicious