最近在利用Cesium做開發時,版本是v25,發現一個bug,在它的SandCastle中的任何一個例子,如果用的是Chrome瀏覽器,在2D視圖和2.5D視圖之間多次切換,會報一個錯,換成firefox瀏覽器就沒問題。
An error occurred while rendering. Rendering has stopped.
RangeError: Invalid array length
經過一段時間的調試,最終找到了引起bug的原因。在scene/scene.js源文件中的函數function createPotentiallyVisibleSet(scene) 的最后面,有個變量numFrustums,應該是個數值,但是它偶爾會變成NaN,從而導致后面的函數出錯。這個變量的值是計算得來,是由於其它變量的NaN值而導致問題。繼續向上找根源,最終在一個循環里找到了變量boundingVolume的屬性radius是NaN,最簡單的解決方法是當這個radius是NaN時,就跳過這次循環,代碼如下:
…… if (defined(boundingVolume)) { if(isNaN(command.boundingVolume.radius)){ continue; } if (command.cull && ((cullingVolume.getVisibility(boundingVolume) === Intersect.OUTSIDE) || (defined(occluder) && !occluder.isBoundingSphereVisible(boundingVolume)))) { continue; } …… }
進行三種視角的任意切換,再也沒有問題了:)