Skip to content
Browse files

Adding missing OBJ folder

  • Loading branch information...
1 parent bd40d34 commit b278ef18fb5250f9423a4f40371c6d15765b0dd2 @deltakosh deltakosh committed
Showing with 192 additions and 0 deletions.
  1. +88 −0 serializers/OBJ/babylon.objSerializer.js
  2. +102 −0 serializers/OBJ/babylon.objSerializer.ts
  3. +2 −0 serializers/OBJ/readme.md
View
88 serializers/OBJ/babylon.objSerializer.js
@@ -0,0 +1,88 @@
+/// <reference path="../babylon.d.ts"/>
+var BABYLON;
+(function (BABYLON) {
+ var OBJExport = (function () {
+ function OBJExport() {
+ }
+ //Exports the geometry of a Mesh in .OBJ file format (text)
+ OBJExport.OBJ = function (mesh, materials, matlibname) {
+ var output = [];
+ var g = mesh.geometry;
+ var trunkVerts = g.getVerticesData('position');
+ var trunkNormals = g.getVerticesData('normal');
+ var trunkUV = g.getVerticesData('uv');
+ var trunkFaces = g.getIndices();
+ if (materials) {
+ if (!matlibname) {
+ matlibname = 'mat';
+ }
+ output.push("mtllib " + matlibname + ".mtl");
+ }
+ for (var i = 0; i < trunkVerts.length; i += 3) {
+ output.push("v " + trunkVerts[i] + " " + trunkVerts[i + 1] + " " + trunkVerts[i + 2]);
+ }
+ for (i = 0; i < trunkNormals.length; i += 3) {
+ output.push("vn " + trunkNormals[i] + " " + trunkNormals[i + 1] + " " + trunkNormals[i + 2]);
+ }
+ for (i = 0; i < trunkUV.length; i += 2) {
+ output.push("vt " + trunkUV[i] + " " + trunkUV[i + 1]);
+ }
+ //TODO: submeshes (groups)
+ //TODO: smoothing groups (s 1, s off)
+ output.push("g gr1");
+ if (materials) {
+ output.push("usemtl mat1");
+ }
+ for (i = 0; i < trunkFaces.length; i += 3) {
+ output.push("f " + (trunkFaces[i + 2] + 1) + "/" + (trunkFaces[i + 2] + 1) + "/" + (trunkFaces[i + 2] + 1) +
+ " " + (trunkFaces[i + 1] + 1) + "/" + (trunkFaces[i + 1] + 1) + "/" + (trunkFaces[i + 1] + 1) +
+ " " + (trunkFaces[i] + 1) + "/" + (trunkFaces[i] + 1) + "/" + (trunkFaces[i] + 1));
+ }
+ var text = output.join("\n");
+ return (text);
+ };
+ //Exports the material(s) of a mesh in .MTL file format (text)
+ OBJExport.MTL = function (mesh) {
+ var output = [];
+ var m = mesh.material;
+ output.push("newmtl mat1");
+ output.push(" Ns " + m.specularPower.toFixed(4));
+ output.push(" Ni 1.5000");
+ output.push(" d " + m.alpha.toFixed(4));
+ output.push(" Tr 0.0000");
+ output.push(" Tf 1.0000 1.0000 1.0000");
+ output.push(" illum 2");
+ output.push(" Ka " + m.ambientColor.r.toFixed(4) + " " + m.ambientColor.g.toFixed(4) + " " + m.ambientColor.b.toFixed(4));
+ output.push(" Kd " + m.diffuseColor.r.toFixed(4) + " " + m.diffuseColor.g.toFixed(4) + " " + m.diffuseColor.b.toFixed(4));
+ output.push(" Ks " + m.specularColor.r.toFixed(4) + " " + m.specularColor.g.toFixed(4) + " " + m.specularColor.b.toFixed(4));
+ output.push(" Ke " + m.emissiveColor.r.toFixed(4) + " " + m.emissiveColor.g.toFixed(4) + " " + m.emissiveColor.b.toFixed(4));
+ //TODO: uv scale, offset, wrap
+ //TODO: UV mirrored in Blender? second UV channel? lightMap? reflection textures?
+ var uvscale = "";
+ if (m.ambientTexture) {
+ output.push(" map_Ka " + uvscale + m.ambientTexture.name);
+ }
+ if (m.diffuseTexture) {
+ output.push(" map_Kd " + uvscale + m.diffuseTexture.name);
+ }
+ if (m.specularTexture) {
+ output.push(" map_Ks " + uvscale + m.specularTexture.name);
+ }
+ /* TODO: emissive texture not in .MAT format (???)
+ if (m.emissiveTexture) {
+ output.push(" map_d "+uvscale+m.emissiveTexture.name);
+ }
+ */
+ if (m.bumpTexture) {
+ output.push(" map_bump -imfchan z " + uvscale + m.bumpTexture.name);
+ }
+ if (m.opacityTexture) {
+ output.push(" map_d " + uvscale + m.opacityTexture.name);
+ }
+ var text = output.join("\n");
+ return (text);
+ };
+ return OBJExport;
+ })();
+ BABYLON.OBJExport = OBJExport;
+})(BABYLON || (BABYLON = {}));
View
102 serializers/OBJ/babylon.objSerializer.ts
@@ -0,0 +1,102 @@
+/// <reference path="../babylon.d.ts"/>
+module BABYLON {
+ export class OBJExport {
+ //Exports the geometry of a Mesh in .OBJ file format (text)
+ public static OBJ(mesh: Mesh, materials?: boolean, matlibname?: string): string {
+ var output = [];
+ var g = mesh.geometry;
+ var trunkVerts = g.getVerticesData('position');
+ var trunkNormals = g.getVerticesData('normal');
+ var trunkUV = g.getVerticesData('uv');
+ var trunkFaces = g.getIndices();
+ if (materials) {
+ if (!matlibname) {
+ matlibname = 'mat';
+ }
+ output.push("mtllib " + matlibname + ".mtl");
+ }
+ for (var i = 0; i < trunkVerts.length; i += 3) {
+ output.push("v " + trunkVerts[i] + " " + trunkVerts[i + 1] + " " + trunkVerts[i + 2]);
+ }
+ for (i = 0; i < trunkNormals.length; i += 3) {
+ output.push("vn " + trunkNormals[i] + " " + trunkNormals[i + 1] + " " + trunkNormals[i + 2]);
+ }
+ for (i = 0; i < trunkUV.length; i += 2) {
+ output.push("vt " + trunkUV[i] + " " + trunkUV[i + 1]);
+ }
+
+ //TODO: submeshes (groups)
+ //TODO: smoothing groups (s 1, s off)
+
+ output.push("g gr1");
+ if (materials) {
+ output.push("usemtl mat1");
+ }
+ for (i = 0; i < trunkFaces.length; i += 3) {
+ output.push(
+ "f " + (trunkFaces[i + 2] + 1) + "/" + (trunkFaces[i + 2] + 1) + "/" + (trunkFaces[i + 2] + 1) +
+ " " + (trunkFaces[i + 1] + 1) + "/" + (trunkFaces[i + 1] + 1) + "/" + (trunkFaces[i + 1] + 1) +
+ " " + (trunkFaces[i] + 1) + "/" + (trunkFaces[i] + 1) + "/" + (trunkFaces[i] + 1)
+ );
+ }
+ var text = output.join("\n");
+ return (text);
+ }
+
+ //Exports the material(s) of a mesh in .MTL file format (text)
+ public static MTL(mesh: Mesh): string {
+ var output = [];
+ var m = <StandardMaterial>mesh.material;
+ output.push("newmtl mat1");
+ output.push(" Ns " + m.specularPower.toFixed(4));
+ output.push(" Ni 1.5000");
+ output.push(" d " + m.alpha.toFixed(4));
+ output.push(" Tr 0.0000");
+ output.push(" Tf 1.0000 1.0000 1.0000");
+ output.push(" illum 2");
+ output.push(" Ka " + m.ambientColor.r.toFixed(4) + " " + m.ambientColor.g.toFixed(4) + " " + m.ambientColor.b.toFixed(4));
+ output.push(" Kd " + m.diffuseColor.r.toFixed(4) + " " + m.diffuseColor.g.toFixed(4) + " " + m.diffuseColor.b.toFixed(4));
+ output.push(" Ks " + m.specularColor.r.toFixed(4) + " " + m.specularColor.g.toFixed(4) + " " + m.specularColor.b.toFixed(4));
+ output.push(" Ke " + m.emissiveColor.r.toFixed(4) + " " + m.emissiveColor.g.toFixed(4) + " " + m.emissiveColor.b.toFixed(4));
+
+ //TODO: uv scale, offset, wrap
+ //TODO: UV mirrored in Blender? second UV channel? lightMap? reflection textures?
+ var uvscale = "";
+
+ if (m.ambientTexture) {
+ output.push(" map_Ka " + uvscale + m.ambientTexture.name);
+ }
+
+ if (m.diffuseTexture) {
+ output.push(" map_Kd " + uvscale + m.diffuseTexture.name);
+ //TODO: alpha testing, opacity in diffuse texture alpha channel (diffuseTexture.hasAlpha -> map_d)
+ }
+
+ if (m.specularTexture) {
+ output.push(" map_Ks " + uvscale + m.specularTexture.name);
+ /* TODO: glossiness = specular highlight component is in alpha channel of specularTexture. (???)
+ if (m.useGlossinessFromSpecularMapAlpha) {
+ output.push(" map_Ns "+uvscale + m.specularTexture.name);
+ }
+ */
+ }
+
+ /* TODO: emissive texture not in .MAT format (???)
+ if (m.emissiveTexture) {
+ output.push(" map_d "+uvscale+m.emissiveTexture.name);
+ }
+ */
+
+ if (m.bumpTexture) {
+ output.push(" map_bump -imfchan z " + uvscale + m.bumpTexture.name);
+ }
+
+ if (m.opacityTexture) {
+ output.push(" map_d " + uvscale + m.opacityTexture.name);
+ }
+
+ var text = output.join("\n");
+ return (text);
+ }
+ }
+}
View
2 serializers/OBJ/readme.md
@@ -0,0 +1,2 @@
+## Babylon.js OBJ serializer
+

0 comments on commit b278ef1

Please sign in to comment.
Something went wrong with that request. Please try again.