osgEarth ios平臺地形release版本無法在mp和rex插件下渲染

前言

最近需要在ios平臺下進行DataEarth開發,主要是基於osgEarth渲染引擎做二次開發。源碼版本:OpenScenGraph3.6.5、osgEarth 2.10.2和Xcode 11.3做集成開發。碰到一個比較奇葩的問題,主要是tif格式的地形release版本無法在mp和rex插件下渲染,現已解決特此記錄。

解決方法

確認第三方庫是否正確加載

ios比較特別,它會編譯一個osgdb_imageio插件出來,這個插件主要是讀取圖片文件。大家不妨可以打開看一下ReaderWriterImageIO這個類,類的構造方法中包含了很多格式的圖片,而且最坑的是默認使用這個庫來讀取圖片文件。所以我把這個文件的tiff和tif這兩個格式給註銷掉,強制讓它調用osg的tiff庫來讀取地形,到這已經可以加載出地形了,就是距離地面比較進時地形就會變成磚塊狀了,這個初步猜測應該是採樣出了問題或者是線性插值有問題,接下來帶着這兩個問題一步一步刨根問題。

源碼程序中查找問題

  1. osgEarth文件下的ImageToHeightFieldConverter類中有一個convert方法,這個方法主要獲取32位或者16位的高程數據(我項目中使用的是16位的),由於三方庫加載的問題會導致這個地方出現問題,所以要特別留意一下此處。
    在這裏插入圖片描述
  2. osgEarth文件下的TerrainTileModelFactory類,找到addElevation方法,此方法中調用了convertTo32F這個方法,我們需要將其改爲convertTo16F,同時找到createElevationTexture方法,將tex->setInternalFormat(GL_R32F)這個方法刪除掉,增加一行tex->setInternalFormatMode(osg::Texture::USE_IMAGE_DATA_FORMAT),然後從新編譯即可正常渲染地形
    在這裏插入圖片描述在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章