B3dmFileLoader.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*************************************************************************
  2. * Copyright © 2018-2023 Liwen All rights reserved.
  3. *------------------------------------------------------------------------
  4. * File : B3dmFileLoader.cs
  5. * Description : load b3dm format tile info
  6. *------------------------------------------------------------------------
  7. * Author : Liwen
  8. * Version : 1.0.0
  9. * Date : 1/5/2019
  10. * Description : Initial development version.
  11. *************************************************************************/
  12. using System.Collections;
  13. using System.Collections.Generic;
  14. using UnityEngine;
  15. using System;
  16. using System.Runtime.InteropServices;
  17. using System.Linq;
  18. using System.IO;
  19. namespace AIPagedLod
  20. {
  21. public class B3dmFileLoader : PagedLodFileLoader
  22. {
  23. public B3dmFileLoader()
  24. {
  25. }
  26. public B3dmFileLoader(string fileName)
  27. {
  28. mFileName = fileName;
  29. }
  30. public override void LoadObjectMeshInfo()
  31. {
  32. IntPtr ptr = B3dmLoader.OpenB3dmFile(mFileName);
  33. if (ptr == IntPtr.Zero)
  34. {
  35. Debug.LogError("OpenB3dmFile failure " + mFileName);
  36. return;
  37. }
  38. LoadObjectMeshInfoFromPtr(ptr);
  39. B3dmLoader.CloseB3dmFile(ptr);
  40. }
  41. private void LoadObjectMeshInfoFromPtr(IntPtr ptr)
  42. {
  43. int meshCount = B3dmLoader.GetMeshCount(ptr);
  44. for (int i = 0; i < meshCount; ++i)
  45. {
  46. TileObjectInfo info = new TileObjectInfo();
  47. info.mVertices = B3dmLoader.GetVertexs(ptr, i, mIsDaJiangData);
  48. info.mTriangles = B3dmLoader.GetTriangles(ptr, i, mIsDaJiangData);
  49. info.mTexCoords = B3dmLoader.GetTexCoords(ptr, i);
  50. info.mImageResolutionS = B3dmLoader.GetImageResolutionS(ptr, i);
  51. info.mImageResolutionT = B3dmLoader.GetImageResolutionT(ptr, i);
  52. info.mImageData = B3dmLoader.GetImageData(ptr, i);
  53. info.mTextureFormat = B3dmLoader.GetImageFormat(ptr, i);
  54. info.mUnityTextureFormat = TextureFormat.RGBA32;
  55. mObjectInfoList.Add(info);
  56. }
  57. }
  58. public void LoadObjectMeshInfoFromData(byte[] data)
  59. {
  60. IntPtr ptr = B3dmLoader.LoadB3dmFromData(ref data[0], data.Length);
  61. if (ptr == IntPtr.Zero)
  62. {
  63. Debug.LogError("OpenB3dmFile failure--------------");
  64. return;
  65. }
  66. LoadObjectMeshInfoFromPtr(ptr);
  67. B3dmLoader.CloseB3dmFile(ptr);
  68. }
  69. }
  70. }