MMSDT.mapped3to2()
三维坐标映射二维坐标,使二维div浮于指定三维目标上
构造函数
MMSDT.mapped3to2( position: array )
position - 当前坐标数组,[x,y,z]。
实时返回二维坐标,x对应left,y对应bottom,'null'在视野外了
代码示例
html代码:
<body>
<div class="infoBox">
①号出口<br>通往道门口、通远门
</div>
<div class="infoBox">
②号出口<br>通往正大商场、中华路
</div>
<div class="infoBox">
③号出口<br>通往朝天门码头、来福士
</div>
<div class="infoBox">
④号出口<br>通往临江门、洪崖洞
</div>
</body>
js代码:
var MMS3D_exceptionMesh = []; //需要材质拆分的网格
var MMS3D_instancingMesh = []; //合并实例化网格
//初始化场景
MMSDT.initScene( false, MMS3D_exceptionMesh, MMS3D_instancingMesh );
//设置第3人称鼠标控制器
controls3.maxPolarAngle = Math.PI*0.49; //向下,最大角度限制
controls3.maxDistance = 500; //最远距离限制
controls3.screenSpacePanning = false; //右键平移是否上下移动
controls3.enableDamping = true; //是否开启惯性阻尼
controls3.dampingFactor = 0.1; //惯性阻尼系数
controls3.autoRotateSpeed = 2; //自动旋转速度
controls3.autoRotate = true; //是否开启自动旋转
//使用json文件让场景还原
MMSDT.onloadScene( "models/mms3D_dtz1.json", function(progress){
if( progress == 'done' ){
//加载完成,播放动画
for( var i=0; i<actions[0].length; i++ ){
actions[0][i].play();
actions[0][i].timeScale = 0.5;
}
}else if( progress == 'ok' ){
//渲染完成
}else{
//显示进度条数字
document.getElementById("loadNum").innerHTML = Math.round( progress )+'%';
}
});
var displayEnabled = true;
var info = [
[ [-60,7,0], 'infoBox' ], //对应的三维坐标位置, ClassName 或 Id
[ [8,7,0], 'infoBox' ],
[ [77,7,0], 'infoBox' ],
[ [145,7,0], 'infoBox' ]
]
//监听鼠标控制器动作
controls3.addEventListener( 'change', function(){
if( displayEnabled == true ){ //div有效时才跟随
for( let i=0; i<info.length; i++ ){
//把三维坐标转换成二维坐标
let vector = MMSDT.mapped3to2( info[i][0] );
if( vector == 'null' ){
//坐标点不在视野内,就隐藏信息
document.getElementsByClassName( info[i][1] )[i].style.display = 'none';
}else{
//坐标点在视野内,就实时改变对应的二维div的位置
document.getElementsByClassName( info[i][1] )[i].style.display = 'block';
document.getElementsByClassName( info[i][1] )[i].style.bottom = vector.y + 20 + "px";
document.getElementsByClassName( info[i][1] )[i].style.left = vector.x - 90 + "px";
};
}
}
});
//自定义对外函数接口------------------------------------------------------------------------
//显示隐藏
MMAPI.display = function(){
displayEnabled = !displayEnabled;
if( displayEnabled == false ){
for( let i=0; i<document.getElementsByClassName( "infoBox" ).length; i++ ){
document.getElementsByClassName( "infoBox" )[i].style.display = 'none';
}
}
}
点击查看示例演示 →
Powered by mms3D