将Away3D网格保存到Wavefront .obj

问题描述 投票:0回答:2

我正在尝试将Away3D中生成的一些网格物体(带有路径拉伸)导出到我可以在Three.js中使用的.obj文件中。我设法导出了几何图形,但可以找出UV贴图。这是到目前为止我得到的:

        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;
    }

我做错了什么?我需要几何图形和UV ...到目前为止,如果仅保留前两个循环,我将获得具有几何图形且没有UV的有效obj。如果添加UV回路,则由于某些原因UV缓冲区无效。

actionscript-3 3d stage3d away3d
2个回答
1
投票

尝试一下:

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;
}

0
投票

我还试图将away3d场景保存到obj wavefront文件中。感谢您的代码。乍一看看起来不错。但是,导出格式错误。取而代之的是立方体,而不是立方体:)

有人可以帮忙吗?

我的代码:

public function addEL(theName:String,geometry:Geometry) {
            var objFile:String = "" ;
            var i:int = 0;
            var pri:int = 0;
            var sg:CompactSubGeometry;
            var b:uint = 0;

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

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

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

                objFile+="\nusemtl None \n";
                objFile+="s off \n";

                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;
            }

            exportStr+=objFile;
        }

谢谢本

© www.soinside.com 2019 - 2024. All rights reserved.