Node.js開發——解決Cesium視角切換的異常


最近在利用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;
                    }
……
}

進行三種視角的任意切換,再也沒有問題了:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM