If you load and parse a Collada which has several textures specified, will it 
leave out the materials, or will it load the materials, but as a Wireframe 
Color or something instead?

Whenever I need to swap out a texture at runtime, I run a for each loop over 
the materialLibrary property. It's possible that if you load an object and 
don't pass a material, the for each loop (or for in loop) might still have an 
entry for each referenced material in the model. Then it's just a matter of 
linking up the correct file path to that material.

At that point, since you might know the name of the material you need, there 
might be a way to get that URL off of the object, or you might have a library 
you can reference which will define the file path for that material name. That 
would make it possible to share textures across different objects. On the other 
hand, I guess that still is hard-coding URL paths.

I am using a unique class with Flash embed code for each model I'm using in my 
current project, because each one needs to have additional code information for 
how it interacts inside the environment I've created. If you just needed to 
load a lot of objects, I can see how this would be difficult.

So if you use the standard Collada.load method, it doesn't load the textures, 
you said? Are you sure that it is finding the textures? Are the paths to the 
material images correct inside the Collada? Are they relative?



On Fri, 19 Feb 2010 06:16:05 -0800, Reinorvak <[email protected]> wrote:

Yeah, that is what I was doing previously, but this ended up being a
hard-coded kind of method since each model would have a specific
texture. I was looking for a more dynamic way of going about this as
we're going to have tons of individual models and textures.

Alright let me explain a bit more on how this is working. Currently I
have two classes running about being the Item class, which contains
all the model data. Then there is my own MatLibrary. I use the
MatLibrary to load texture's at run time and place them on the model.
However, this requires that I know which texture goes where on the
model, as there can be multiple texture's per single model. As is
such, I'd like to further separate the need to externally load
texture's when loading a model, as want to load it with the Collada
loader, not using the bitmap parameter.

Currently, this is whats happening in code:

On the load call:
public function loadModel(url:String):void
{
        m_url = url;
        var loader:Object3DLoader = Collada.load("Models/test/chair/
box_test.dae");
        loader.addOnSuccess(onSuccess);
        loader.addOnError(onError);
}

Pretty much just making a basic load call with Collada and setting up
event handlers.

On the load Success:

override protected function onSuccess(e:LoaderEvent)
{
        m_model = (e.loader.handle as ObjectContainer3D);
        m_model.ownCanvas =true;
        m_model.renderer = renderer;
        addChild(m_model);

        for(var i = 0; i < m_textureNames.length; ++i)
        {
                fcsMaterialLibrary.getInstance().addEventListener( 
"LoadComplete" +
m_textureNames[i], initMaterial);
        }
        fcsMaterialLibrary.getInstance().CreateMultiMaterial(m_model,
m_textureNames);
}

Turn the model that has been loaded into an object of the class, and
then continue on to load the Array of textures. The textures are hard-
coded for the time being, and I can get them to show up on the model
with some tricks. But what I'd like to do is remove the need for the
MaterialLibrary, and just have all texture's loaded on the collada
load without having the load the texture beforehand.

Thanks again in advance.

On Feb 18, 4:58 pm, "Joshua Granick" <[email protected]> wrote:
FYI, you can parse on your own like this:

Collada.parse (MeshClass, { material: MaterialClass } );

or

var material:BitmapMaterial = new BitmapMaterial (Cast.bitmap (MaterialClass), 
{ smoothing: true } );
Collada.parse (MeshClass, { material: material } );

That works great if you're embedding. I don't use the built-in load method, but 
if you need the Collada and UV to be outside Flash at runtime, you can load 
them using a URLLoader for the mesh and Loader for the UV, then parse it like 
this. You wouldn't need to cast the material as a bitmap since that's how it 
comes from the Loader, and I think you could just pass the text value into the 
first parameter of the parse method

Hope this helps you get up and running

On Thu, 18 Feb 2010 13:28:38 -0800, Reinorvak <[email protected]> wrote:
> Greetings again everyone,

> Recently, I've come across the problem of trying to load a pre-
> textured model into away3d using the Collada format. I believe I've
> read on something like this before, but couldn't find the post so just
> point me in the direction if its already been resolved.

> Here's the thing. When I load the model into away3d, the parse
> constantly gets stuck on the notifyProgress function. The parser will
> first fire a notifySuccess, but then continues to call the
> notifyProgess and continues parsing the collada file, after getting
> out of its notifyProgress loop. This process will continue forever,
> and I'll never get my models on screen.

> However, should I not set the texture material onto the model, it
> loads just fine and goes on its way. So, I'm not sure if this is a
> problem with the .dae file, which it seems to be, or with something in
> away3d. Either way, I need models to be able to load textures from
> Maya using this collada format. Any help will be appreciated and
> thanks in advance.

> P.S. I'll keep looking on my own for the solution in the mean time.

> Rein


Reply via email to