999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OSG的OBS導航定位系統三維可視化場景實現

2017-08-12 12:22:05鄭貴洲
計算機應用與軟件 2017年8期
關鍵詞:可視化

王 躍 鄭貴洲

(中國地質大學(武漢)信息工程學院 湖北 武漢 430074)

?

基于OSG的OBS導航定位系統三維可視化場景實現

王 躍 鄭貴洲*

(中國地質大學(武漢)信息工程學院 湖北 武漢 430074)

在海洋地震勘探中,海底地震儀OBS(Ocean Bottom Seismometer)導航定位系統可提高OBS投放精度。系統是在VS2010和OSG 3.0.0的可視化開發環境下,基于MFC框架,運用三維可視化技術搭建OBS投放場景,實現場景節點有效組織與管理,動態顯示船只和OBS運動過程。采用Chunked LOD算法處理測深格網數據構建地形細節層次模型,應用OSG數據庫分頁管理和分頁細節層次節點技術實現了OBS投放場景地形數據動態調度。通過場景漫游功能實現了OBS投放過程的多角度三維可視化監控,直觀反映海底地形地貌與作業過程,提高了OBS投放精度和數據質量。

海底地震儀 三維可視化 OpenSceneGraph 線程沖突 地形動態調度

0 引 言

海底地震儀OBS是一種放置在海底接收人工震源或天然地震信號的海洋調查設備。自20世紀60年代問世以來,在海底深部構造調查、海洋油氣勘探和天然氣水合物的調查中得到了廣泛應用[1]。OBS投放可分為有纜和無纜兩種投放方式,均需采用專業的導航定位系統,引導作業船只到達設計目標點附近后投放OBS,使其在海底的觸底點盡可能靠近目標點站位,以滿足海洋地球物理對于OBS野外資料采集的導航定位的精度控制要求。然而,在實際的海上作業中,受海風、海流等復雜環境因素影響,自由落體的OBS在降落至海底的過程中會偏離設計點一定距離,這將直接影響到OBS數據采集的質量。目前應用最為廣泛的有纜投放方式,通常需要結合超短基線USBL[2](Ultra Short BaseLine)水下定位系統實施作業。在此過程中,需要借助專用的導航定位系統,輔助工作人員全面了解投放區域的地理環境,實時可視化監控和引導整個投放過程,以提高OBS投放成功率。

近年來,三維可視化技術日趨成熟,在海洋研究領域的應用也不斷深入。李勃[3]、王想紅[4]、李新放等[5]分別構建了全球尺度的海洋多維動態三維可視化系統,實現了海洋多源數據的直觀顯示,但是缺乏面向OBS水下投放與定位的模塊。張莉等[6]采用蒙特卡羅法模擬OBS降落海底的過程,該方法在一定程度上提高了OBS位置精度,但不能直觀反映OBS水下運動過程,不具備實時性。胡家賦等[7]針對OBS水下投放的需求,設計實現了二維OBS導航定位系統,但無法直觀精確了解設備的采集環境。在實際OBS投放作業過程中,要求能從不同視角觀測OBS從海面到設計目標點投放過程中實時移動狀態和相對位置關系,同時能直觀獲悉擬投放區域的海底地形地貌,充分地考慮海底地形對OBS工作狀態的影響,傳統的二維可視化方法顯然無法滿足這些要求。針對以上問題,本文在研究三維渲染引擎OpenSceneGraph[8]的基礎上,通過Chunked LOD算法處理測深格網數據并生成地形細節層次模型。以VS2010為開發平臺,采用OSG 3.0.0作為圖形開發庫,結合osgOcean海洋模塊構建了OBS投放三維可視化場景,直觀反映研究區域海底地形地貌,實現對OBS的實時監控和精確定位。

1 OBS投放場景結構設計

1.1 場景體系結構設計

OBS投放場景體系結構可分為數據層、驅動層和應用層三部分,如圖1所示。數據層包括場景模型、海底地形模型及導航定位數據。場景模型包括調查船只、OBS、站位等.3ds格式的模型數據;海底地形模型是測深格網數據通過VPB等工具處理得到的分頁地形數據庫文件;導航定位數據包括GPS、羅經、OBS以及水深儀實測數據,系統通過支持串口通信和TCP/IP網絡通信兩種方式的實時通信模塊讀入外設數據[9]。驅動層通過OSG渲染引擎對場景數據進行組織、渲染和管理。應用層實現了OBS和調查船只等場景要素的顯示、場景動態更新以及場景漫游等功能,可以全方位觀測投放過程中OBS與目標站位間的空間位置關系。

圖1 場景體系圖

1.2 場景組織結構設計

OSG場景采用一種自頂向下的分層樹狀數據結構來組織空間數據集,以提高渲染的效率。場景樹由節點組成,節點可以是可繪制對象、矩陣變換以及狀態切換等,它能夠反映場景的空間組成結構以及對象的屬性狀態。場景樹頂部是一個根節點,自根節點向下分別為組節點和葉子節點。組節點包含了場景對象的渲染狀態信息和幾何信息,而處于場景樹底部的葉子節點則包含了場景對象的實際幾何信息,葉子節點沒有子節點。osgOcean是OSG的海洋模塊,作為一個子節點加入場景中,具備有可調波浪大小、水面的反射與折射、支持海平面模型的快速傅里葉(FFT)變換、水底光照(God Rays)、海面光暈、海底的霧效果等特效[10]。場景樹結構如圖2所示。

圖2 場景樹結構圖

2 OBS投放場景實現

2.1 場景核心類設計

三維可視化場景核心類主要分為三部分:繼承自osg::Referenced的COSG、OBS3D、SteelCable3D、Ship3D、OBS3DSurveyLine及OBS3DStation等類;繼承自osg::NodeCallBack的SteelCableCallBack、OBSPosCallBack、SurBoatCallBack及SurCameralCall-Back等類;繼承自osgGA::CameraManipulator的TravelManipulator類。場景核心類圖如圖3所示。

圖3 場景核心類圖

COSG類主要負責場景、相機、漫游器的初始化,海底地形的加載和移除及場景渲染。OBS3D、SteelCable3D、Ship3D、OBS3DStation及OBS3DSurveyLine類分別負責OBS、拖纜、船只、站位及測線在場景中的加載和移除。SteelCableCallBack、OBSPosCallBack和SurBoatCallBack類繼承自節點回調類,根據讀入的外設數據對場景進行動態更新,通過回調機制實現拖纜、OBS和船只等場景模型的動態顯示效果。SurCameraCallBack類負責天空盒跟隨視點移動,確保場景的可見性。TravelManipulator類定義了一系列操作實現場景的漫游、目標居中定位、視點跟隨等功能。

2.2 場景動態更新

OSG中節點主要使用回調機制來完成用戶在每幀中所要執行的工作。在遍歷場景過程中,如果遇到與用戶定義的回調類和函數相關聯的節點,則執行該節點的回調。按照關聯方法的不同,可分為更新回調和人機交互回調等。本文主要通過船只、OBS及拖纜的更新回調方案實現場景動態顯示效果。以船只節點回調為例,首先編寫繼承自NodeCallback類的新類SurBoatCallBack;其次重載operator()方法獲取船只節點位置變換矩陣;最后在Ship3D類中通過VecMatrix->setUpdateCallback(VecCallBack.get())設置回調實例,完成船只節點的回調,其中VecMatrix為位置變換矩陣。節點更新回調功能主要通過operator()方法實現,它包含兩個參數,分別是關聯節點地址osg::Node* node和節點訪問器osg::NodeVisitor* nv。獲取關聯的船只節點并設置節點訪問器遍歷類型為UPDATE_VISITOR,分別計算世界坐標系下的變換矩陣、縮放矩陣和旋轉矩陣,相乘可以得到船只節點在更新回調中的位置變換矩陣,主要實現代碼如下:

void operator()(osg::Node* node, osg::NodeVisitor* nv)

{

vecNode->GetBoatGNode();

//獲取船只節點

nv->getVisitorType()==osg::NodeVisitor::UPDATE_VISITOR;

//設置節點訪問器

//計算船只節點位置變換矩陣

matrix=osg::computeLocalToWorld(nv->getNodePath());

//計算世界坐標系下的變換矩陣

scal.makeScale();

//計算縮放矩陣

rot.makeRotate();

//計算旋轉矩陣

matrix = scal * rot * matrix;

//計算位置變換矩陣

}

此外,拖纜是連接船只和OBS的纜線,它實質上是一個osg::Vec3Array類型的三維頂點數組,根據船只節點坐標和OBS節點坐標,通過算法可以計算拖纜上一系列點的坐標,并存儲在三維數組中,再由渲染線程繪制出來。由于在讀取外設數據時船只和OBS的位置坐標值是不斷變化的,因此拖纜上點的坐標在每幀渲染時也需要更新。此時拖纜在進行更新回調時主線程和渲染線程就會發生資源同搶的問題,導致場景運行卡頓。本文解決線程沖突的具體流程如圖4所示。

圖4 線程沖突解決機制

當需要更新頂點數組時,先暫停渲染線程,由主線程進行修改,修改完成后再啟動渲染線程進行渲染。首先定義全局布爾型變量NeedModify和CanModify,并初始化值為false。在渲染線程中,通過函數PreFrameUpdate()判斷是否需要進行修改,若不需要修改,則進入frame()函數進行渲染;若需要修改,在主線程中將NeedModify值置為true。此時在函數PostFrameUpdate()中CanModify值也變為true,再回到主線程中更新頂點數組坐標值,修改完成后將NeedModify值置為false,啟動渲染線程進行場景渲染工作。通過這種設置信號量的方法可以有效解決線程沖突問題,保證場景的流暢顯示。

2.3 場景漫游

進行場景交互時,通過改變視點位置和視點方向,實現虛擬場景漫游功能,獲取場景對象的相關信息[11]。 osgGA::CameraManipulator類繼承自osgGA事件處理器osgGA::GUIEventHandler類,它由GUIEventAdapter和GUIActionAdapter組成。前者定義了一個且僅有一個人機交互事件,是OSG交互事件和系統交互事件的適配接口;后者實現了用戶向系統傳遞請求的功能。場景漫游功能主要在TravelManipulator類中實現,該類繼承自CameraManipulator類,它提供了矩陣變換和事件處理的接口,可以通過重載矩陣變換函數和事件處理函數實現漫游功能。四個矩陣變換函數均為純虛函數,分別是setByMatrix()、getMatrix()、setByInverseMatrix ()及getInverseMatrix(),可以通過重載get函數向viewer傳遞矩陣,從而控制當前視口。定義事件處理函數bool TravelManipulator::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIAction-Adapter &us),首先在handle()函數中添加所需的事件處理函數,包括handleKeyUp、handleKeyDown、handleMousePush、handleMouseDrag及handleMouse-Release五種類型的事件,通過響應鍵盤和鼠標操作實現漫游功能;其次進行碰撞檢測[12];最后通過viewer->setCameraManipulator(camera)將操作器和場景相關聯。

三維場景提供多種觀測角度對OBS投放過程進行監控,可以通過視點跟隨功能實現。視點跟隨是一種是基于目標的漫游,其原理是選取一個視點,將船只和OBS的運動矩陣和相機矩陣關聯起來,實現相機跟隨視點的效果[13]。分別定義函數computeFollowSide-Position()和computeFollowBackPosition()來實現側視角和后視角跟隨功能,實現過程中根據場景中有無OBS節點可分為兩種情況。船只航向角是以正北方向為基準線的,首先獲取船只航向,再經過坐標轉換得到直角坐標系下的角度變量,最后分別計算位置坐標和旋轉角度的值,通過矩陣函數實現視點跟隨功能。

3 OBS投放場景地形動態調度

3.1 地形網格LOD模型構建

隨著三維地形可視化技術不斷發展,對地形的顯示范圍和精度要求越來越高。本文研究區域范圍為105°E-122°E,8°N-25°N,橫跨UTM投影下48、49、50和51四個分帶,原始格網數據量較大,地形數據難以一次性載入計算機內存中,加大了實時渲染的難度。

本文采用Chunked LOD[14]算法構建地形模型,后人也對基于分塊的地形算法進行了一定改進和應用[15-18],地形效果圖如圖5所示。本文構建一個自上而下包含整個地形區域的四叉樹,它的每個節點包含一塊地形,子節點包含其父節點地形的四分之一,但分辨率更高,根節點表示最粗糙的地形,葉子節點表示最高分辨率的精細地形。該算法需要對地形數據進行預處理,將生成的靜態地形數據存儲在網格中。每個塊內的數據可以通過一個繪制命令和一個高級的混合通道來完成繪制。本文中構建的四叉樹深度值為8,將地形數據按照不同的細節層次進行分塊預處理,塊與塊之間相互獨立,在地形渲染過程中,通過多線程分別調用不同層次不同區域的地形,實現了out-of-core算法對數據的分頁管理和動態調度。此外,相鄰塊的細節層次不同會導致裂縫的產生,本文采用“裙邊法”消除裂縫,如圖6所示。在塊的周圍構造垂直的裙邊,每個地形塊的紋理不變,裙邊只影響本塊,該方法可以有效地消除裂縫。

圖5 地形效果圖

圖6 裙邊法

3.2 地形數據動態調度

在渲染地形時,不管是視錐體裁剪技術還是通過LOD算法構建金字塔模型與四叉樹索引,都是減少傳入渲染管道中的頂點數量,以此提高渲染效率。但是這并不能完全解決在內存中載入海量數據的問題,因此,地形數據的分頁機制尤為重要。本文中,借助OSG的分頁數據庫(DatabasePager)與分頁細節層次節點技術(PagedLOD)實現了地形的動態調度。

DatabasePager的核心思想是在內存中加載需要的數據,卸載不需要的數據,確保內存中始終維持有限的數據額度。其主要工作可以分為刪除對象、加載對象、預編譯對象及將對象合并到場景四部分,其中分頁和節點管理工作由DatabasePager內置的數據線程DatabaseThread負責。PagedLOD用于實現動態分頁加載,它的每個節點都是磁盤中的文件,可以根據需要加載這些文件,加載過程中有單獨的線程負責實時調度及加載。PagedLOD技術需要用到DatabasePager,它在場景中會篩選不同細節層次的模型,選擇出需要的,并通知DatabasePager進行加載和卸載操作。因此,PagedLOD技術整合了LOD技術和DatabasePager技術,既能提高渲染效率,又能提高內存效率[19]。地形的渲染流程如圖7所示。

圖7 地形渲染流程圖

圖8 三維可視化效果圖

本文實驗數據為場景模型數據、南海局部海底地形格網數據、GPS導航定位數據及OBS數據等,實驗所采用的計算機硬件配置為:CPU Intel Core i5-2410M,6.0 GB RAM,NVIDIA GeoForce GT540顯卡,顯存為1 GB;軟件環境為:Windows 7 64 bit操作系統,Visual Studio 2010,渲染引擎采用OpenSceneGraph,編程語言為C++。場景效果圖如圖8所示,(a)為海洋表面效果圖;(b)為OBS投放作業場景,此時洋面自動隱藏以顯示海底地形,船只拖著OBS沿測線行進,并繪制出OBS軌跡線。該系統相比于國內其他專業水上測量導航系統而言,采用三維可視化的表達方式更加直觀,可以充分考慮海底地形地貌對OBS工作狀態的影響,多角度實時觀測OBS從海面投放點到設計目標點的投放過程中實時移動狀態和相對位置關系,從而提高OBS定位精度。系統經過模擬測試與海上測試,在作業時場景渲染流暢,地形渲染效果達到預期,系統運行穩定,操作方便,可以很好地輔助工作人員實施作業,實際的布設效果理想。

4 結 語

OBS導航定位系統是以VS2010集成開發環境為平臺, OSG為三維渲染引擎實現的。基于MFC框架,結合OSG海洋模塊osgOcean,運用三維可視化技術搭建OBS投放場景,直觀反映海底地形地貌及OBS投放過程。通過Chunked LOD算法處理地形格網數據構建地形LOD模型,采用OSG數據庫分頁管理和分頁細節層次節點技術實現了OBS投放場景地形的動態調度。通過視點跟隨的方法輔助多角度監控OBS投放,實現虛擬場景管理及漫游,完成良好的交互式三維可視化。但系統還存在很多不足,例如,Chunked LOD算法無法實時更新或者增強細節,突跳現象明顯,系統的運行速度有待提高等問題。隨著GPU可編程管線渲染技術不斷成熟,采用一種更加有效的地形網格渲染方法也是下一步研究的重點。此外,隨著OSG的地景渲染工具osgEarth不斷發展和完善,使用osgEarth對OBS投放場景進行構建必將取得更好的效果。

[1] 吳志強, 陳建文. OBS在我國海洋深部地質調查中的應用現狀和前景[J]. 海洋地質動態, 2008, 24(9): 35-42.

[2] 王德剛, 韓富江, 來向華, 等. 超短基線定位原理及校正方法研究[J]. 海洋科學, 2011, 35(2): 77-81.

[3] 李勃. 虛擬海洋與三維可視化仿真引擎的研究與開發[D]. 中國海洋大學, 2013.

[4] 王想紅. 基于三維虛擬地球的海洋環境數據動態可視化研究[D]. 遼寧工程技術大學, 2013.

[5] 李新放, 劉海行, 周林, 等. 基于 OpenSceneGraph 的海洋環境三維可視化系統研究[J]. 海洋科學, 2012, 36(1): 54-58.

[6] 張莉, 趙明輝, 王建, 等. 南海中央次海盆 OBS 位置校正及三維地震探測新進展[J]. 地球科學: 中國地質大學學報, 2013, 8(1): 33-42.

[7] 胡家賦, 晉俊嶺, 任東宇, 等. 海底地震儀布設導航定位系統的設計與實現[J]. 測繪科學, 2014, 39(4): 68-73.

[8] 王銳, 錢學雷. OpenSceneGraph三維渲染引擎設計與實現[M]. 北京: 清華大學出版社, 2009.

[9] 袁國斌, 裴承艷, 尚建嘎, 等. 面向 OBS 導航定位的實時通信模塊設計與實現[J]. 電子技術應用, 2013, 39(6):136-138.

[10] 陳寧, 聶壘鑫, 劉煒, 等. 基于 OSG 的海洋漫游場景開發[J]. 江蘇科技大學學報(自然科學版), 2013, 27(4): 386-390.

[11] Hu J, Wan W, Wang R, et al. Virtual reality platform for smart city based on sensor network and OSG engine[C]// Audio, Language and Image Processing (ICALIP). Washington DC: IEEE Computer Society Press, 2012: 1167-1171.

[12] 明芳, 李峻林. 基于 OSG 的虛擬場景漫游技術研究[J]. 計算機與數字工程, 2011, 39(3): 133-137.

[13] 葉偉. 基于 OSG 的虛擬校園漫游系統研究與實現[D]. 南昌航空大學, 2013.

[14] Ulrich T. Rendering massive terrains using chunked level of detail control[C]// Proc.of SIGGRAPH’02. San Antonio, Texas,USA: ACM Press, 2002.

[15] 宋省身, 全吉成, 趙秀影, 等. 基于 Chunked LOD 的實時細節增強地形算法[J]. 計算機工程與設計, 2014, 35(2): 578-582.

[16] 萬明, 梁霞, 張鳳鳴. 一種四叉樹地形渲染裂縫的改進消除算法[J]. 系統仿真學報, 2015 (7): 1520-1525,1531.

[17] 侯紹洋, 趙學勝, 官亞勤. 基于多分辨率半邊的分塊 LOD 模型無縫表達[J]. 地理與地理信息科學, 2015, 31(4): 18-21.

[18] Suárez J P, Trujillo A, Santana J M, et al. An efficient terrain Level of Detail implementation for mobile devices and performance study[J]. Computers, Environment and Urban Systems, 2015, 52: 21-33.

[19] 李雷. 基于OGRE的海量三維模型動態調度技術的研究與實現[D]. 廣西大學, 2012.

IMPLEMENTATIONOF3DVISUALIZATIONSCENEFOROBSNAVIGATIONANDPOSITIONINGSYSTEMBASEDONOSG

Wang Yue Zheng Guizhou*
(CollegeofInformationEngineering,ChinaUniversityofGeosciences(Wuhan),Wuhan430074,Hubei,China)

In marine seismic exploration, OBS navigation and positioning system can improve the OBS delivery precision. In order to organize and manage scene nodes efficiently and display movements of ship and OBS dynamically, the system uses 3D visualization technology to build OBS delivery scene based on MFC framework under the visual development environment of VS2010 and OSG 3.0.0. We use bathymetric grid data to generate terrain LOD model based on Chunked LOD, and use DatabasePager and PagedLOD technology to realize dynamic scheduling of terrain. The system achieves 3D visualization and multi-angle surveillance of OBS delivery process through roaming. It shows the seabed topography and operation process directly, and improves the OBS delivery precision and data quality.

OBS Three dimensional visualization OpenSceneGraph Thread conflict Dynamic scheduling of terrain

2016-07-04。國家高技術研究發展計劃項目(GZH201200508)。王躍,碩士生,主研領域:虛擬現實,三維可視化。鄭貴洲,教授。

TP391.41

A

10.3969/j.issn.1000-386x.2017.08.017

猜你喜歡
可視化
無錫市“三項舉措”探索執法可視化新路徑
基于CiteSpace的足三里穴研究可視化分析
自然資源可視化決策系統
北京測繪(2022年6期)2022-08-01 09:19:06
三維可視化信息管理系統在選煤生產中的應用
選煤技術(2022年2期)2022-06-06 09:13:12
思維可視化
師道·教研(2022年1期)2022-03-12 05:46:47
基于Power BI的油田注水運行動態分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
自然資源可視化決策系統
北京測繪(2021年7期)2021-07-28 07:01:18
基于CGAL和OpenGL的海底地形三維可視化
可視化閱讀:新媒體語境下信息可視化新趨勢
“融評”:黨媒評論的可視化創新
傳媒評論(2019年4期)2019-07-13 05:49:14
主站蜘蛛池模板: 国产精品原创不卡在线| 呦系列视频一区二区三区| 国产亚洲美日韩AV中文字幕无码成人 | 伊人成人在线| 日韩精品亚洲精品第一页| 中文字幕资源站| 久久精品aⅴ无码中文字幕| 精品久久久无码专区中文字幕| 国产女人在线观看| 亚洲欧美日韩天堂| 精品福利网| 亚洲男人的天堂在线观看| 亚洲精品自拍区在线观看| 1769国产精品免费视频| WWW丫丫国产成人精品| 香蕉久人久人青草青草| 欧美天堂在线| 午夜视频免费试看| 国产在线观看99| 国产精品亚洲а∨天堂免下载| 在线观看欧美精品二区| 国产青榴视频| 久草美女视频| 国产99视频精品免费观看9e| 91久久精品日日躁夜夜躁欧美| 91青青视频| 精品国产99久久| 五月天天天色| 国产精品美女免费视频大全 | 又爽又黄又无遮挡网站| 午夜欧美理论2019理论| 国国产a国产片免费麻豆| 91色爱欧美精品www| 国产精品亚洲精品爽爽| 国产熟睡乱子伦视频网站| 91精品视频播放| 午夜精品久久久久久久99热下载| 亚洲婷婷丁香| 亚洲a级在线观看| 国产人人干| 亚洲人网站| 欧美日韩精品一区二区在线线 | 欧美中文字幕在线播放| 欧美成人二区| 亚洲人成网站18禁动漫无码| 国禁国产you女视频网站| 国产精品冒白浆免费视频| 内射人妻无码色AV天堂| 久久狠狠色噜噜狠狠狠狠97视色| 国产网站黄| 国产成人精品免费视频大全五级| av在线无码浏览| 亚洲精品在线91| 亚洲经典在线中文字幕| 国产精品大尺度尺度视频| 亚洲a免费| 久久毛片网| 九九久久精品国产av片囯产区| 国产精品无码一区二区桃花视频| 久久黄色一级视频| 国产一级毛片在线| 国产第二十一页| 久久这里只有精品23| 综合天天色| 国产亚洲精品自在久久不卡 | 久久国产精品麻豆系列| 国产精品一区在线观看你懂的| 噜噜噜久久| 免费无码又爽又刺激高| 久久久国产精品免费视频| 日本AⅤ精品一区二区三区日| 国产黑丝视频在线观看| 亚洲欧美在线精品一区二区| 国产精品yjizz视频网一二区| 91久久大香线蕉| 亚洲二区视频| 国产成人免费高清AⅤ| 一本久道久久综合多人| 国产成人无码AV在线播放动漫| 人人澡人人爽欧美一区| 中文字幕在线播放不卡| 国产无码高清视频不卡|