基於Skyline 3D 重寫量測功能

2022-01-26 07:33:18 字數 2049 閱讀 1147

最近在做乙個大屏展示系統,使用skyline 進行三維地圖展示。由於skyline 自帶的量測功能(面積量測、水平量測)在大屏上字型非常小,看不清楚,所以自己重寫了量測的功能。

實現了可以根據螢幕解析度設定量測線線寬的大小以及量測結果字型的自定義設定。(另外skyline 在大屏展示的效率實在不敢恭維,有時間再寫一下skyline在大屏展示的優化歷程)

拿乙個水平量測的來舉例:關鍵事件:onlbuttondown、onrightbuttonup 和onframe事件

onlbuttondown 事件主要用於開始點選三維場景時進行量測線段的生成,以及第二次點選之後結束第一段量測

onlbuttondown: function (flags, x, y)

else //點選第二次以後

return true;

}onrightbuttondup 主要是結束整個繪製事件(量測可能同時量測多段)

onrbuttonup: function (flags, x, y)

_vecmeasure.mlistpoints.splice(0, _vecmeasure.mlistpoints.length);

_vecmeasure.templine = null;

_vecmeasure.bfirstclick = true;

return true;

}onframe 主要是根據滑鼠位置實時修改量測線的位置

onframe: function ()

else if (_vecmeasure.mlistpoints.length == 6)

//var centerpoint = polygongeomety.centroid;

var alt = _vecmeasure.mlistpoints[2] + 1.5;

//自定義根據解析度設定線寬,字型大小等

var lbx = (resultlinegeo.startpoint.x + resultlinegeo.endpoint.x) * 0.5;

var lby = (resultlinegeo.startpoint.y + resultlinegeo.endpoint.y) * 0.5;

var sposition = _vecmeasure.sgworld.creator.createposition(lbx, lby, alt, 3, 0, 0, 0, 0);

var slabelstyle = _vecmeasure.sgworld.creator.createlabelstyle(0);

slabelstyle.textcolor.fromargbcolor(0x7fffff00);

slabelstyle.maxviewingheight = 15000;

var arealabel = _vecmeasure.sgworld.creator.createlabel(sposition, showtext, "", slabelstyle, groupid, "");

//建立一條線,起點和終點是相同的

var linearray = [

_vecmeasure.mlistpoints[3],

_vecmeasure.mlistpoints[4],

_vecmeasure.mlistpoints[5],

_vecmeasure.mlistpoints[3],

_vecmeasure.mlistpoints[4],

_vecmeasure.mlistpoints[5]];

var geometryline = _vecmeasure.sgworld.creator.geometrycreator.createlinestringgeometry(linearray);

_vecmeasure.mlistpoints.splice(0, 3);

_vecmeasure.templine = _vecmeasure.sgworld.creator.createpolyline(geometryline, nlinecolor, 3, groupid, "臨時線");}}

}},

基於uinty3D製作 奇幻森林

人物系統 控制角色 能實現簡單的移動,跳躍,攻擊 近戰敵人 當人物走進他的攻擊範圍,就會追隨人物,對人物進行攻擊 遠端敵人 當人物走進他的攻擊範圍,它會突出硫酸,對人物進行遠端攻擊,當人物靠近時候,它會遠離人物,一定距 離後在進行攻擊。boss 分為兩種攻擊模式,遠端能釋放榴彈炮,近戰能有一小段的無...

在基於shader的D3D程式中實現2D面板

3d遊戲中,很多東西都需要以2d的形式展現,比如人物的狀態列,物品欄等,那麼如何才能在3d場景中放置它們呢?我在這裡介紹一種通過簡化變換過程而實現的方法.大家知道,乙個模型頂點在顯示到螢幕上,一共要經過4次變換,分別是世界變換,攝象機變換,投影變換以及視口變換.在世界變換中,我們通過乙個仿射矩陣把這...

3D相機如何獲取基於立體視覺的3D資料

本文概述了使用立體相機獲取深度感知的主要處理步驟。立體視覺的深度感知基於三角測量原理。我們講兩台搭載投影光學系統的相機併排放置,使兩台相機的視野在所需物距發生重疊。我們通過這兩台相機的拍攝,可以得到兩個不同角度下的場景圖。如圖1所示。物體在圓錐筒前面,圓錐筒散落排列。在3d空間內,兩幅影象中的每乙個...