Cesium中的QuadtreePrimitive.js类
QuadtreePrimitive顾名思义就是四叉树Primitive的意思。已知的是它在Globe的_surface属性中有了使用。
首先来看构造函数:
function QuadtreePrimitive(options) { //>>includeStart('debug', pragmas.debug); if (!defined(options) || !defined(options.tileProvider)) { throw new DeveloperError("options.tileProvider is required."); } if (defined(options.tileProvider.quadtree)) { throw new DeveloperError( "A QuadtreeTileProvider can only be used with a single QuadtreePrimitive" ); } //>>includeEnd('debug'); this._tileProvider = options.tileProvider; this._tileProvider.quadtree = this; this._debug = { enableDebugOutput: false, maxDepth: 0, maxDepthVisited: 0, tilesVisited: 0, tilesCulled: 0, tilesRendered: 0, tilesWaitingForChildren: 0, lastMaxDepth: -1, lastMaxDepthVisited: -1, lastTilesVisited: -1, lastTilesCulled: -1, lastTilesRendered: -1, lastTilesWaitingForChildren: -1, suspendLodUpdate: false, }; var tilingScheme = this._tileProvider.tilingScheme; var ellipsoid = tilingScheme.ellipsoid; this._tilesToRender = []; this._tileLoadQueueHigh = []; // high priority tiles are preventing refinement this._tileLoadQueueMedium = []; // medium priority tiles are being rendered this._tileLoadQueueLow = []; // low priority tiles were refined past or are non-visible parts of quads. this._tileReplacementQueue = new TileReplacementQueue(); this._levelZeroTiles = undefined; this._loadQueueTimeSlice = 5.0; this._tilesInvalidated = false; this._addHeightCallbacks = []; this._removeHeightCallbacks = []; this._tileToUpdateHeights = []; this._lastTileIndex = 0; this._updateHeightsTimeSlice = 2.0; // If a culled tile contains _cameraPositionCartographic or _cameraReferenceFrameOriginCartographic, it will be marked // TileSelectionResult.CULLED_BUT_NEEDED and added to the list of tiles to update heights, // even though it is not rendered. // These are updated each frame in `selectTilesForRendering`. this._cameraPositionCartographic = undefined; this._cameraReferenceFrameOriginCartographic = undefined; /** * Gets or sets the maximum screen-space error, in pixels, that is allowed. * A higher maximum error will render fewer tiles and improve performance, while a lower * value will improve visual quality. * @type {Number} * @default 2 */ this.maximumScreenSpaceError = defaultValue( options.maximumScreenSpaceError, 2 ); /** * Gets or sets the maximum number of tiles that will be retained in the tile cache. * Note that tiles will never be unloaded if they were used for rendering the last * frame, so the actual number of resident tiles may be higher. The value of * this property will not affect visual quality. * @type {Number} * @default 100 */ this.tileCacheSize = defaultValue(options.tileCacheSize, 100); /** * Gets or sets the number of loading descendant tiles that is considered "too many". * If a tile has too many loading descendants, that tile will be loaded and rendered before any of * its descendants are loaded and rendered. This means more feedback for the user that something * is happening at the cost of a longer overall load time. Setting this to 0 will cause each * tile level to be loaded successively, significantly increasing load time. Setting it to a large * number (e.g. 1000) will minimize the number of tiles that are loaded but tend to make * detail appear all at once after a long wait. * @type {Number} * @default 20 */ this.loadingDescendantLimit = 20; /** * Gets or sets a value indicating whether the ancestors of rendered tiles should be preloaded. * Setting this to true optimizes the zoom-out experience and provides more detail in * newly-exposed areas when panning. The down side is that it requires loading more tiles. * @type {Boolean} * @default true */ this.preloadAncestors = true; /** * Gets or sets a value indicating whether the siblings of rendered tiles should be preloaded. * Setting this to true causes tiles with the same parent as a rendered tile to be loaded, even * if they are culled. Setting this to true may provide a better panning experience at the * cost of loading more tiles. * @type {Boolean} * @default false */ this.preloadSiblings = false; this._occluders = new QuadtreeOccluders({ ellipsoid: ellipsoid, }); this._tileLoadProgressEvent = new Event(); this._lastTileLoadQueueLength = 0; this._lastSelectionFrameNumber = undefined; }
它一共有_个属性:_tileProvider、_tileProvider.quadtree、_debug、_tilesToRender、_tileLoadQueueHigh、_tileLoadQueueMedium、_tileLoadQueueLow、_tileReplacementQueue、_levelZeroTiles、_loadQueueTimeSlice、_tilesInvalidated、_addHeightCallbacks、_removeHeightCallbacks