private Scene.Node ImportNode(Scene.Scene scene, FbxConverterTypes.Node node) { var so = new Scene.Node(scene, node.name); so.Transform.LocalPosition = ToVector3(node.position); so.Transform.LocalRotation = Quaternion.CreateFromYawPitchRoll(ToVector3(node.rotation)); so.Transform.LocalScale = ToVector3(node.scale); foreach (var child in node.nodes) { var subnode = ImportNode(scene, child); subnode.Transform.Parent = so.Transform; } if (node.mesh != null) { var renderable = so.AddComponent <MeshRenderable>(); var mesh = new Core.Types.Mesh(); mesh.Vertices = node.mesh.vertices.Select(_ => new Vector3(_.x, _.y, _.z)).ToArray(); mesh.Normals = node.mesh.normals.Select(_ => new Vector3(_.x, _.y, _.z)).ToArray(); mesh.Tangents = node.mesh.tangents.Select(_ => new Vector3(_.x, _.y, _.z)).ToArray(); mesh.TexCoords = node.mesh.uvs.Select(_ => new Vector2(_.x, _.y)).ToArray(); renderable.Mesh = mesh; } return(so); }
private void PrepareRender() { // Add to scene after building a mesh vertices = new List <Vertex>(); indices = new List <int>(); for (int i = 0; i < navMesh.getMaxTiles(); ++i) { Detour.dtMeshTile tile = navMesh.getTile(i); if (tile.header != null) { AddMeshTile(tile); } } var geom = new Mesh(); geom.Load(vertices, indices, indices.Count / 3); var mat = new MaterialDiffuse() { ShaderProgram = "diffuse", Tex = "" }; node = new Scene.Node() { Name = "NaviMesh", Material = mat, Mesh = geom }; scene.Add(node); }
private void CreateShapeNodes() { ShaderManager.Instance.Load( new ShaderManager.ShaderConf() { Name = "diffuse", VsPath = $"{HOME}/Assets/Shader/diffuse.vert", FsPath = $"{HOME}/Assets/Shader/diffuse.frag" }); var mat = new MaterialDiffuse() { ShaderProgram = "diffuse", Tex = $"{HOME}/Assets/Tex/penguine.jpg" }; var meshCube = Shape.CreateCube(new Vector4(1, 0, 0, 1)); var meshPlane = Shape.CreatePlane(); var meshSphere = Shape.CreateSphere(new Vector4(0, 1, 1, 1), 25, 25); // cube { var sn = new Scene.Node() { Name = "sampleCube", Material = mat, Mesh = meshCube }; scene.Add(sn); sn.Transform.Position = new Vector3(0, 0, 2.8f); sn.Transform.Scale = new Vector3(100, 100, 100); sn.Transform.Update(); } // plane { var sn = new Scene.Node() { Name = "samplePlane", Material = mat, Mesh = meshPlane }; scene.Add(sn); sn.Transform.Position = new Vector3(0, 0, 32.1f); sn.Transform.Scale = new Vector3(300, 300, 300); sn.Transform.Update(); } // sphere { var sn = new Scene.Node() { Name = "sampleShpere", Material = mat, Mesh = meshSphere }; scene.Add(sn); sn.Transform.Position = new Vector3(500, 0, 0); sn.Transform.Scale = new Vector3(300, 300, 300); sn.Transform.Update(); } }