when you say "your loader "obj1" might not be declared..." do you mean
declared as variable? Because I do:

         public var obj1:Object3DLoader;

I looked in obj1 file ("teapot_1.obj") and it did indeed have g tag.
Re-exported file without g tag (max 9 btw) and tried code again and
got same error:

TypeError: Error #1009: Cannot access a property or method of a null
object reference.
        at Basic_Cube/onLoaderSuccess()

var mesh1:Mesh = obj1 as Mesh;
trace(mesh1.vertices.length);  <-- if I comment out this line I get no
error which I think makes sense ?



I also declared the variable for Object3D
private var obj13d:Object3D;

but what code do I use get the handle for obj1 (which I assume will be
obj13d) ?


Sorry to be such a squeeky noob!



On Apr 24, 5:38 am, Fabrice <[email protected]> wrote:
> your loader "obj1" might not be declared...
>
> Also make sure it's a Mesh instance when you do not have the error  
> anymore..
> trace(obj1.handle is Mesh);
> if not you'll get another error. If the handle is indeed a single Mesh  
> object exported as obj and there is no g tag in the file, then the  
> code will run ok.
>
> Fabrice
>
> On Apr 24, 2009, at 11:49 AM, jojo wrote:
>
>
>
>
>
> > Thanks for the response, Fabrice :)
>
> > obj1.visible=false; ... Ah very good and should have been obvious to
> > me ... I feel a bit silly ...
> > tried it but didn't work but I think that is because button isn't
> > working ... I'll get it working
>
> > All single meshes for now ... so I tried:
>
> > private var obj13d:Object3D;
>
> > obj1 = Obj.load("assett/teapot_1.obj", { material:material } );
>
> > obj1.addOnSuccess(onLoaderSuccess);
>
> > private function onLoaderSuccess(e:LoaderEvent):void
> > {
>
> > var mesh:Mesh = obj1.handle as Mesh;
> > trace(mesh.vertices.length);
> > }
>
> > but got compile "output":
> > TypeError: Error #1009: Cannot access a property or method of a null
> > object reference.
> >    at Basic_Cube/onLoaderSuccess()
> >    at flash.events::EventDispatcher/dispatchEventFunction()
> >    at flash.events::EventDispatcher/dispatchEvent()
> >    at away3d.loaders::Object3DLoader/notifySuccess()
> >    at away3d.loaders::Object3DLoader/onParserComplete()
> >    at flash.events::EventDispatcher/dispatchEventFunction()
> >    at flash.events::EventDispatcher/dispatchEvent()
> >    at away3d.loaders::AbstractParser/notifySuccess()
> >    at away3d.loaders::AbstractParser/parseNext()
> >    at away3d.loaders::Object3DLoader/startParsingGeometry()
> >    at away3d.loaders::Object3DLoader/onGeometryComplete()
> >    at flash.events::EventDispatcher/dispatchEventFunction()
> >    at flash.events::EventDispatcher/dispatchEvent()
> >    at flash.net::URLLoader/onComplete()
>
> > Do I have obj13d as the mesh or is that output saying something else?
>
> > Sorry for all the low level questions ... btw I'm excited to be
> > "trying" to learn away3d because I've read so many things about it.
> > Good job!
>
> > On Apr 24, 12:35 am, Fabrice <[email protected]> wrote:
> >> Hi Jojo,
> >> You need to save the Object3DLoader.handle object instead of the
> >> Object3DLoader itself.
>
> >> the handle is the loaded geometry as Object3D
> >> for the obj format this means it can be an ObjectContainer3D, most of
> >> the time because you grouped meshes into your editor, (G tag into the
> >> obj file)
> >> Mesh(es) or both. So you need to parse the handle according to your  
> >> 3D
> >> object (obj file).
>
> >> for instance on onLoaderSuccess
> >> the obj1.handle Object3D can be a Mesh or an ObjectContainer3D
>
> >> If the obj file contains just a single mesh, you can access the
> >> geometry information like this:
> >> function addOnSuccessresult
> >>         var mesh:Mesh = obj1.handle as Mesh;
> >>         trace(mesh.vertices.length);
> >>         mesh.material = somenewMaterial;
>
> >> while if the obj file is a group of meshes the above code would
> >> generate an error, since the handle is not a Mesh but an
> >> ObjectContainer3D
> >>         trace("there are "+obj1.handle.children.length+" objects in  
> >> this
> >> file");
> >>         var mesh:Mesh = (obj1.handle as  
> >> ObjectContainer3D).children[0];
>
> >> If you have variable structure and you want to automate, just add a
> >> recursive parsing on loaded success,
> >> Take a look in Weld class, Mirror class code to see how its done.
>
> >> hiding an object is as simple as adding the property visible true/
> >> false to it.
> >> when set to false, the object is ignored by the engine for the
> >> rendering.
>
> >> Welcome to Away!
>
> >> Fabrice
>
> >> On Apr 24, 2009, at 6:26 AM, jojo wrote:
>
> >>> Hello,
>
> >>> I'm new to oop, flash, and away3d but trying hard reading
> >>> examples,etc ... just can't get mind around certain concepts ...
>
> >>> Couple questions ...
>
> >>> Suppose I read in an exported .obj file (textures come in fine) as
> >>> such:
>
> >>> import away3d.loaders.Obj;
>
> >>> public var obj1:Object3DLoader;
>
> >>> var material:BitmapFileMaterial = new BitmapFileMaterial
> >>> ("bitmap1.jpg");
>
> >>> obj1 = Obj.load("teepot1.obj", { material:material } );
>
> >>> All good to that point ...
>
> >>> 1. How do I get access to mesh vertices to be able to manipulate  
> >>> obj1?
> >>> I know it's mesh.vertices but all examples I've seen just don't make
> >>> sense (not sure the basic setup). Could I get a little extra
> >>> clarification as to where to begin having obj1 in hand?
>
> >>> 2. If I then read in another obj file (which I verified can be  
> >>> read in
> >>> and texture file is ok) how do I switch back and forth displaying  
> >>> one
> >>> or the other?
>
> >>> I've tried:
>
> >>> if (objtoload=2) { scene.addChild(obj2);scene.removeChild(obj1); }
>
> >>> via a button handler but I get the original obj and then a cube of
> >>> some sort with a texture of text saying "Loading Geometry ..." over
> >>> top of original obj ...
>
> >>> using Flash CS4 (demo), away3D 3.3.3, btw
>
> >>> Thanks- Hide quoted text -
>
> >> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -

Reply via email to