public Task FromModelAsync(ObjectInputSettings ObjSettings, Object3D model, TextureFormatSettings texFormatSettings = null) { var t = new Task(() => FromModel(ObjSettings, model, texFormatSettings)); t.Start(); return(t); }
public Task FromObject3DAsync(ObjectInputSettings ObjSettings, Object3D model, CollisionSettings colSettings = null) { var t = new Task(() => FromObject3D(ObjSettings, model, colSettings)); t.Start(); return(t); }
/// <summary> /// Creates a Fast3D Model from a Obj File /// </summary> public void FromModel(ObjectInputSettings ObjSettings, Object3D model, TextureFormatSettings texFormatSettings = null) { // Setup Settings var conSettings = new Conversion.Fast3DWriting.Fast3DWriter.ConvertSettings() { CenterModel = ObjSettings.CenterModel, Scale = ObjSettings.Scaling, ResizeTextures = ObjSettings.ResizeTextures, ReduceVertLevel = (Conversion.Fast3DWriting.Fast3DWriter.ReduceVericesLevel)ObjSettings.ReduceDupVertLevel, SegmentedAddress = (uint?)0xE000000, ForceDisplaylist = ObjSettings.ForceDisplaylist, Fog = ObjSettings.Fog, OptimizeTransparencyChecks = ObjSettings.OptimizeTransparencyChecks, TextureFormatSettings = texFormatSettings }; model.Shading = ObjSettings.Shading; // Convert Model var con = new Conversion.Fast3DWriting.Fast3DWriter(); ConvertResult = con.ConvertModel(this, conSettings, model); // Fit to align base.SetLength(General.HexRoundUp1(base.Length)); // Copy Geopointer etc. DLPointers = ConvertResult.PtrGeometry.ToArray(); Fast3DBankStart = 0xE000000; }
public void FromObject3D(ObjectInputSettings ObjSettings, Object3D model, CollisionSettings colSettings = null) { var dicMatNames = new Dictionary <Material, string>(); // Clear Lists Mesh.Vertices.Clear(); Mesh.Triangles.Clear(); // Create MatNames foreach (KeyValuePair <string, Material> kvp in model.Materials) { dicMatNames.Add(kvp.Value, kvp.Key); } // Add Faces var dicVertices = new Dictionary <Pilz.S3DFileParser.Vertex, Vertex>(); foreach (Mesh m in model.Meshes) { foreach (Face f in m.Faces.OrderBy(n => n.Material)) { var cs = colSettings.GetEntry(dicMatNames[f.Material]); if (!cs.IsNonSolid) { var t = new Triangle(); t.CollisionType = cs.CollisionType; t.ColParams[0] = cs.CollisionParam1; t.ColParams[0] = cs.CollisionParam2; for (int i = 0, loopTo = Math.Min(f.Points.Count - 1, 2); i <= loopTo; i++) { Vertex v; var curVert = f.Points[i].Vertex; if (dicVertices.ContainsKey(curVert)) { v = dicVertices[curVert]; } else { v = new Vertex(); v.X = General.KeepInInt16Range(General.Round(curVert.X * ObjSettings.Scaling)); v.Y = General.KeepInInt16Range(General.Round(curVert.Y * ObjSettings.Scaling)); v.Z = General.KeepInInt16Range(General.Round(curVert.Z * ObjSettings.Scaling)); Mesh.Vertices.Add(v); dicVertices.Add(curVert, v); } t.Vertices[i] = v; } Mesh.Triangles.Add(t); } } } }