public static Entity3D Quad(int w, int h) { Entity3D r = new Entity3D(); Mesh3D mesh = new Mesh3D(6, 4); Vector3 v1 = new Vector3(-w, -h, 0); Vector3 v2 = new Vector3(w, -h, 0); Vector3 v3 = new Vector3(w, h, 0); Vector3 v4 = new Vector3(-w, h, 0); Vector3 z = new Vector3(0, 0, 0); mesh.SetVertex(0, v1, z, z, z, new Vector2(0, 0)); mesh.SetVertex(1, v2, z, z, z, new Vector2(1, 0)); mesh.SetVertex(2, v3, z, z, z, new Vector2(1, 1)); mesh.SetVertex(3, v4, z, z, z, new Vector2(0, 1)); mesh.SetTri(0, 0, 1, 2); mesh.SetTri(1, 2, 3, 0); /* * mesh.SetIndex(0, 0); * mesh.SetIndex(1, 1); * mesh.SetIndex(2, 2); * mesh.SetIndex(3, 2); * mesh.SetIndex(4, 3); * mesh.SetIndex(5, 0); */ mesh.Final( ); r.AddMesh(mesh); return(r); }
private void ProcessNode(Entity3D root, Assimp.Node s, List <Mesh3D> ml) { Entity3D r1 = new Entity3D(); root.Sub.Add(r1); r1.Top = root; r1.Name = s.Name; if (s.Name.ToLower().Contains("root")) { r1.Name = r1.Name + "*"; r1.BreakTop = true; } //r1.LocalTurn = new OpenTK.Matrix4(s.Transform.A1, s.Transform.A2, s.Transform.A3, s.Transform.A4, s.Transform.B1, s.Transform.B2, s.Transform.B3, s.Transform.B4, s.Transform.C1, s.Transform.C2, s.Transform.C3, s.Transform.C4, s.Transform.D1, s.Transform.D2, s.Transform.D3, s.Transform.D4); r1.LocalTurn = new OpenTK.Matrix4(s.Transform.A1, s.Transform.B1, s.Transform.C1, s.Transform.D1, s.Transform.A2, s.Transform.B2, s.Transform.C2, s.Transform.D2, s.Transform.A3, s.Transform.B3, s.Transform.C3, s.Transform.D3, s.Transform.A4, s.Transform.B4, s.Transform.C4, s.Transform.D4); OpenTK.Matrix4 lt = r1.LocalTurn; r1.LocalTurn = lt.ClearTranslation(); r1.LocalTurn = r1.LocalTurn.ClearScale(); r1.LocalPos = lt.ExtractTranslation(); r1.LocalScale = lt.ExtractScale(); // r1.LocalPos = new OpenTK.Vector3(r1.LocalPos.X + 100, 0, 0); for (int i = 0; i < s.MeshCount; i++) { r1.AddMesh(ml[s.MeshIndices[i]]); } if (s.HasChildren) { foreach (Node pn in s.Children) { ProcessNode(r1, pn, ml); } } }