Ejemplo n.º 1
0
    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();
    }
Ejemplo n.º 2
0
            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();
    }
Ejemplo n.º 4
0
        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();
                }
            }
        }
Ejemplo n.º 5
0
 public _3DObject CreateObject(String name)
 {
     var result = new _3DObject { Name = name };
     _objects.Add(result);
     return result;
 }