예제 #1
0
        /// <summary>
        /// Construct a new mesh from an ASE GeomObject
        /// </summary>
        /// <param name="obj">ASE GeomObject to read from</param>
        public Mesh(ASE.GeomObject obj)
        {
            children = new List<Node>();
            name = obj.name;
            color = Colors.Random();
            polygon = new Polygon();
            polygon.Material = null;
            //Vertices
            foreach (ASE.Vector3D v in obj.mesh.verticies)
                polygon.Vertices.Add(new Vertex(v.x, v.y, v.z));
            //Normals
            foreach (ASE.Vector3D v in obj.mesh.vertexNormals)
                polygon.Normals.Add(new Vertex(v.x, v.y, v.z));
            //Texture coordinates
            foreach (ASE.Vector3D uv in obj.mesh.textureCoordinates)
                polygon.UVs.Add(new UV(uv.x, uv.y));
            //Faces
            foreach (ASE.Face face in obj.mesh.faces)
            {
                Face f = new Face();
                foreach (int i in face.vertex)
                    f.Indices.Add(new Index(i, -1, i));
                f.Material = new Material();
                polygon.Faces.Add(f);
            }

            setColor();

            bone = null;
        }
예제 #2
0
        /// <summary>
        /// Construct a new Bone from an ASE GeomObject
        /// </summary>
        /// <param name="vertex">ASE GeomObject to read from</param>
        public Bone(ASE.GeomObject obj)
        {
            children = new List <Node>();
            name     = obj.name;
            color    = Colors.Random();
            ASE.Vector3D v = obj.mesh.verticies[0];
            position  = new Vertex(v.x, v.y, v.z);
            translate = new Vertex();
            meshes    = new List <Mesh>();
            ani       = new List <Keyframe>();

            //Create visual representation
            sphere = makeSphere();
        }
예제 #3
0
        private bool loadGeomObject(Scene scene)
        {
            bool success = true;
            int nextToken = 0;
            bool haveNext = false;

            GeomObject obj = new GeomObject();

            readBlockStart();

            while (haveNext || (nextToken = scanner.yylex()) != (int)TokenType.BlockEnd)
            {
                if (nextToken != (int)TokenType.Node)
                {
                    Console.Error.WriteLine("Expected a node" + " - " + scanner.yytext);
                }
                haveNext = false;

                string str = scanner.yytext;
                if (str.Equals("*NODE_NAME"))
                {
                    if (!readString(out obj.name)) success = false;
                }
                else if (str.Equals("*NODE_TM"))
                {
                    if (!loadTransform(out obj.transform)) success = false;
                }
                else if (str.Equals("*MESH"))
                {
                    if (!loadMesh(out obj.mesh)) success = false;
                }
                else if (str.Equals("*PROP_MOTIONBLUR"))
                {
                    if (!readBool(out obj.motionBlur)) success = false;
                }
                else if (str.Equals("*PROP_CASTSHADOW"))
                {
                    if (!readBool(out obj.castShadow)) success = false;
                }
                else if (str.Equals("*PROP_RECVSHADOW"))
                {
                    if (!readBool(out obj.recieveShadow)) success = false;
                }
                else if (str.Equals("*TM_ANIMATION"))
                {
                    skip();
                }
                else if (str.Equals("*MATERIAL_REF"))
                {
                    if (!readInt(out obj.material)) success = false;
                }
                else
                {
                    if ((nextToken = skip()) == (int)TokenType.BlockEnd || nextToken < 1) break;
                    haveNext = true;
                }
            }
            scene.objs.Add(obj);
            return success;
        }