Make obj exporter use new vertex data
This commit is contained in:
@@ -201,4 +201,46 @@ class Exporter {
|
||||
// if (UITrait.inst.isEmis) Krom.fileSaveBytes(path + "/tex_emis" + ext, bo.getBytes().getData());
|
||||
// if (UITrait.inst.isSubs) Krom.fileSaveBytes(path + "/tex_subs" + ext, bo.getBytes().getData());
|
||||
}
|
||||
|
||||
public static function exportMesh(path:String) {
|
||||
var s = "";
|
||||
var off = 0;
|
||||
for (p in UITrait.inst.paintObjects) {
|
||||
var mesh = p.data.raw;
|
||||
var posa = mesh.vertex_arrays[0].values;
|
||||
var nora = mesh.vertex_arrays[1].values;
|
||||
var texa = mesh.vertex_arrays[2].values;
|
||||
var len = Std.int(posa.length / 3);
|
||||
s += "o " + p.name + "\n";
|
||||
for (i in 0...len) {
|
||||
s += "v " + posa[i * 4 + 0] + " " +
|
||||
posa[i * 4 + 2] + " " +
|
||||
(-posa[i * 4 + 1]) + "\n";
|
||||
}
|
||||
for (i in 0...len) {
|
||||
s += "vn " + nora[i * 2 + 0] + " " +
|
||||
posa[i * 4 + 3] + " " +
|
||||
(-nora[i * 2 + 1]) + "\n";
|
||||
}
|
||||
for (i in 0...len) {
|
||||
s += "vt " + texa[i * 2 + 0] + " " +
|
||||
(1.0 - texa[i * 2 + 1]) + "\n";
|
||||
}
|
||||
var inda = mesh.index_arrays[0].values;
|
||||
for (i in 0...Std.int(inda.length / 3)) {
|
||||
|
||||
var i1 = inda[i * 3 + 0] + 1 + off;
|
||||
var i2 = inda[i * 3 + 1] + 1 + off;
|
||||
var i3 = inda[i * 3 + 2] + 1 + off;
|
||||
s += "f " + i1 + "/" + i1 + "/" + i1 + " " +
|
||||
i2 + "/" + i2 + "/" + i2 + " " +
|
||||
i3 + "/" + i3 + "/" + i3 + "\n";
|
||||
}
|
||||
off += inda.length;
|
||||
}
|
||||
#if kha_krom
|
||||
if (!StringTools.endsWith(path, ".obj")) path += ".obj";
|
||||
Krom.fileSaveBytes(path, haxe.io.Bytes.ofString(s).getData());
|
||||
#end
|
||||
}
|
||||
}
|
||||
|
||||
+1
-42
@@ -1849,50 +1849,9 @@ class UITrait extends iron.Trait {
|
||||
arm.App.foldersOnly = true;
|
||||
arm.App.showFilename = true;
|
||||
arm.App.filesDone = function(path:String) {
|
||||
|
||||
var f = arm.App.filenameHandle.text;
|
||||
if (f == "") f = "untitled";
|
||||
|
||||
var s = "";
|
||||
var off = 0;
|
||||
for (p in paintObjects) {
|
||||
var mesh = p.data.raw;
|
||||
var posa = mesh.vertex_arrays[0].values;
|
||||
var nora = mesh.vertex_arrays[1].values;
|
||||
var texa = mesh.vertex_arrays[2].values;
|
||||
var len = Std.int(posa.length / 3);
|
||||
s += "o " + p.name + "\n";
|
||||
for (i in 0...len) {
|
||||
s += "v " + posa[i * 3 + 0] + " " +
|
||||
posa[i * 3 + 2] + " " +
|
||||
(-posa[i * 3 + 1]) + "\n";
|
||||
}
|
||||
for (i in 0...len) {
|
||||
s += "vn " + nora[i * 3 + 0] + " " +
|
||||
nora[i * 3 + 2] + " " +
|
||||
(-nora[i * 3 + 1]) + "\n";
|
||||
}
|
||||
for (i in 0...len) {
|
||||
s += "vt " + texa[i * 2 + 0] + " " +
|
||||
(1.0 - texa[i * 2 + 1]) + "\n";
|
||||
}
|
||||
var inda = mesh.index_arrays[0].values;
|
||||
for (i in 0...Std.int(inda.length / 3)) {
|
||||
|
||||
var i1 = inda[i * 3 + 0] + 1 + off;
|
||||
var i2 = inda[i * 3 + 1] + 1 + off;
|
||||
var i3 = inda[i * 3 + 2] + 1 + off;
|
||||
s += "f " + i1 + "/" + i1 + "/" + i1 + " " +
|
||||
i2 + "/" + i2 + "/" + i2 + " " +
|
||||
i3 + "/" + i3 + "/" + i3 + "\n";
|
||||
}
|
||||
off += inda.length;
|
||||
}
|
||||
#if kha_krom
|
||||
var objpath = path + "/" + f;
|
||||
if (!StringTools.endsWith(objpath, ".obj")) objpath += ".obj";
|
||||
Krom.fileSaveBytes(objpath, haxe.io.Bytes.ofString(s).getData());
|
||||
#end
|
||||
Exporter.exportMesh(path + "/" + f);
|
||||
};
|
||||
}
|
||||
ui.combo(Id.handle(), ["obj"], "Format", true);
|
||||
|
||||
Reference in New Issue
Block a user