基於 HTML5 WebGL 的醫療物流系統

2022-05-27 12:03:09 字數 4263 閱讀 3126

物聯網( iot ),簡單的理解就是物體之間通過網際網路進行鏈結。世界上的萬事萬物,都可以通過資料的改變進行智慧型化管理。iot 的興起在醫療行業中具有拯救生命的潛在作用。

不斷的收集使用者資訊並且實時的進行診斷,所以未來  iot 肯定在醫療行業的應用會呈覆蓋性。下面是我最近做的乙個醫療物流系統,用來觀察醫療物流過程。

整個原場景其實是非常暗的,所以需要使用燈光的效果照亮整個場景,使其接近真實世界的場景。

我們看下對比。

light的一些屬性:

type代表燈光的型別

color代表燈光的顏色

intensity代表燈光的強度(1是最大值)

range代表範圍

addlight() 

light.s(config)

light.p3(lightsource)

this

.dm.add(light)

}

看到左下角的乙個小視窗,其實是另乙個3d場景,把它定位到左下角的,兩個場景都使用了反序列化(deserialize)。

因為要定位醫療箱移動,所以這裡使用到了flyto方法 。

var rendercanvas = function

(medical, duration) ,

action(v, t) )}})

}

如果要實現這麼多的動畫,首先想到的是乙個個物體進行移動的過程。醫療箱的行走、電梯的公升降、傳送帶運送醫療箱等我們都可以對它們的動作進行封裝。

如圖可以看到醫療箱總是在動,所以定義了乙個行走的動畫,每次醫療箱行走的距離、行走方向、動畫的配置都進行傳參。

這裡要說明的引數:

1.node(對應的元素)

2.fn(動畫執行完進行**的函式)

3.config(動畫配置)

4.coord(方向軸)

//

行走動畫

walkanim(node, fn, config, coord) =config

const positionarray =node.p3()

let isshadow = false

let shadownode = null

//如果移動的元素是icu車或者**車的話 獲取它的陰影跟隨元素移動

if (node.gettag() === 'supply' || node.gettag() === 'icucar') shadow`)

}ht.default.startanim(,

action(v, t)

else

if (coord === 'y')

else

},finishfunc() })}

電梯的公升降會影響很多東西,比如頻台的移動會帶著傳送帶和醫療箱,這裡我用到了sethost吸附方法(吸附:節點指定宿主,宿主進行改變會影響節點)。

很多場景下非常合適,我需要電梯公升降的過程中帶用醫療箱和頻台一起上公升,還有醫療箱放到傳送帶的時候,醫療箱要動起來,感覺是這真的傳送帶在帶動醫療箱進行運動。

這裡要說明的引數:

1.node(操作的電梯元素)

2.medicalkit(醫療箱)

3.fn(動畫執行完進行**的函式)

4.status(電梯上公升和下降的狀態)

5.config(動畫配置)

//

電梯公升降動畫

elevatoranim(node, medicalkit, fn, status, config) `)

//吸附宿主

station.sethost(node)

medicalkit.sethost(node)

//設定公升降狀態

if (elevatorindex === 3) self.elevatorrunning = true

//公升降距離 status 為 0 的時候是下降 最低部位的距離是固定的 所以只需要控制上公升的距離

const medicalkitlevel =self.returnmedicalkitlevel(medicalkitindex)

//電梯的屬性

//最低點的位置 lowest

//如果有軌道的話 就去軌道的位置 否則就按照層數 orbitalp

//第一層的位置 distance

let space

const addspace = medicalkitindex === 7 ? 100 : 0

if (status == 1)

else

//下降狀態時 醫療箱不會做動作

if (status === 0)

return

ht.default.startanim(,

finishfunc() })}

動畫的過程中有個問題需要處理就是等待電梯的動畫,醫療箱在動畫過程中,需要判斷電梯是否在上公升,如果不在地面的話,需要等待。

我的思路是,當醫療箱走到離電梯一點距離的時候,需要判斷電梯是否在上公升狀態,如果是的話,需要呼叫動畫暫停的方法。

elevatorrunning為false 的時候代表電梯沒有運動,否則在運動中。

電梯動畫開始的時候設定為 true,結束後設定變數為 false,  就可以監控它的狀態了。

ht.default.startanim方法返回乙個例項,利用action方法, 實現輪詢監聽動畫狀態,然後進行操作。

elevatorrunning為 true 的話, 使用anim.

pause()暫停當前動畫。

elevatorrunning為 false 的話, 使用anim.resume()繼續當前動畫。

const anim =ht.default.startanim(

}, 100);}}

},finishfunc()

});

因為需要監聽某個當前動畫的結束,然後進行相機位移。

如圖,我需要監聽第乙個 3d 場景中顯示提示文字動畫結束,然後執行第二個 3d 場景的顯示。因為2個是不同的場景,是不能用**的方法監聽到的,所以這裡就用到了eventbus事件匯流排。

下面是eventbus的使用,第乙個引數代表要監聽的註冊函式名,第二個是**函式。

//

事件匯流排 監聽事件

eventbus.on('animation1', _ =>)

下面是eventbus發射的使用,第乙個引數代表要觸發的函式名,第二個是發射給函式的引數。

//

觸發事件

eventbus.emit("animation1", null

);

做完這個 demo 之後,除了對 ht for web 更加熟練之外,對物聯網也有了更深刻的概念。

我身為一名前端工作者,在這個時代感覺非常的自豪,因為我能通過自己的技能創造出許多能造福和改善人們生活的東西。

希望大家看到我的 demo 能夠得到一些啟發,同時也要相信自己能夠創造不可能,為社會做出貢獻。

基於 HTML5 WebGL 的 3D 機房

用 webgl 渲染的 3d 機房現在也不是什麼新鮮事兒了,這篇文章的主要目的是說明一下,3d 機房中的 eye 和 center 的問題,剛好在專案中用上了,好生思考了一番,最終覺得這個例子最符合我的要求,就拿來作為記錄。這個 3d 機房的 demo 做的還不錯,比較美觀,基礎的互動也都滿足,接下...

基於 HTML5 WebGL 的 3D 機房

用 webgl 渲染的 3d 機房現在也不是什麼新鮮事兒了,這篇文章的主要目的是說明一下,3d 機房中的 eye 和 center 的問題,剛好在專案中用上了,好生思考了一番,最終覺得這個例子最符合我的要求,就拿來作為記錄。這個 3d 機房的 demo 做的還不錯,比較美觀,基礎的互動也都滿足,接下...

使用 HTML5 WebGL 實現逼真的雲朵效果

這裡給大家展示乙個使用 html5 webgl 實現超逼真的雲朵效果。webgl是一項在網頁瀏覽器呈現3d畫面的技術,有別於過去需要安裝瀏覽器外掛程式,通過 webgl 的技術,只需要編寫網頁 即可實現3d影象的展示。webgl 可以為 html5 canvas 提供硬體3d加速渲染,這樣web開發...