Exemplo n.º 1
0
        private void AddMesh(Model3DGroup group, render_model.ModelSection part, render_model.ModelSection.Submesh submesh, bool force)
        {
            try
            {
                var geom = new MeshGeometry3D();

                var iList = ModelFunctions.GetTriangleList(part.Indices, submesh.FaceIndex, submesh.FaceCount, mode.IndexInfoList[part.FacesIndex].FaceFormat);

                int min = iList.Min();
                int max = iList.Max();

                for (int i = 0; i < iList.Count; i++)
                {
                    iList[i] -= min;
                }

                var vArray = new Vertex[(max - min) + 1];
                Array.Copy(part.Vertices.ToArray(), min, vArray, 0, (max - min) + 1);

                foreach (var vertex in vArray)
                {
                    if (vertex == null)
                    {
                        continue;
                    }
                    VertexValue pos, tex, norm;
                    vertex.TryGetValue("position", 0, out pos);
                    vertex.TryGetValue("texcoords", 0, out tex);

                    geom.Positions.Add(new Point3D(pos.Data.x, pos.Data.y, pos.Data.z));
                    geom.TextureCoordinates.Add(new System.Windows.Point(tex.Data.x, 1f - tex.Data.y));
                    if (vertex.TryGetValue("normal", 0, out norm))
                    {
                        geom.Normals.Add(new Vector3D(norm.Data.x, norm.Data.y, norm.Data.z));
                    }
                }

                foreach (var index in iList)
                {
                    geom.TriangleIndices.Add(index);
                }

                GeometryModel3D modeld = new GeometryModel3D(geom, shaders[submesh.ShaderIndex])
                {
                    BackMaterial = shaders[submesh.ShaderIndex]
                };

                group.Children.Add(modeld);
            }
            catch (Exception ex) { if (!force)
                                   {
                                       throw ex;
                                   }
            }
        }
Exemplo n.º 2
0
        private void AddCopy(Model3DGroup newGroup, Model3DGroup oldGroup, render_model.ModelSection part, int submeshIndex, bool force)
        {
            try
            {
                GeometryModel3D modeld = new GeometryModel3D();
                modeld.Geometry = ((GeometryModel3D)oldGroup.Children[submeshIndex]).Geometry;
                modeld.Material = modeld.BackMaterial = shaders[part.Submeshes[submeshIndex].ShaderIndex];

                newGroup.Children.Add(modeld);
            }
            catch (Exception ex) { if (!force)
                                   {
                                       throw ex;
                                   }
            }
        }