我正在尝试将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缓冲区无效。
尝试一下:
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;
}
我还试图将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;
}
谢谢本