Saving an Away3D mesh to Wavefront .obj

147 views Asked by At

I'm trying to export some meshes generated in Away3D (with Path Extrude) to an .obj file that I can use in Three.js. I've managed to export the geometry but can figure out the UV mapping. Here's what I got so far:

        private static function getObjFile(geometry:Geometry):String {
                  var objFile:String = "" ;
                    var i:int = 0;
                    var pri:int = 0;
                    var sg:SubGeometry;
                    var b:uint = 0;

                    for each(sg in geometry.subGeometries){
                            objFile += "\no";
                            i = 0;
                            for each(var v:Number in sg.vertexData){
                            if(i%3 == 0) objFile += "\nv";
                            i++;
                            objFile += " " + setPrecision(v, 1000);
                            }

                            i=0;
                            for each(var v:Number in sg.UVData){
                                if(i%2 == 0) objFile += "\nvt";
                                i++;
                                objFile += " " + setPrecision(v, 1000);
                            }


                            b = 0;
                            for each(var ind:uint in sg.indexData){
                                if(b%3 == 0) objFile += "\nf";
                                b++;
                                objFile += " " + String(ind + 1 + pri)+"/"+String(ind + 1 + pri);
                            }


                             b = 0;


                            for each(var n:Number in sg.vertexNormalData) {  

                                if (b % 3 == 0) objFile += "\nvn";
                                objFile += " " + setPrecision(n, 1000);
                                b++;

                            }





                            pri = i /3;
                    }


                return objFile;
    }

What am I doing wrong? I need the geometry and the UVs... so far if I keep only the first two loops I get valid obj with geometry and no UVs. If add the UV loop... the UV buffer is invalid for some reason.

1

There are 1 answers

1
Lajos Viktor On

Try out this:

private static function getObjFile(geometry:Geometry):String {
    var objFile:String = "" ;
    var i:int = 0;
    var pri:int = 0;
    var sg:SubGeometry;
    var b:uint = 0;

    for each(sg in geometry.subGeometries){
        objFile += "\no";
        i = 0;
        for each(var v:Number in sg.vertexData){
            if(i%3 == 0) objFile += "\nv";
            i++;
            objFile += " " + setPrecision(v, 1000);
        }

        i=0;
        for each(v in sg.vertexNormalData){
            if(i%3 == 0) objFile += "\nvn";
            i++;
            objFile += " " + setPrecision(v, 1000);
        }

        i=0;
        for each(v in sg.UVData){
            if(i%2 == 0) objFile += "\nvt";
            i++;
            objFile += " " + setPrecision(v, 1000);
        }


        b = 0;
        for each(var ind:uint in sg.indexData){
            if(b%3 == 0) objFile += "\nf";
            b++;
            var indexString:String = String(ind + 1 + pri);
            objFile += " " + indexString + '/' + indexString + '/' + indexString;
        }

        pri = i /3;
    }


    return objFile;
}