public override void run() { if (!ready()) { Debug.LogError("Node pins not initialized"); return; } _3DObject _3dobj = inputPins[0].get(); string modelname = inputPins[1].get(); string path = "ARModels/" + modelname; Transform t = (Transform)Resources.Load(path, typeof(Transform)); MeshFilter mf = t.GetComponent <MeshFilter>(); MeshRenderer mr = t.GetComponent <MeshRenderer>(); _3dobj.mesh_filter.mesh = mf.sharedMesh; _3dobj.mesh_renderer.sharedMaterials = mr.sharedMaterials; Debug.Log("Loaded 3D Model: " + path); outputPins[0].run(); }
public _3DObject CreateObject(String name) { var result = new _3DObject { Name = name }; _objects.Add(result); return(result); }
public override void run() { if (!ready()) { Debug.LogError("Node pins not initialized"); return; } GameObject obj = inputPins[0].get(); MeshFilter mf = obj.AddComponent <MeshFilter>(); MeshRenderer mr = obj.AddComponent <MeshRenderer>(); comp = new _3DObject(mf, mr); Debug.Log("3D Component Created"); outputPins[0].run(); }
internal void Read3DsFile(string fileName) { // read chunks using (FileStream fs = new FileStream( fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (BinaryReader bs = new BinaryReader(fs)) { _3DObject currentObject = null; // read all chunks long fileSize = fs.Length; long bytesRead = 0; bool meshMode = false; const int chunkSize = sizeof(ushort) + sizeof(uint); while (bytesRead < fileSize) { Boolean skipChunk = false; Word word; Chunk chunk = ReadChunk(bs); bytesRead += chunkSize; switch (chunk.ChunkId) { case 0x0000: // NULL chunk break; case 0x3D3D: // 3D editor chunk meshMode = true; // log("Mesh found"); break; case 0x4000: // object block if (!meshMode) { throw new FileLoadException("Invalid 3DS file, object block before mesh block"); } // skip zero terminated object name StringBuilder name = new StringBuilder(); int b; while ((b = bs.ReadByte()) != 0) { name.Append(Convert.ToChar(b)); bytesRead++; } // create object currentObject = _scene.CreateObject(name.ToString()); break; case 0x4100: // triangular mesh, informative break; case 0x4110: // vertices list // check if we have a current object if (currentObject == null) { currentObject = _scene.CreateObject("Unnamed Object " + _scene.GetObjectCount().ToString()); } // check how many vertices to read word = ReadWord(bs); int pointsToRead = word.Value; currentObject.InitializeVertices(pointsToRead); // add points to current object while (pointsToRead-- > 0) { Point point = ReadPoint(bs); currentObject.AppendVertex(point.X, point.Y, point.Z); } // count bytesread bytesRead += chunk.ChunkLength - chunkSize; break; case 0x4120: // faces // check if we have a current object if (currentObject == null) { currentObject = _scene.CreateObject(""); } word = ReadWord(bs); int facesToRead = word.Value; currentObject.InitializeFaces(facesToRead); // add faces to current object while (facesToRead-- > 0) { Face face = ReadFace(bs); currentObject.AppendFace(face.Vertex1, face.Vertex2, face.Vertex3, face.Flags); } // count bytes read bytesRead += chunk.ChunkLength - chunkSize; break; case 0x4160: skipChunk = true; break; case 0x4D4D: // file header break; default: // seek to next chunk skipChunk = true; break; } // skip chunk if (!skipChunk) { continue; } // skip bytes bs.ReadBytes((int)chunk.ChunkLength - chunkSize); bytesRead += chunk.ChunkLength - chunkSize; } bs.Close(); fs.Close(); } } }
public _3DObject CreateObject(String name) { var result = new _3DObject { Name = name }; _objects.Add(result); return result; }