當前位置:首頁 » 網頁前端 » osgweb開發
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

osgweb開發

發布時間: 2023-07-26 21:01:46

㈠ 如何在Web上直接瀏覽大規模OSGB格式傾斜模型(二):轉換OSGB

歡迎關注公號【 三維網格3D 】,第一時間獲取最新文章

上一篇( 如何在Web上直接瀏覽大規模OSGB格式傾斜模型(一):解析OSGB )已經貼出了解析結果,讓我們對OSGB傾斜模型文件內部結構有了比較清晰的認識,本篇我們將解析結果轉成three.js對象,並實現單個模型的顯示。

為什麼轉成three.js對象

從解析結果看,Osg對象的節點關系用three.js對象表達更容易,轉換結果可以直接用three.js顯示,通過我們團隊的Cesium和three.js融合方案,可以輕松將成果用於Cesium開發的項目,既可以單獨使用,又可以擁有GIS能力。

需要轉換的Osg類型

解析得到的Osg對象,Type屬性指示對象的類型,我們只是要轉換傾斜攝影模型文件的Osg對象,而不是做一個通用的轉換工具,所以先將類型做一下分類,只轉換目前所用測試數據(100多G的測試數據)已知的類型。

PS:我們團隊內部使用的版本,經過一年多的應用和改進,支持了更多類型的轉換,填了許多坑,而且支持osgb、osgt、osg、osgjs四種格式文件,載入速度和健壯性都得到保障。歡迎咨詢~

節點類

osg::Node

osg::Geode

osg::Group

osg::LOD

osg::PagedLOD

osg::MatrixTransform

幾何類

osg::Geometry

osg::OsgArray

材質類

osg::StateSet

osg::Material

osg::StateAttribute

osg::Texture

osg::Texture2D

osg::Image

節點類主要考慮osg::MatrixTransform,因為這個節點主要的信息就是變換參數,會影響模型的位置、旋轉、縮放等。

接下來我們著重介紹轉換幾何和材質這兩類,LOD和PagedLOD參數不多,而且都是調度相關的,我們放在下一篇一起介紹。

轉換幾何對象

幾何數據存儲在Osg::Geometry,包含索引屬性PrimitiveSetList、位置坐標屬性VertexArray、紋理坐標屬性TexCoordArray。我們將其轉換為THREE.BufferGeometry。

varbufferGeometry=newTHREE.BufferGeometry();

頂點屬性轉換

頂點屬性值是一個二維數組,我們直接調用flat方法,轉為一維數組即可。

varpositions=newFloat32Array(osgGeometry.VertexArray.flat());

varuvs=newFloat32Array(osgGeometry.TexCoordArray.flat());

bufferGeometry.setAttribute('position',newTHREE.BufferAttribute(positions,3));

bufferGeometry.setAttribute('uv',newTHREE.BufferAttribute(uvs,2));

索引轉換

索引類型有兩種,有value指定,這里我們只對索引類型為4的情況(即繪圖最小單元為四邊形)進行特殊處理,其餘的默認最小繪制單元為三角形。

varprimitiveSet=osgGeometry.PrimitiveSetList[0]

varindices=primitiveSet.data;

if(primitiveSet.value==4) {

letnewIndices=[];

for(leti=0; i<indices.length; i+=4) {

leti0=indices[i],

i1=indices[i+1],

i2=indices[i+2],

i3=indices[i+3];

newIndices.push(

i0, i1, i3,

i1, i2, i3

);

}

indices=newIndices;

}

bufferGeometry.setIndex(indices);

轉換材質對象

傾斜攝影模型的材質最重要的就是貼圖,作為原理介紹,我們不處理其他材質參數,直取貼圖即可,當然工程應用上我們還是需要處理一些情況,保證其可用、可靠、健壯。

材質對象存儲在Osg::Geometry的StateSet屬性,該屬性類型為Osg::StateSet,而我們要的貼圖存儲在Osg::StateSet的TextureAttributeList屬性,一般就一張圖。

傾斜模型已經包含了光影信息,為此我們將材質轉為THREE.MeshBasicMaterial。

varmaterial=newTHREE.MeshBasicMaterial({

side:THREE.DoubleSide

});

處理貼圖

貼圖一般是jpg或者png格式,我們這里只處理這兩種格式。需要注意的是圖片數據為Uint8Array類型,我們需要先轉為Blob,然後通過URL.createObjectURL創建url,最後使用THREE.TextureLoader載入。

varosgStateSet=osgGeometry.StateSet;

varosgImage=osgStateSet.TextureAttributeList[0].value.StateAttribute.Image

varfileName=osgImage.Name;

constisJPEG=fileName.search(/\.jpe?g($|\?)/i)>0

constisPNG=fileName.search(/\.png($|\?)/i)>0

if(!isPNG&&!isJPEG)return;

varmimeType=isPNG?'image/png':'image/jpeg';

varimageUri=newBlob([osgImage.Data], { type:mimeType });

imageUri=URL.createObjectURL(imageUri)

vartexture=newTHREE.TextureLoader().load(imageUri, ()=>{

texture.needsUpdate=true

})

創建網格

最後,使用轉換好的幾何體和材質創建模型網格。這里要注意,傾斜攝影模型是z軸朝上(z-up),而three.js渲染是y軸朝上(y-up),所以還需將網格繞x軸旋轉y-90°才得到正常的渲染效果。

varmesh=newTHREE.Mesh(geometry, material);

mesh.rotation.x=-Math.PI/2

轉換結果

顯示效果

額,看起來並沒有那麼好看~畢竟這是單個瓦片最不清晰的那層,簡化到不能看了。

下一篇,我們將主要介紹如果實現PagedLOD,來載入大規模傾斜攝影模型,敬請期待

歡迎關注公號【 三維網格3D 】,第一時間獲取最新文章

㈡ 關於WebGL的基本現狀

WebGL(全寫Web Graphics Library)是一種3D繪圖協議,這種繪圖技術標准允許把JavaScript和OpenGL ES 2.0結合在一起,通過增加OpenGL ES 2.0的一個JavaScript綁定,WebGL可以為HTML5 Canvas提供硬體3D加速渲染,這樣Web開發人員就可以藉助系統顯卡來在瀏覽器里更流暢地展示3D場景和模型了,還能創建復雜的導航和數據視覺化。

顯然,WebGL技術標准免去了開發網頁專用渲染插件的麻煩,可被用於創建具有復雜3D結構的網站頁面,甚至可以用來設計3D網頁游戲等。

WebGL 的最大優勢就是能通過網頁做到快速傳播,用酷炫的圖形體驗達到營銷宣傳等目的。

WebGL基本現狀

WebGL 1.0 基本有98%的設備支持率,而 WebGL 2.0 有大概49%的設備支持率,並逐步在上升。

其中 WebGL 2.0 的重要特性有

WebAssembly方面:許多 C3D 引擎都開始涉及這塊領域。比如 oryol,一個輕量級的 C 框架。其中物理模擬的部分通過 Webassembly 的方式去做,在 web 上做了個布料模擬的 demo。當然 Unity 和 Unreal 也都推出了自己基於 Webassembly 的 demo:

  • Unity:兩個 demo,分別為:tank,webgl_linear。

  • Unreal:EpicZenGarden。

  • WebGL 研發中的新特性

    英特爾的先進網路科技團隊對 WebGL 的生態系統做出了許多貢獻,因此新特性部分主要由他們來展示。

    WebGL 2.0 Compute

  • 研發描述:在 WebGL 實現 OpenGL ES 3.1 的功能,主要是 Compute Shader!

  • 研發狀態:

  • 對於 OpenGL 和 D3D 後端 Compute Shader 都基本完成,通過在 Chrome 中設置 flag enable-webgl2-compute-context 可以使用。

  • 基於 Compute Shader 的 Tensorflow.js 基本可以運行。

  • 研發計劃:

  • 在今年末實現所有 Compute Shader 的特性。

  • 在 Emscripten 中支持 WebGL 2.0。

  • 將 Native dEQP ES 3.1 的樣例移植到Web端。

  • 根據需求實現 OpenGL ES 3.1的其他特性

  • 常見的Web開發軟體

    基於 WEBGL 的 3D:three.js , osgjs
    其中 three.js 最火爆,是純JS包osg 還有對應的 C++ 跟 .NET 包, OSGJS 並不是 OSG 的重點;

    專注於 WEB 3D GIS 的 WEBGL:osmstreet、openwebglobe、readymap這個是做 3D 城市規劃的;

    基於 IE ACTIVEX OCX 的 3D:unity3D , 很火, 做WEB游戲,做 anroid 游戲, IE CHORME 都可以google earth 學習成本低;

    基於 AS3 的 3D:Away3d、FLASH 正在走下坡;

    下方

    運營:weikashouji

㈢ 常見的Web3D開發軟體工具

你可以先去【繪學霸】網站找「3d建模」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-1732515186659462987

想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。

自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-1732515186659462987

在「3d建模」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。

大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html