public void CreateMaterialIdsArrayOk() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); Assert.True(resObjMesh.FaceTrianglesList.Count == resObjMesh.CreateMaterialIdsArray().Length); }
public void CreateMaterialIdsArrayOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); Assert.AreEqual(_resObjMesh.FaceTriangles.Count, _resObjMesh.CreateMaterialIdsArray().Length); }
public void CreateInstanceDxMeshWithNumberFacesOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpath); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder auxMeshBuilder = new MeshBuilder().AddDxMesh(_resObjMesh.FaceTriangles.Count); Assert.AreEqual(auxMeshBuilder.DxMesh.NumberFaces, _resObjMesh.FaceTriangles.Count); }
public void CreateMeshOnlyColor() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpathmeshcolorsolo); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder().AddDxMesh(resObjMesh.FaceTrianglesList.Count).ChargeBuffer(_tgcObjLoader.ObjMeshContainer, 0); Assert.NotNull(meshBuilder.GetInstaceDxMesh()); }
public void IndexMaterialIdsArrayOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); int[] materialIds = _resObjMesh.CreateMaterialIdsArray(); Assert.AreEqual(materialIds[15810], 0); Assert.AreEqual(materialIds[17010], 1); }
public void IndexMaterialIdsArrayOk() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); int[] materialIds = resObjMesh.CreateMaterialIdsArray(); Assert.True(materialIds[15810] == 0); Assert.True(materialIds[17010] == 1); }
public void CreateMeshOnlyColor() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmeshcolorsolo); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder().AddDxMesh(_resObjMesh.FaceTriangles.Count).ChargeBuffer(tgcObjLoader.ObjMeshContainer, 0); Assert.NotNull(meshBuilder.DxMesh); }
public void AddMultiMaterialToBuilderOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader).ChargueMaterials(); Assert.NotNull(meshBuilder.MeshMaterials); }
public void CreateInstanceDxMeshWithNumberFacesOK() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpath); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder auxMeshBuilder = new MeshBuilder() .AddDxMesh(resObjMesh.FaceTrianglesList.Count); Assert.True(auxMeshBuilder.GetInstaceDxMesh().NumberFaces == resObjMesh.FaceTrianglesList.Count); }
public void AddMaterialToBuilderOk() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpath); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(_tgcObjLoader.ObjMaterialsLoader).ChargueMaterials(); Assert.NotNull(meshBuilder.MeshMaterials); }
public void GetTextureCountOk() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(_tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials(); Assert.True(meshBuilder.GetTextureCount() == 2); }
public void FirstMaterialMeshHaveIndexZero() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(_tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials(); Assert.NotNull(meshBuilder.MeshMaterials[0]); }
public void setFile(String filePath) { this.objFileName = Path.GetFileName(filePath); this.objFileDir = Path.GetDirectoryName(filePath) + "\\"; if (!objFileName.Equals("")) { mesh = new ObjMesh(objFileDir + objFileName); mesh.Prepare(); lineDraw.InitLineDraw(); } }
/// <summary> /// Cargar indexBuffer del mesh de DirectX en forma plana /// </summary> /// <param name="objMesh">ObjMesh</param> /// /// <param name="dxMesh"></param> public void ChargeIndexBuffer(ObjMesh objMesh, Mesh dxMesh) { using (var ib = dxMesh.IndexBuffer) { var indices = new short[objMesh.FaceTriangles.Count * 3]; for (var i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } }
public void SimpleObj_OneMeshPerMaterialGroup() { CreateTestObj(); var mesh = ObjMesh.FromFile("test.obj"); var dummyScene = new Scene(); ObjConverter.AddToScene(mesh, dummyScene, null); // There should be four meshes in total (one per group, except if there are multiple // materials in the same group) Assert.Equal(4, dummyScene.Meshes.Count); }
public void EnsureRightTypeRenderIsLoadedOnlyColorBranch() { //TODO asegurar que si tiene material el tipo de render sea difuse map, o si tiene ligth map que sea difuse mas ligth map TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmeshcolorsolo); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddDxMesh(_resObjMesh.FaceTriangles.Count); Assert.AreEqual(meshBuilder.ChargueBufferStrategy.RenderType, TgcMesh.MeshRenderType.VERTEX_COLOR); }
public void GetTextureCountOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials(); Assert.AreEqual(meshBuilder.GetTextureCount(), 2); }
/// <summary> /// 从本地文件中加载一个.obj模型 /// </summary> /// <param name="modelFilePath">模型文件路径</param> /// <param name="texturePath">贴图文件路径</param> public void LoadFormFile(string modelFilePath, string texturePath) { if (!File.Exists(modelFilePath)) { Debug.Log("请确认obj模型文件是否存在!"); } if (!modelFilePath.EndsWith(".obj")) { Debug.Log("请确认这是一个obj模型文件"); } //读取内容 StreamReader reader = new StreamReader(modelFilePath, Encoding.Default); string content = reader.ReadToEnd(); reader.Close(); //解析内容 ObjMesh objInstace = new ObjMesh(); objInstace = objInstace.LoadFromObj(content); //计算网格 Mesh mesh = new Mesh(); mesh.vertices = objInstace.VertexArray; mesh.triangles = objInstace.TriangleArray; if (objInstace.UVArray.Length > 0) { mesh.uv = objInstace.UVArray; } if (objInstace.NormalArray.Length > 0) { mesh.normals = objInstace.NormalArray; } mesh.RecalculateBounds(); //生成物体 GameObject go = new GameObject(); MeshFilter meshFilter = go.AddComponent <MeshFilter>(); meshFilter.mesh = mesh; MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>(); //获取mtl文件路径 string mtlFilePath = modelFilePath.Replace(".obj", ".mtl"); //从mtl文件中加载材质 Material[] materials = ObjMaterial.Instance.LoadFormMtl(mtlFilePath, texturePath); }
public static bool Load(ObjMesh mesh, string fileName) { try { using (StreamReader streamReader = new StreamReader(fileName)) { Load(mesh, streamReader); streamReader.Close(); return(true); } } catch { return(false); } }
public void EnsureRightTypeRenderIsLoadedDiffuseMapBranch() { //TODO asegurar que si tiene material el tipo de render sea difuse map, o si tiene ligth map que sea difuse mas ligth map TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials(); Assert.AreEqual(meshBuilder.ChargueBufferStrategy.RenderType, TgcMesh.MeshRenderType.DIFFUSE_MAP); }
public static bool Load(ObjMesh mesh, string fileName) { try { using (StreamReader streamReader = new StreamReader(Platform.openFile(fileName))) { Load(mesh, streamReader); streamReader.Close(); return true; } } catch { return false; } }
public void CreateDxMeshWithVertexLimit() { // 21845 * 3 = 65535 // Int range 0 to 65535 TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmeshcolorsolo); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder().AddDxMesh(21844); Assert.NotNull(meshBuilder.DxMesh); }
public Mesh(ObjMesh model) { vertices = new Vertex[model.TriangleArray.Length]; for (var i = 0; i < model.TriangleArray.Length; i++) { var color = Math.Random.Range(0, 255) / 255f; var index = model.TriangleArray[i]; var point = model.VertexArray[index]; vertices[i] = new Vertex(Vector3.FromObj(point), Vector3.FromObj(model.NormalArray[index]), model.UVArray[index].x, model.UVArray[index].y, new Vector3(color, color, color)); } }
private MeshData getContentMesh(ItemStack contentStack, ITesselatorAPI tesselator) { CurrentModel = EnumKilnModel.Normal; if (contentStack == null) { return(null); } if (contentStack.Collectible is IInKilnMeshSupplier) { EnumKilnModel model = EnumKilnModel.Normal; MeshData mesh = (contentStack.Collectible as IInKilnMeshSupplier).GetMeshWhenInKiln(contentStack, Api.World, Pos, ref model); this.CurrentModel = model; if (mesh != null) { return(mesh); } } if (contentStack.Collectible is IInKilnRendererSupplier) { EnumKilnModel model = (contentStack.Collectible as IInKilnRendererSupplier).GetDesiredKilnModel(contentStack, this, contentStack == outputStack); this.CurrentModel = model; return(null); } InKilnProps renderProps = GetRenderProps(contentStack); if (renderProps != null) { this.CurrentModel = renderProps.UseKilnModel; if (contentStack.Class != EnumItemClass.Item) { MeshData ObjMesh; tesselator.TesselateBlock(contentStack.Block, out ObjMesh); ObjMesh.ModelTransform(renderProps.Transform); return(ObjMesh); } return(null); } return(null); }
public void CheckIndexBufferIsChargedOk() { //TODO verificar que el idexbuffer se cargo . TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(_tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials() .AddDxMesh(resObjMesh.FaceTrianglesList.Count) .ChargeBuffer(_tgcObjLoader.ObjMeshContainer, 0); Assert.True(meshBuilder.GetInstaceDxMesh().IndexBuffer.SizeInBytes > 0); }
public void BuildTgcMeshWithEnableTrueOk() { TgcObjLoader _tgcObjLoader = new TgcObjLoader(); _tgcObjLoader.LoadObjFromFile(_fullobjpath); resObjMesh = _tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); TgcMesh tgcMesh = new MeshBuilder() .AddMaterials(_tgcObjLoader.ObjMaterialsLoader) .AddDxMesh(resObjMesh.FaceTrianglesList.Count) .ChargeBuffer(_tgcObjLoader.ObjMeshContainer, 0) .SetEnable(true) .Build(resObjMesh); Assert.True(tgcMesh.Enabled); }
public void CheckIndexBufferIsChargedOk() { //TODO verificar que el idexbuffer se cargo . TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials() .AddDxMesh(_resObjMesh.FaceTriangles.Count) .ChargeBuffer(tgcObjLoader.ObjMeshContainer, 0); Assert.Greater(meshBuilder.DxMesh.IndexBuffer.SizeInBytes, 0); }
public void BuildTgcMeshWithAutotransformTrueOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpath); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); TgcMesh tgcMesh = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .AddDxMesh(_resObjMesh.FaceTriangles.Count) .ChargeBuffer(tgcObjLoader.ObjMeshContainer, 0) .AddAutotransform(true) .Build(_resObjMesh); Assert.IsTrue(tgcMesh.AutoTransform); }
public void CreateMeshColorAndDifusseMap() { //TODO el test de cuando el mesh es color y difuse TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpathmultimaterial); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); MeshBuilder meshBuilder = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials() .AddDxMesh(_resObjMesh.FaceTriangles.Count) .ChargeBuffer(tgcObjLoader.ObjMeshContainer, 0); Assert.NotNull(meshBuilder.DxMesh); }
public void BuildTgcMeshWithBoundingBoxOk() //TODO el boundingbox no deberia estar acoplado al mesh { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpath); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); TgcMesh tgcMesh = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .AddDxMesh(_resObjMesh.FaceTriangles.Count) .ChargeBuffer(tgcObjLoader.ObjMeshContainer, 0) .SetEnable(true) .AddAutotransform(true) .SetHasBoundingBox(false) .Build(_resObjMesh); Assert.NotNull(tgcMesh.BoundingBox); }
public void TgcMeshBuildWithTextureOk() { TGCObjLoader tgcObjLoader = new TGCObjLoader(); tgcObjLoader.LoadObjFromFile(_fullobjpath); _resObjMesh = tgcObjLoader.ObjMeshContainer.ListObjMesh.First(); TgcMesh tgcMesh = new MeshBuilder() .AddMaterials(tgcObjLoader.ObjMaterialsLoader) .ChargueMaterials() .AddDxMesh(_resObjMesh.FaceTriangles.Count) .ChargeBuffer(tgcObjLoader.ObjMeshContainer, 0) .AddAutotransform(true) .SetEnable(true) .SetHasBoundingBox(true) .Build(_resObjMesh); Assert.Greater(tgcMesh.Materials.Length, 0); }
public static bool Load2(ObjMesh mesh, StreamReader streamReader, ObjMesh prevmesh) { if(prevmesh !=null) { //mesh.Vertices = prevmesh.Vertices; } try { //streamReader.BaseStream.Position = 0; Load(mesh, streamReader); streamReader.Close(); #if DEBUG Console.WriteLine("Loaded "+mesh.Triangles.Length.ToString()+" triangles and"+mesh.Quads.Length.ToString()+" quadrilaterals parsed, with a grand total of "+mesh.Vertices.Length.ToString()+" vertices."); #endif return true; } catch(Exception er) { Console.WriteLine(er);return false; } }
/// <summary> /// 从本地文件中加载一个.obj模型 /// </summary> /// <param name="modelFilePath">模型文件路径</param> /// <param name="texturePath">贴图文件路径</param> public void LoadFormFile(string modelFilePath, string texturePath) { if(!File.Exists(modelFilePath)) Debug.Log("请确认obj模型文件是否存在!"); if(!modelFilePath.EndsWith(".obj")) Debug.Log("请确认这是一个obj模型文件"); //读取内容 StreamReader reader = new StreamReader(modelFilePath,Encoding.Default); string content = reader.ReadToEnd(); reader.Close(); //解析内容 ObjMesh objInstace = new ObjMesh(); objInstace = objInstace.LoadFromObj(content); //计算网格 Mesh mesh = new Mesh(); mesh.vertices = objInstace.VertexArray; mesh.triangles = objInstace.TriangleArray; if(objInstace.UVArray.Length > 0) mesh.uv = objInstace.UVArray; if(objInstace.NormalArray.Length>0) mesh.normals = objInstace.NormalArray; mesh.RecalculateBounds(); //生成物体 GameObject go = new GameObject(); MeshFilter meshFilter = go.AddComponent<MeshFilter>(); meshFilter.mesh = mesh; MeshRenderer meshRenderer = go.AddComponent<MeshRenderer>(); //获取mtl文件路径 string mtlFilePath = modelFilePath.Replace(".obj",".mtl"); //从mtl文件中加载材质 Material[] materials = ObjMaterial.Instance.LoadFormMtl(mtlFilePath, texturePath); }
static void Load(ObjMesh mesh, TextReader textReader) { vertices = new List<Vector3>(); normals = new List<Vector3>(); texCoords = new List<Vector2>(); objVerticesIndexDictionary = new Dictionary<ObjMesh.ObjVertex, int>(); objVertices = new List<ObjMesh.ObjVertex>(); objTriangles = new List<ObjMesh.ObjTriangle>(); objQuads = new List<ObjMesh.ObjQuad>(); string line; while ((line = textReader.ReadLine()) != null) { line = line.Trim(splitCharacters); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "p": // Point break; case "v": // Vertex float x = float.Parse(parameters[1]); float y = float.Parse(parameters[2]); float z = float.Parse(parameters[3]); vertices.Add(new Vector3(x, y, z)); break; case "vt": // TexCoord float u = float.Parse(parameters[1]); float v = float.Parse(parameters[2]); texCoords.Add(new Vector2(u, v)); break; case "vn": // Normal float nx = float.Parse(parameters[1]); float ny = float.Parse(parameters[2]); float nz = float.Parse(parameters[3]); normals.Add(new Vector3(nx, ny, nz)); break; case "f": switch (parameters.Length) { case 4: ObjMesh.ObjTriangle objTriangle = new ObjMesh.ObjTriangle(); objTriangle.Index0 = ParseFaceParameter(parameters[1]); objTriangle.Index1 = ParseFaceParameter(parameters[2]); objTriangle.Index2 = ParseFaceParameter(parameters[3]); objTriangles.Add(objTriangle); break; case 5: ObjMesh.ObjQuad objQuad = new ObjMesh.ObjQuad(); objQuad.Index0 = ParseFaceParameter(parameters[1]); objQuad.Index1 = ParseFaceParameter(parameters[2]); objQuad.Index2 = ParseFaceParameter(parameters[3]); objQuad.Index3 = ParseFaceParameter(parameters[4]); objQuads.Add(objQuad); break; } break; } } mesh.Vertices = objVertices.ToArray(); mesh.Triangles = objTriangles.ToArray(); mesh.Quads = objQuads.ToArray(); objVerticesIndexDictionary = null; vertices = null; normals = null; texCoords = null; objVertices = null; objTriangles = null; objQuads = null; }
static void Load(ObjMesh mesh, StreamReader textReader) { //try { //vertices = null; //objVertices = null; if(vertices == null) { vertices = new List<Vector3>(); } if(normals == null) { normals = new List<Vector3>(); } if(texCoords == null) { texCoords = new List<Vector2>(); } if(objVerticesIndexDictionary == null) { objVerticesIndexDictionary = new Dictionary<ObjMesh.ObjVertex, int>(); } if(objVertices == null) { objVertices = new List<ObjMesh.ObjVertex>(); } objTriangles = new List<ObjMesh.ObjTriangle>(); objQuads = new List<ObjMesh.ObjQuad>(); mesh.vertexPositionOffset = vertices.Count; string line; while ((line = textReader.ReadLine()) != null) { if(line.Length<2) { break; } line = line.Trim(splitCharacters); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "usemtl": //Material specification try { mesh.Material = materials[parameters[1]]; }catch(KeyNotFoundException) { Console.WriteLine("WARNING: Texture parse failure: "+parameters[1]); } break; case "p": // Point break; case "v": // Vertex float x = parsefloat(parameters[1]); float y = parsefloat(parameters[2]); float z = parsefloat(parameters[3]); vertices.Add(new Vector3(x, y, z)); break; case "vt": // TexCoord float u = parsefloat(parameters[1]); float v = parsefloat(parameters[2]); texCoords.Add(new Vector2(u, v)); break; case "vn": // Normal float nx = parsefloat(parameters[1]); float ny = parsefloat(parameters[2]); float nz = parsefloat(parameters[3]); normals.Add(new Vector3(nx, ny, nz)); break; case "f": switch (parameters.Length) { case 4: ObjMesh.ObjTriangle objTriangle = new ObjMesh.ObjTriangle(); objTriangle.Index0 = ParseFaceParameter(parameters[1]); objTriangle.Index1 = ParseFaceParameter(parameters[2]); objTriangle.Index2 = ParseFaceParameter(parameters[3]); objTriangles.Add(objTriangle); break; case 5: ObjMesh.ObjQuad objQuad = new ObjMesh.ObjQuad(); objQuad.Index0 = ParseFaceParameter(parameters[1]); objQuad.Index1 = ParseFaceParameter(parameters[2]); objQuad.Index2 = ParseFaceParameter(parameters[3]); objQuad.Index3 = ParseFaceParameter(parameters[4]); objQuads.Add(objQuad); break; } break; } } //}catch(Exception er) { // Console.WriteLine(er); // Console.WriteLine("Successfully recovered. Bounds/Collision checking may fail though"); //} mesh.Vertices = objVertices.ToArray(); mesh.Triangles = objTriangles.ToArray(); mesh.Quads = objQuads.ToArray(); textReader.BaseStream.Close(); }
public static ObjMesh deserialize(BinaryReader mreader) { ObjMesh mymesh = new ObjMesh(); bool hasimage = mreader.ReadBoolean(); if(hasimage) { int len = (int)mreader.ReadInt64(); byte[] image = mreader.ReadBytes(len); MemoryStream mstream = new MemoryStream(); mstream.Write(image,0,image.Length); mstream.Position = 0; try { mymesh.Material = new Bitmap(mstream); } catch (Exception) { } } mymesh.name = mreader.ReadString(); mymesh.quads = new ObjMesh.ObjQuad[mreader.ReadInt32()]; for(int i = 0;i<mymesh.quads.Length;i++) { ObjQuad currentQuad = new ObjQuad(); currentQuad.Index0 = mreader.ReadInt32(); currentQuad.Index1 = mreader.ReadInt32(); currentQuad.Index2 = mreader.ReadInt32(); currentQuad.Index3 = mreader.ReadInt32(); mymesh.quads[i] = currentQuad; } mymesh.triangles = new ObjMesh.ObjTriangle[mreader.ReadInt32()]; for(int i = 0;i<mymesh.triangles.Length;i++) { ObjTriangle currentQuad = new ObjTriangle(); currentQuad.Index0 = mreader.ReadInt32(); currentQuad.Index1 = mreader.ReadInt32(); currentQuad.Index2 = mreader.ReadInt32(); mymesh.triangles[i] = currentQuad; } mymesh.vertices = new ObjMesh.ObjVertex[mreader.ReadInt32()]; for(int i = 0;i<mymesh.vertices.Length;i++) { ObjVertex mtex = new ObjVertex(); mtex.Normal.X = mreader.ReadSingle(); mtex.Normal.Y = mreader.ReadSingle(); mtex.Normal.Z = mreader.ReadSingle(); mtex.TexCoord.X = mreader.ReadSingle(); mtex.TexCoord.Y = mreader.ReadSingle(); mtex.Vertex.X = mreader.ReadSingle(); mtex.Vertex.Y = mreader.ReadSingle(); mtex.Vertex.Z = mreader.ReadSingle(); mymesh.vertices[i] = mtex; } return mymesh; }
public ObjMesh(System.IO.StreamReader file, ObjMesh prevmesh) { ObjMeshLoader.Load2(this,file,prevmesh); }