protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.VSync = VSyncMode.Adaptive; scene = new Scene.Scene(new TargetCamera(new Vector3(5), 2*Vector3.UnitY, (float)MathHelper.DegreesToRadians(45.0), (float)this.Width / (float)this.Height, .1f, 100.0f)); var buffer = new EntityBuffer(); float side = 0.4f; buffer.SetVertices( new Vertex[]{ new Vertex(new Position3(0, (float)(side*Math.Sqrt(2)), 0), new Position2(), new Position3()), new Vertex(new Position3(side, -side, 0), new Position2(), new Position3()), new Vertex(new Position3(-side, -side, 0), new Position2(), new Position3()) }, new ushort[]{ 1,0,2 }); Mesh mesh = new Mesh(buffer); triangle = new SceneEntity(mesh, new Transform(-0.5f * Vector3.One, Vector3.Zero, Vector3.One), new ColoredMaterial(Color.Green)); scene.AddEntity(triangle); var resource = MeshResource.Load("Resources/Models/generic_male_01/generic_male_01.obj"); var entities = resource.ToSceneEntities(); foreach (var entity in entities) { scene.AddEntity(entity); } }
public static MeshResource Load(string filePath) { AssimpImporter importer = new AssimpImporter(); importer.SetConfig(new NormalizeVertexComponentsConfig(true)); importer.SetConfig(new MultithreadingConfig(-1)); LogStream logStream = new LogStream(delegate(String msg, String userdata) { Log.Message(msg); Log.Message(userdata); }); importer.AttachLogStream(logStream); Assimp.Scene model = importer.ImportFile(filePath, PostProcessPreset.TargetRealTimeMaximumQuality | PostProcessSteps.FlipUVs); MeshResource meshResource = new MeshResource(); meshResource.Materials = model.Materials.Select(m => (BaseMaterial)new TexturedMaterial(m, Directory.GetParent(filePath).FullName)).ToList(); foreach (var modelMesh in model.Meshes) { EntityBuffer buffer = new EntityBuffer(); List<ushort> indices = new List<ushort>(); List<Vertex> vertices = new List<Vertex>(); Vector3D[] texCoords = modelMesh.HasTextureCoords(0) ? modelMesh.GetTextureCoords(0) : null; foreach (var face in modelMesh.Faces) { for (int i = 0; i < face.IndexCount; i++) { indices.Add((ushort)face.Indices[i]); } } var material = model.Materials[modelMesh.MaterialIndex]; TexturedMaterial texMat = new TexturedMaterial(material, Directory.GetParent(filePath).FullName); for (int i = 0; i < modelMesh.VertexCount; i++) { var vertex = modelMesh.Vertices[i]; var texCoord = texCoords[i]; var normal = modelMesh.Normals[i]; vertices.Add(new Vertex(new Position3(vertex.X, vertex.Y, vertex.Z), new Position2(texCoord.X, texCoord.Y), new Position3(normal.X, normal.Y, normal.Z))); } buffer.SetVertices(vertices, indices); Mesh mesh = new Mesh(buffer); meshResource.Meshes.Add(modelMesh.MaterialIndex, mesh); } importer.Dispose(); return meshResource; }