public Task FromModelAsync(ObjectInputSettings ObjSettings, Object3D model, TextureFormatSettings texFormatSettings = null)
        {
            var t = new Task(() => FromModel(ObjSettings, model, texFormatSettings));

            t.Start();
            return(t);
        }
Beispiel #2
0
        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;
        }
Beispiel #4
0
        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);
                    }
                }
            }
        }