diff --git a/LandblockExtraction/AtlasMaker/TerrainAtlasManager.cs b/LandblockExtraction/AtlasMaker/TerrainAtlasManager.cs index d62bead..7fc36ca 100644 --- a/LandblockExtraction/AtlasMaker/TerrainAtlasManager.cs +++ b/LandblockExtraction/AtlasMaker/TerrainAtlasManager.cs @@ -8,20 +8,41 @@ namespace LandblockExtraction.AtlasMaker; public class TerrainAtlasManager { private PortalEngine portalEngine; private Dictionary mapTerrain; + private TexturesImage texturesImage; public Dictionary textureCoord; public Dictionary terrainTexture; public Dictionary terrains; + public Dictionary texturesIndex; public TerrainAtlasManager(PortalEngine portalEngine) { this.portalEngine = portalEngine; mapTerrain = new(); textureCoord = new Dictionary(); terrainTexture = new Dictionary(); terrains = new Dictionary(); + texturesImage = new TexturesImage(portalEngine); + texturesIndex = new Dictionary(); + GenerateDictionaryTexture(); + foreach(var img in texturesIndex) { + var i = texturesImage.GetImage(img.Key); + i.Write($"{img.Value}.jpg"); + } InitialiseTerrainDic(); GenerateTerrain(); } + private void GenerateDictionaryTexture() { + int index = 0; + foreach (var surfaces in portalEngine.cSurfaceDesc.surfaces) { + foreach (var surface in surfaces.terrainMaterials) { + var did = surface.baseMaterials.First().materialDid; + if (!texturesIndex.ContainsKey(did)) { + texturesIndex.Add(did, index); + index++; + } + } + } + } public void ExtractTexture() { using (var atlasBuilder = new AtlasBuilder(portalEngine)) { foreach (var terrain in portalEngine.cTerrainDesc.terrains) { diff --git a/LandblockExtraction/AtlasMaker/TexturesImage.cs b/LandblockExtraction/AtlasMaker/TexturesImage.cs index 18ca924..fc7c6a5 100644 --- a/LandblockExtraction/AtlasMaker/TexturesImage.cs +++ b/LandblockExtraction/AtlasMaker/TexturesImage.cs @@ -6,10 +6,12 @@ using LandblockExtraction.Tools; namespace LandblockExtraction.AtlasMaker; public class TexturesImage { private PortalEngine portalEngine; + private TextureEngine textureEngine; //private TextureEngine textureEngine; public TexturesImage(PortalEngine portalEngine) { this.portalEngine = portalEngine; + textureEngine = new TextureEngine(); //this.textureEngine = new(); } @@ -40,7 +42,18 @@ public class TexturesImage { if (!portalEngine.datReader.contains(img)) continue; using (var data = portalEngine.datReader.getFileReader(img)) { var image = new RenderSurface(data); - if (image.width != 64) continue; + if (image.width != 16) continue; + var dataImg = DDSHeader.Generate(image); + using (MagickImage realImg = new MagickImage(dataImg)) { + magickImage = new(realImg); + } + return magickImage; + } + } + foreach (var img in texture.levelSurfaceDids) { + if (!portalEngine.datReader.contains(img)) continue; + using (var data = portalEngine.datReader.getFileReader(img)) { + var image = new RenderSurface(data); var dataImg = DDSHeader.Generate(image); using (MagickImage realImg = new MagickImage(dataImg)) { magickImage = new(realImg); diff --git a/Map3DRendering/MapRender.cs b/Map3DRendering/MapRender.cs index b991212..6d6fb60 100644 --- a/Map3DRendering/MapRender.cs +++ b/Map3DRendering/MapRender.cs @@ -10,6 +10,7 @@ namespace Map3DRendering { private PortalEngine portalEngine; private CellEngine cellEngine; private LandBlockExtrator landblockExtraction; + private TerrainAtlasManager terrainAtlasManager; private readonly int NumberLandBlocks = 255; private readonly int BlockSize = 17; @@ -31,6 +32,7 @@ namespace Map3DRendering { public MapRender() { portalEngine = new PortalEngine(); cellEngine = new CellEngine(); + terrainAtlasManager = new(portalEngine); landblockExtraction = new(portalEngine, cellEngine); diff --git a/Map3DRendering/Window.cs b/Map3DRendering/Window.cs index 3e84e4c..344698a 100644 --- a/Map3DRendering/Window.cs +++ b/Map3DRendering/Window.cs @@ -10,7 +10,7 @@ namespace Map3DRendering { private readonly Vector3 _lightPos = new Vector3(0x10, 0, 0x10); - //private MapRender mapRender; + private MapRender mapRender; private WorldMapRender _render; private AxesGizmo axesGizmo; @@ -34,7 +34,7 @@ namespace Map3DRendering { public Window(GameWindowSettings gameWindowSettings, NativeWindowSettings nativeWindowSettings) : base(gameWindowSettings, nativeWindowSettings) { - //mapRender = new MapRender(); + mapRender = new MapRender(); _render = new WorldMapRender(); GL.GetInteger(GetPName.MaxTextureImageUnits, out maxTextures);