예제 #1
0
파일: FbxImporter.cs 프로젝트: xorza/NetGL
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
            }
        }