Пример #1
0
        private byte[] ConvertWorld(ImportedObject obj)
        {
            var world = new NwWorld();

            {
                var texs = new List <NwTexture2D>();
                foreach (var t in obj.Textures)
                {
                    var bm = AssetConverter.ToNwTexture2D(t.SrcBitmap, t.Name);
                    texs.Add(bm);
                }

                var cubes = new List <NwCubemap>();
                cubes.Add(AssetConverter.ToNwTextureCube(new Bitmap[]
                {
                    Resources.posx2,
                    Resources.posy2,
                    Resources.posz2,
                    Resources.negx2,
                    Resources.negy2,
                    Resources.negz2,
                }, null));

                var mats = new List <NwMaterial>();
                foreach (var m in obj.Materials)
                {
                    var mat = AssetConverter.ToNwMaterial(m, m.Name, ref texs, ref cubes);
                    mats.Add(mat);
                }
                world.Texture2Ds = texs.ToArray();
                world.Cubemaps   = cubes.ToArray();
                world.Materials  = mats.ToArray();

                var meshes = new List <NwMesh>();
                foreach (var mesh in obj.Meshes)
                {
                    meshes.Add(AssetConverter.ToNwMesh(mesh));
                }
                world.Meshes = meshes.ToArray();

                var colMeshes = new List <NwColliderMesh>();
                foreach (var mesh in obj.Meshes)
                {
                    colMeshes.Add(AssetConverter.ToNwColliderMesh(mesh));
                }
                world.ColliderMeshes = colMeshes.ToArray();

                world.Environments    = new NwEnvironment[1];
                world.Environments[0] = new NwEnvironment()
                {
                    EnvMap = world.Cubemaps[0].Hash,
                };
            }
            var json = Util.SerializeJson(world);
            var comp = Util.Compress(Encoding.UTF8.GetBytes(json));

            return(comp);
        }
Пример #2
0
        public static World FromNwWorld(NwWorld world)
        {
            var w = new World();

            w.nwWorld    = world;
            w.Name       = world.Name;
            w.Texture2Ds = new Texture2D[world.Texture2Ds.Length];
            for (var i = 0; i < world.Texture2Ds.Length; i++)
            {
                w.Texture2Ds[i]           = FromNwTexture2D(world.Texture2Ds[i]);
                w.Texture2Ds[i].UseMipmap = true;
                w.Texture2Ds[i].MinFilter = OpenTK.Graphics.OpenGL4.TextureMinFilter.LinearMipmapLinear;
                w.Texture2Ds[i].MagFilter = OpenTK.Graphics.OpenGL4.TextureMagFilter.Linear;
                w.Texture2Ds[i].WrapMode  = OpenTK.Graphics.OpenGL4.TextureWrapMode.Repeat;
            }

            w.TextureCubes = new TextureCube[world.Cubemaps.Length];
            for (var i = 0; i < world.Cubemaps.Length; i++)
            {
                w.TextureCubes[i]           = FromNwTextureCube(world.Cubemaps[i]);
                w.TextureCubes[i].UseMipmap = true;
                w.TextureCubes[i].MinFilter = OpenTK.Graphics.OpenGL4.TextureMinFilter.LinearMipmapLinear;
                w.TextureCubes[i].MagFilter = OpenTK.Graphics.OpenGL4.TextureMagFilter.Linear;
                w.TextureCubes[i].WrapMode  = OpenTK.Graphics.OpenGL4.TextureWrapMode.Repeat;
            }

            w.Meshes = new Mesh[world.Meshes.Length];
            for (var i = 0; i < world.Meshes.Length; i++)
            {
                w.Meshes[i] = FromNwMesh(world.Meshes[i]);
            }

            w.ColliderMeshes = new ColliderMesh[world.ColliderMeshes.Length];
            for (var i = 0; i < world.ColliderMeshes.Length; i++)
            {
                w.ColliderMeshes[i] = FromNwColliderMesh(world.ColliderMeshes[i]);
            }

            w.Materials = new Material[world.Materials.Length];
            for (var i = 0; i < world.Materials.Length; i++)
            {
                w.Materials[i] = FromNwMaterial(world.Materials[i], ref world.Texture2Ds, ref w.Texture2Ds);
            }

            w.Environments = new Assets.Environment[world.Environments.Length];
            for (var i = 0; i < world.Environments.Length; i++)
            {
                var idx = Array.FindIndex(world.Cubemaps, tex => tex.Hash == world.Environments[i].EnvMap);
                w.Environments[i] = FromNwEnvironment(world.Environments[i], idx >= 0 ? w.TextureCubes[idx] : null);
            }

            return(w);
        }