Guest User

CopperLicht:: OBJ Loader

a guest
Jan 7th, 2012
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //--------------------------------------------------------------------------------------------------------------------------        
  2. //                                      ObjLoaderNode
  3. //--------------------------------------------------------------------------------------------------------------------------        
  4.                
  5.         // our own scene node implementation
  6.         ObjLoaderNode = function()
  7.         {
  8.             this.init();
  9.             this.Box = new CL3D.Box3d();
  10.             this.DoesCollision = false;
  11.             this.OwnedMesh = null;
  12.             this.BuildMesh = new CL3D.Mesh();
  13.             this.ReadOnlyMaterials = true;
  14.             this.Selector = null
  15.                
  16.             // create a 3d mesh with one mesh buffer
  17.             this.VertexBuffer = new CL3D.MeshBuffer();            
  18.             this.BuildMesh.AddMeshBuffer(this.VertexBuffer);
  19.         }
  20.         ObjLoaderNode.prototype = new CL3D.MeshSceneNode(); // derive from SceneNode
  21.  
  22.         ObjLoaderNode.prototype.load = function(engine, filename, scale) {
  23.  
  24.             if (scale == null) scale = 0.05;
  25.        
  26.             var a = new CL3D.CCFileLoader(filename);
  27.            
  28.             var loaderNode = this;
  29.            
  30.             a.load(function (data) {
  31.                 data = data.split("\n");
  32.                 var vertices = [];
  33.                 var vertdata = [];
  34.                 var texdata = [];
  35.                 var normdata = [];
  36.  
  37.                 // helper function for quickly creating a 3d vertex from 3d position and texture coodinates
  38.                 createVertex = function(x, y, z, s, t, nx, ny, nz)
  39.                 {
  40.                     var vtx = new CL3D.Vertex3D(true);
  41.                     vtx.Pos.X = x;
  42.                     vtx.Pos.Y = y;
  43.                     vtx.Pos.Z = z;
  44.                     vtx.TCoords.X = s;
  45.                     vtx.TCoords.Y = t;
  46.                     vtx.Normal.X = nx;
  47.                     vtx.Normal.Y = ny;
  48.                     vtx.Normal.Z = nz;
  49.                     return vtx;
  50.                 }  
  51.                
  52.                 function getvertex(desc) {
  53.                     if (vertices[desc] == null) {
  54.                         var desc = desc.split("/");
  55.                         var x = vertdata[desc[0]].x;
  56.                         var y = vertdata[desc[0]].y;
  57.                         var z = vertdata[desc[0]].z;
  58.                         var u = ((desc[1] != null)?texdata[desc[1]].u:0);
  59.                         var v = ((desc[1] != null)?texdata[desc[1]].v:0);
  60.                         var nx = ((desc[2] != null)?normdata[desc[2]].nx:0);
  61.                         var ny = ((desc[2] != null)?normdata[desc[2]].ny:0);
  62.                         var nz = ((desc[2] != null)?normdata[desc[2]].nz:1);
  63.                         vertices[desc] = loaderNode.VertexBuffer.Vertices.push(createVertex( x, y, z,  u, v,  nx, ny, nz) )-1;
  64.                     }
  65.                     return vertices[desc];
  66.                 }
  67.                
  68.                 var vertindex = 1;
  69.                 var texindex = 1;
  70.                 var normindex = 1;
  71.                
  72.                 loaderNode.VertexBuffer.Vertices = [];
  73.                 loaderNode.VertexBuffer.Indices = [];
  74.  
  75.                 for (var i=0; i<data.length; i++) {
  76.                     data[i] = data[i].replace("  ", " ");
  77.                     var line = data[i].split(" ");
  78.                     if (line.length > 0) {
  79.                         switch (line[0]) {
  80.                             case "v":
  81.                                 var x = parseFloat(line[1])*scale;
  82.                                 var y = parseFloat(line[2])*scale;
  83.                                 var z = parseFloat(line[3])*scale;
  84.                                 vertdata[vertindex] = { x:x, y:y, z:z };
  85.                                 vertindex ++;
  86.                                 break;
  87.                             case "vn":
  88.                                 var nx = parseFloat(line[1]);
  89.                                 var ny = parseFloat(line[2]);
  90.                                 var nz = parseFloat(line[3]);
  91.                                 normdata[normindex] = { nx:nx, ny:ny, nz:nz };
  92.                                 normindex ++;
  93.                                 break;                                
  94.                             case "vt":
  95.                                 var u = parseFloat(line[1]);
  96.                                 var v = parseFloat(line[2]);
  97.                                 texdata[texindex] = { u:u, v:v };
  98.                                 texindex ++;
  99.                                 break;
  100.                             case "f":
  101.                                 var a = getvertex(line[1]);
  102.                                 var b = getvertex(line[2]);
  103.                                 for (var it=3; it<line.length-1;it++) {
  104.                                     var c = getvertex(line[it]);
  105.                                     loaderNode.VertexBuffer.Indices.push(a); loaderNode.VertexBuffer.Indices.push(b); loaderNode.VertexBuffer.Indices.push(c);
  106.                                     b = c;
  107.                                 }
  108.                         }
  109.                     }
  110.                 }
  111.                 loaderNode.VertexBuffer.update(true);
  112.                 //loaderNode.VertexBuffer.Mat.Tex1 = engine.getTextureManager().getTexture("wood_texture.jpg", true); //<-----------texture
  113.                 loaderNode.setMesh(loaderNode.BuildMesh);
  114.             })
  115.            
  116.         }
Advertisement
Add Comment
Please, Sign In to add comment