We've added examples for this. For embeds and loadings.
RM also has events, why not use them by default? This would probably spare you 
headhackes in the long run...

Also, another tip: avoid addChild anything before its there. Even if its in 
there for the convenience or better said, implemented because it can be handy 
in some cases,
it is a safer practice to addChild an object when you know it's there for sure. 
After all, what is the point of addChilding an empty container if it turns out 
the server can not find the url for instance?
In this particular class, it is not a big deal of course, as you can locate 
your potential resource loading problem very fast, but if you were dealing a 
more complex scenery, it might cost you headackes again, simply because your 
code assumes it's there.

Fabrice


On Apr 22, 2011, at 9:01 AM, Choons wrote:

> also realized you need to load up your mesh so
> 
> private var _mesh:Mesh;
> 
> public function away3d():void
> {
>       createOBJ(); // make a function to create your object
> 
> }
> 
> private function createOBJ():void
> {
> 
> ResourceManager.instance.addEventListener(ResourceEvent.RESOURCE_RETRIEVED,
> onResourceRetrieved);
>      container =
> ObjectContainer3D(ResourceManager.instance.parseData(new OBJ(),
> "cube", true));
>      view.scene.addChild(container);
> }
> 
> private function onResourceRetrieved(event : ResourceEvent) : void
> {
>       var mesh : Mesh;
>       for (var i : int = 0; i < _container.numChildren; ++i)
>        {
>                mesh = Mesh(_container.getChildAt(i));
>                mesh.geometry.scale(0.1);
>               _mesh = mesh;
>       }
> 
> }
> 
> On Apr 21, 11:11 pm, EngineerMike <[email protected]> wrote:
>> Hey All,
>> 
>> I'm really excited about the new Away3d 4.0 library, however I've been
>> running into a lot of trouble loading even the simplest objects.
>> Embedding objects leads to a missing .mtl file even when I trace
>> baseUri + mtlurl in OBJParser and it's correct.  So I've gone with
>> loading external assets (which I prefer anyways).  I've searched far
>> and wide on this group to try to find an answer but I'm stuck so here
>> I am.   Here's all the relevant files and the stack with traces at
>> specific points, any help is greatly appreciated.
>> 
>> --------------------------------------------------------------------------- 
>> -------------
>> .as File
>> 
>> package
>> {
>>         import away3d.containers.ObjectContainer3D;
>>         import away3d.containers.View3D;
>>         import away3d.entities.Mesh;
>>         import away3d.events.LoaderEvent;
>>         import away3d.events.ResourceEvent;
>>         import away3d.lights.PointLight;
>>         import away3d.loading.ResourceManager;
>>         import away3d.materials.BitmapMaterial;
>> 
>>         import flash.display.Sprite;
>>         import flash.events.Event;
>>         import flash.net.URLRequest;
>>         import flash.utils.ByteArray;
>> 
>>         public class away3d extends Sprite
>>         {
>> 
>>                 [Embed(source="/assets/texture.jpg")]
>>                 private var Mat:Class;
>> 
>>                 [Embed(source="/assets/cube.obj", 
>> mimeType="application/octet-
>> stream")]
>>                 private var OBJ:Class;
>> 
>>                 private var view:View3D = new View3D();
>>                 private var light:PointLight = new PointLight();
>>                 private var container:ObjectContainer3D;
>> 
>>                 public function away3d():void
>>                 {
>>                         super();
>> 
>> ResourceManager.instance.addEventListener(ResourceEvent.RESOURCE_RETRIEVED,
>> onRetrieve);
>> 
>>                         container =
>> ObjectContainer3D(ResourceManager.instance.getResource('/assets/
>> cube.obj'));
>>                         container.scale(100);
>> 
>>                         view.scene.addChild(light);
>>                         view.scene.addChild(container);
>>                         stage.align = "top";
>> 
>>                         addEventListener(Event.ENTER_FRAME, onFrame);
>> 
>>                 }
>> 
>>                 private function onRetrieve(e:ResourceEvent):void
>>                 {
>>                         trace('success');
>>                         /*
>>                         var mesh:Mesh;
>>                         var mat:BitmapMaterial = new BitmapMaterial(new 
>> Mat().bitmapData);
>> 
>>                         mesh = Mesh(e.target.handle);
>>                         mesh.material = mat;
>>                         */
>>                 }
>> 
>>                 private function onFrame(e:Event):void
>>                 {
>> 
>>                         view.render();
>> 
>>                 }
>>         }
>> 
>> }
>> 
>> -------------------------------------------------------
>> stack
>> 
>> RangeError: Error #1125: The index 0 is out of range 0.
>>         at 
>> away3d.loading.parsers::OBJParser/translate()[C:\Users\Mike\Desktop
>> \away3d\src\away3d\loading\parsers\OBJParser.as:217]
>>         at away3d.loading.parsers::OBJParser/proceedParsing()[C:\Users\Mike
>> \Desktop\away3d\src\away3d\loading\parsers\OBJParser.as:166]
>>         at away3d.loading.parsers::ParserBase/onInterval()[C:\Users\Mike
>> \Desktop\away3d\src\away3d\loading\parsers\ParserBase.as:243]
>>         at away3d.loading.parsers::ParserBase/startParsing()[C:\Users\Mike
>> \Desktop\away3d\src\away3d\loading\parsers\ParserBase.as:258]
>>         at away3d.loading.parsers::ParserBase/parseTextAsync()[C:\Users\Mike
>> \Desktop\away3d\src\away3d\loading\parsers\ParserBase.as:161]
>>         at away3d.loading::AssetLoader/parse()[C:\Users\Mike\Desktop\away3d
>> \src\away3d\loading\AssetLoader.as:267]
>>         at away3d.loading::AssetLoader/handleUrlLoaderError()[C:\Users\Mike
>> \Desktop\away3d\src\away3d\loading\AssetLoader.as:235]
>>         at flash.events::EventDispatcher/dispatchEventFunction()
>>         at flash.events::EventDispatcher/dispatchEvent()
>>         at flash.net::URLLoader/onComplete()
>> At OBJParser:loadMtl:139 - Vector _objects created here.
>> At OBJParser:loadMtl:166 - Method Translate called, no values have
>> been pushed to _objects.
>> At OBJParser:loadMtl:216 - Vector groups initialized with
>> _objects[_objectIndex].  Out of Bounds Error here.
>> 
>> -----------------------------------------------
>> .obj file
>> 
>> mtllib cube.mtl
>> v  -8.9734 0.0000 20.1663
>> v  -8.9734 0.0000 -19.4264
>> v  20.8450 0.0000 -19.4264
>> v  20.8450 0.0000 20.1663
>> v  -8.9734 28.0913 20.1663
>> v  20.8450 28.0913 20.1663
>> v  20.8450 28.0913 -19.4264
>> v  -8.9734 28.0913 -19.4264
>> vn 0.0000 -1.0000 -0.0000
>> vn 0.0000 1.0000 -0.0000
>> vn 0.0000 0.0000 1.0000
>> vn 1.0000 0.0000 -0.0000
>> vn 0.0000 0.0000 -1.0000
>> vn -1.0000 0.0000 -0.0000
>> vt 1.0000 0.0000 0.0000
>> vt 1.0000 1.0000 0.0000
>> vt 0.0000 1.0000 0.0000
>> vt 0.0000 0.0000 0.0000
>> g Cube
>> usemtl Material__26
>> s 2
>> f 1/1/1 2/2/1 3/3/1 4/4/1
>> s 4
>> f 5/4/2 6/1/2 7/2/2 8/3/2
>> s 8
>> f 1/4/3 4/1/3 6/2/3 5/3/3
>> s 16
>> f 4/4/4 3/1/4 7/2/4 6/3/4
>> s 32
>> f 3/4/5 2/1/5 8/2/5 7/3/5
>> s 64
>> f 2/4/6 1/1/6 5/2/6 8/3/6
>> 
>> -----------------------------------------------------------
>> .mtl file
>> 
>> newmtl Material__26
>> Ns 10.0000
>> Ni 1.5000
>> d 1.0000
>> Tr 0.0000
>> Tf 1.0000 1.0000 1.0000
>> illum 2
>> Ka 0.5880 0.5880 0.5880
>> Kd 0.5880 0.5880 0.5880
>> Ks 0.0000 0.0000 0.0000
>> Ke 0.0000 0.0000 0.0000
>> map_Ka texture.jpg
>> map_Kd texture.jpg
>> 
>> -------------------------------------------------------------
>> 
>> I'm stuck because it's referencing an index in _objects however
>> between when the instance of the object is created and when an index
>> is referenced in it nothing in between pushes any values to it so I'm
>> confused how this could possibly work in any instance.
>> 
>> Any help is greatly appreciated.
>> 
>> Thanks,
>> 
>> Mike

Reply via email to