123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*************************************************************************
- * Copyright © 2018-2023 Liwen All rights reserved.
- *------------------------------------------------------------------------
- * File : OsgbFileLoader.cs
- * Description : load osgb 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
- {
- [System.Serializable]
- public class PagedLodRangeInfo
- {
- public float mSelfMinValue;
- public float mSelfMaxValue;
- public float mChildMinValue;
- public float mChildMaxValue;
- }
- public class OsgbFileLoader : PagedLodFileLoader
- {
- public List<string> mChildFiles = new List<string>();
- public List<PagedLodRangeInfo> mChildRangeValues = new List<PagedLodRangeInfo>();
- public float mBoundRadius;
- public Vector3 mBoundsCenter = Vector3.zero;
- public Vector3 mBoundsBoxMin = Vector3.zero;
- public Vector3 mBoundsBoxMax = Vector3.zero;
- public OsgbFileLoader(string fileName)
- {
- mFileName = fileName;
- }
- public override void LoadObjectMeshInfo()
- {
- IntPtr ptr = OsgbLoader.OpenOsgbFile(mFileName);
- if (ptr == IntPtr.Zero)
- {
- Debug.LogError("OpenOsgbFile failure " + mFileName);
- return;
- }
- int meshCount = OsgbLoader.GetMeshCount(ptr);
- for (int i = 0; i < meshCount; ++i)
- {
- TileObjectInfo info = new TileObjectInfo();
- info.mVertices = OsgbLoader.GetVertexs(ptr, i,mIsDaJiangData);
- info.mTriangles = OsgbLoader.GetTriangles(ptr, i, mIsDaJiangData);
- info.mTexCoords = OsgbLoader.GetTexCoords(ptr, i);
- info.mImageResolutionS = OsgbLoader.GetImageResolutionS(ptr, i);
- info.mImageResolutionT = OsgbLoader.GetImageResolutionT(ptr, i);
- info.mImageData = OsgbLoader.GetImageData(ptr, i);
- info.mTextureFormat = OsgbLoader.GetImageFormat(ptr, i);
- info.mUnityTextureFormat = TextureFormat.RGB24;
- if (info.mTextureFormat == 33779)
- {
- info.mUnityTextureFormat = TextureFormat.DXT5;
- }
- mObjectInfoList.Add(info);
- }
- OsgbLoader.CloseOsgbFile(ptr);
- }
- public override void LoadObjectBasicInfo()
- {
- IntPtr ptr = OsgbLoader.OpenOsgbFileEx(mFileName);
- if (ptr == IntPtr.Zero)
- {
- Debug.LogError("OpenOsgbFile failure " + mFileName);
- return;
- }
- int childCount = OsgbLoader.GetChildFileCount(ptr);
- for (int i = 0; i < childCount; ++i)
- {
- mChildFiles.Add(OsgbLoader.GetChildTileFile(ptr, i));
- float[] rangeValues = new float[4];
- OsgbLoader.GetRangeList(ptr, i, ref rangeValues[0]);
- PagedLodRangeInfo rangeInfo = new PagedLodRangeInfo();
- rangeInfo.mSelfMinValue = rangeValues[0];
- rangeInfo.mSelfMaxValue = rangeValues[1];
- rangeInfo.mChildMinValue = rangeValues[2];
- rangeInfo.mChildMaxValue = rangeValues[3];
- mChildRangeValues.Add(rangeInfo);
- }
- if (childCount > 0)
- {
- mBoundRadius = OsgbLoader.GetBoundRadius(ptr);
- float[] center = new float[3];
- float[] min = new float[3];
- float[] max = new float[3];
- OsgbLoader.GetBoundsBox(ptr, ref center[0], ref min[0], ref max[0]);
- mBoundsCenter = new Vector3(center[0], -center[1], -center[2]); //局部坐标
- mBoundsBoxMin = new Vector3(min[0], -min[1], min[2]); //局部坐标
- mBoundsBoxMax = new Vector3(max[0], -max[1], max[2]); //局部坐标
- }
- OsgbLoader.CloseOsgbFile(ptr);
- }
-
- }
- }
|