WorldWind源码剖析系列:表面瓦片类SurfaceTile
表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型。其类图如下。
表面瓦片类SurfaceTile包含的主要的字段、属性和方法如下:
int m_Level;//该瓦片所属金字塔影像的层级
double m_North;//该瓦片北边界
double m_South; //该瓦片南边界
double m_West; //该瓦片西边界
double m_East; //该瓦片东边界
bool m_Initialized = false; //该瓦片是否已被初始化
Device m_Device = null; //渲染该瓦片的设备对象
Texture m_RenderTexture = null; //该瓦片所关联的纹理影像
float[,] m_HeightData = null; //存储该瓦片所覆盖区域的高程数据的二维数组
CustomVertex.TransformedColoredTextured[] m_RenderToTextureVertices = new CustomVertex.TransformedColoredTextured[4];//待渲染的纹理顶点坐标
DynamicTexture m_DynamicTexture = null;//该瓦片所包含的动态纹理
bool m_RequiresUpdate = false;//标志该瓦片是否需要更新
float m_VerticalExaggeration = float.NaN;//该瓦片的竖直放大率
System.DateTime m_LastUpdate = System.DateTime.Now;//瓦片最后更新时间
WorldSurfaceRenderer m_ParentWorldSurfaceRenderer;//该瓦片所绑定的星球表面渲染类对象
BoundingBox m_BoundingBox;//该瓦片的外包围盒
short[] m_NwIndices = null;//该瓦片的西北顶点数组
short[] m_NeIndices = null;//该瓦片的东北顶点数组
short[] m_SwIndices = null;//该瓦片的西南顶点数组
short[] m_SeIndices = null;//该瓦片的东南顶点数组
SurfaceTile m_NorthWestChild;//该瓦片的西北孩子瓦片
SurfaceTile m_NorthEastChild;//该瓦片的东北孩子瓦片
SurfaceTile m_SouthWestChild;//该瓦片的西南孩子瓦片
SurfaceTile m_SouthEastChild;//该瓦片的东南孩子瓦片
short[] m_IndicesElevated;// 该瓦片的高程索引数组
该类的方法都比较简单,不再赘述,有兴趣的读者可以阅读源码。感兴趣的读者可以直接阅读源码。建议阅读源码之前读者应具备一定的DirectX3D开发基础。
调用关系:
1) SurfaceTile内部引用了SurfaceImage、WorldSurfaceRenderer 、TerrainTile、BoundingBox、DynamicTexture等类。
2) TerrainTileService内部引用了TerrainTile等类。
3) TerrainTile内部也引用了TerrainTileService、TerrainDownloadRequest等类。
4) TerrainAccessor内部引用了TerrainTile等类。
5) World派生于RenderableObject类,内部引用了WorldSettings、SettingsBase 、DrawArgs 、MathEngine 、TerrainAccessor、RenderableObjectList、WorldSurfaceRenderer、Quaternion 、ProjectedVectorRenderer、AtmosphericScatteringSphere、MeshSubset 、RenderableObject、SunCalculator、Frustum、ImageHelper 、RenderPriority、Angle、CameraBase等类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理