/// <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; }
/// <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(); }
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; }