/************************************************************************* * Copyright © 2018-2023 Liwen All rights reserved. *------------------------------------------------------------------------ * File : B3dmFileLoader.cs * Description : load b3dm format tile info *------------------------------------------------------------------------ * Author : Liwen * Version : 1.0.0 * Date : 1/5/2019 * Description : Initial development version. *************************************************************************/ using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Runtime.InteropServices; using System.Linq; using System.IO; namespace AIPagedLod { public class B3dmFileLoader : PagedLodFileLoader { public B3dmFileLoader() { } public B3dmFileLoader(string fileName) { mFileName = fileName; } public override void LoadObjectMeshInfo() { IntPtr ptr = B3dmLoader.OpenB3dmFile(mFileName); if (ptr == IntPtr.Zero) { Debug.LogError("OpenB3dmFile failure " + mFileName); return; } LoadObjectMeshInfoFromPtr(ptr); B3dmLoader.CloseB3dmFile(ptr); } private void LoadObjectMeshInfoFromPtr(IntPtr ptr) { int meshCount = B3dmLoader.GetMeshCount(ptr); for (int i = 0; i < meshCount; ++i) { TileObjectInfo info = new TileObjectInfo(); info.mVertices = B3dmLoader.GetVertexs(ptr, i, mIsDaJiangData); info.mTriangles = B3dmLoader.GetTriangles(ptr, i, mIsDaJiangData); info.mTexCoords = B3dmLoader.GetTexCoords(ptr, i); info.mImageResolutionS = B3dmLoader.GetImageResolutionS(ptr, i); info.mImageResolutionT = B3dmLoader.GetImageResolutionT(ptr, i); info.mImageData = B3dmLoader.GetImageData(ptr, i); info.mTextureFormat = B3dmLoader.GetImageFormat(ptr, i); info.mUnityTextureFormat = TextureFormat.RGBA32; mObjectInfoList.Add(info); } } public void LoadObjectMeshInfoFromData(byte[] data) { IntPtr ptr = B3dmLoader.LoadB3dmFromData(ref data[0], data.Length); if (ptr == IntPtr.Zero) { Debug.LogError("OpenB3dmFile failure--------------"); return; } LoadObjectMeshInfoFromPtr(ptr); B3dmLoader.CloseB3dmFile(ptr); } } }