public ModelRenderer(IGameWindow control, File3di file) { _viewport = control; _file = file; _viewport.MakeCurrent(); OnLoad(EventArgs.Empty); _viewport.UpdateFrame += OnUpdateFrame; _viewport.RenderFrame += OnRenderFrame; }
private static IEnumerable<GlMesh> BuildMeshes(File3di.ModelLod lod) { var meshes = new List<GlMesh>(); for (var iBones = 0; iBones < lod.SubObjects.Count; iBones++) { var subObj = lod.SubObjects[iBones]; //sub.BoneDiffOffset = sub.BoneDiffOffset - SubObjects[sub.parentBone].BoneDiffOffset; var foff = lod.FaceOffset(iBones); var voff = lod.VecOffset(iBones); for (var i = 0; i < subObj.nFaces; i++) { var face = lod.Faces[i + foff]; var mesh = meshes.Find(g => g.MatIndex == face.MaterialIndex); if (mesh == null) { mesh = new GlMesh {MatIndex = face.MaterialIndex}; meshes.Add(mesh); } var vec4 = lod.Vertices[face.Vertex1 + voff]; mesh.CoordVerts.Add(vec4 - subObj.BoneOffset); vec4 = lod.Vertices[face.Vertex2 + voff]; mesh.CoordVerts.Add(vec4 - subObj.BoneOffset); vec4 = lod.Vertices[face.Vertex3 + voff]; mesh.CoordVerts.Add(vec4 - subObj.BoneOffset); mesh.CoordTex.Add(new Vector2(face.tu1/65536.0f, face.tv1/65536.0f)); mesh.CoordTex.Add(new Vector2(face.tu2/65536.0f, face.tv2/65536.0f)); mesh.CoordTex.Add(new Vector2(face.tu3/65536.0f, face.tv3/65536.0f)); vec4 = lod.Normals[face.Normal1]; mesh.CoordNorms.Add(vec4); vec4 = lod.Normals[face.Normal2]; mesh.CoordNorms.Add(vec4); vec4 = lod.Normals[face.Normal3]; mesh.CoordNorms.Add(vec4); } } return meshes; }