You now access with the wrong type. obj1 is Object3Dloader, it holds
the handle property which is an Object3D.
The Object3D, obj1object3D holds no property handle that's why you get
this error.
if you do:
private function onLoaderSuccess(e:LoaderEvent):void
{
obj1 = e.loader.handle;
var mesh1:Mesh = obj1 as Mesh; --> no g tag in file single mesh
or
var mesh1:Mesh = (obj1 as ObjectContainer3D).children[0]; --> if you
have a mesh in a group, tag g.
//but beware, since children[0] can also be an objectConatiner3D....
}
you should get no error...
since you have also saved the instance Object3dLoader as obj1
you also can access after its loaded like this:
var mesh1:Mesh = obj1.handle as Mesh; --> no g tag in file single mesh
or
var mesh1:Mesh = (obj1.handle as ObjectContainer3D).children[0]; -->
if you have a mesh in a group, tag g.
Look in http://away3d.com/livedocs/ on Obj class there is an example.
To write a little parser that works on any loaded objects, look into
Weld class or mirror class to see how its done.
Fabrice
On Apr 24, 2009, at 8:48 PM, jojo wrote:
I went ahead and did this instead and did not get the same error
anymore:
private var obj1:Object3DLoader;
private var obj1object3d:Object3D;
obj1 = Obj.load("assett/teapot_1.obj", { material:material } );
obj1.addOnSuccess(onLoaderSuccess);
private function onLoaderSuccess(e:LoaderEvent):void
{
obj1object3d = e.loader.handle;
}
Now I have the handle (obj1object3d) to the read-in .obj, correct?
When I try:
private function onLoaderSuccess(e:LoaderEvent):void
{
obj1object3d = e.loader.handle;
var mesh1:Mesh = obj1object3d as Mesh;
trace(mesh1.handle is mesh);
}
I get following errors:
1119: Access of possibly undefined property handle through a reference
with static type away3d.core.base:Mesh.
1120: Access of undefined property mesh.
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 -