|
|
// 从这里开始
var h1 = null; var oldtransformNodex = null; var drag = null; var notmoveGroup = null; var movedGroup = null;
var movesingle = false;
BABYLON.DefaultLoadingScreen.prototype.displayLoadingUI = function() { if (document.getElementById("customLoadingScreenDiv")) { document.getElementById("customLoadingScreenDiv").style.display = "initial";
return; } this._loadingDiv = document.createElement("div"); //this._loadingDiv.style.height = '1750px';
this._loadingDiv.id = "customLoadingScreenDiv";
thecss = "lohingifpc"; thecss2 = "zcpc";
this._loadingDiv.innerHTML = "<div class='oka'><div class='" + thecss + "'><image src='./logok.gif' class='jiazaiimg'/></div><div class='" + thecss2 + "'>由 <image class='feitimg' src='./img/yxlogo.png'/> 阅行客 提供技术支持!</div></div>";
this._resizeLoadingUI(); window.addEventListener("resize", this._resizeLoadingUI); document.body.appendChild(this._loadingDiv); };
var movebyName = function(nodeName) { var x = scene.getTransformNodeByName(nodeName); moveTrans(x); };
var moveTrans = function(move_transformNode) { console.log("选中") console.log(move_transformNode.name);
if (movesingle == false) { movesingle = true; var tempstr = move_transformNode.name.replace("档案柜", ""); var tempNum = parseInt(tempstr); if (move_transformNode.movex == "false") { for (var MoveNum = tempNum - 1; MoveNum >= 0; MoveNum--) { var tempNode = notmoveGroup[MoveNum]; if (tempNode.movex == "false") { // console.log(tempNode.name);
// console.log(tempNode.movex);
const frameRate = 10;
const xSlide = new BABYLON.Animation( "xSlide", "position.y", frameRate, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT );
const keyFrames = [];
keyFrames.push({ frame: 0, value: tempNode.position.y });
keyFrames.push({ frame: frameRate, value: tempNode.position.y - 653 });
xSlide.setKeys(keyFrames);
tempNode.animations.push(xSlide);
scene.beginAnimation(tempNode, 0, frameRate, false); tempNode.movex = "true"; } } } else { for (var MoveNum = tempNum - 1; MoveNum <= 9; MoveNum++) { var tempNode = notmoveGroup[MoveNum]; if (tempNode.movex == "true") { // console.log(tempNode.name);
// console.log(tempNode.movex);
const frameRate = 10;
const xSlide = new BABYLON.Animation( "xSlide", "position.y", frameRate, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT );
const keyFrames = [];
keyFrames.push({ frame: 0, value: tempNode.position.y });
keyFrames.push({ frame: frameRate, value: tempNode.position.y + 653 });
xSlide.setKeys(keyFrames);
tempNode.animations.push(xSlide);
scene.beginAnimation(tempNode, 0, frameRate, false); tempNode.movex = "false"; } } }
setTimeout(function() { movesingle = false; }, 2000); } };
BABYLON.DefaultLoadingScreen.prototype.hideLoadingUI = function() { document.getElementById("customLoadingScreenDiv").style.display = "none"; document.getElementById("customLoadingScreenDiv_first").style.display = "none"; document.title = "密集架";
scene.getMaterialByName("材质.001").alpha = 0.4; //地面
scene.getMeshByName("地面").material.bumpTexture = null; scene.getMeshByName("地面").material.metallic = 0; scene.getMeshByName("地面").material.roughness = 1;
//箱体去掉反光
scene.getMaterialByName("材质.004").metallic = 0; scene.getMaterialByName("材质.004").roughness = 1;
notmoveGroup = [ scene.getTransformNodeByName("档案柜01"), scene.getTransformNodeByName("档案柜02"), scene.getTransformNodeByName("档案柜03"), scene.getTransformNodeByName("档案柜04"), scene.getTransformNodeByName("档案柜05"), scene.getTransformNodeByName("档案柜06"), scene.getTransformNodeByName("档案柜07"), scene.getTransformNodeByName("档案柜08"), scene.getTransformNodeByName("档案柜09"), scene.getTransformNodeByName("档案柜10") ];
notmoveGroup.forEach(function(item, index, arr) { if (item.name == "档案柜10") { item.movex = "NotMove"; //设置movex
} else { item.movex = "false"; //设置movex
} });
h1 = new BABYLON.HighlightLayer("hl1", scene); var prepareGroupButton = function(transformNodex, color) { var mesheses = null; if (transformNodex.getClassName() == "TransformNode") { mesheses = transformNodex.getChildMeshes(false); } else { mesheses = []; mesheses.push(transformNodex); }
for (var i = 0; i < mesheses.length; i++) { mesheses[i].actionManager = new BABYLON.ActionManager(scene); var theScaling = mesheses[i].scaling; if (true) { try { mesheses[i].actionManager.registerAction( new BABYLON.InterpolateValueAction( BABYLON.ActionManager.OnPointerOutTrigger, mesheses[i], "scaling", new BABYLON.Vector3(theScaling.x, theScaling.y, theScaling.z), 100 ) ); mesheses[i].actionManager.registerAction( new BABYLON.InterpolateValueAction( BABYLON.ActionManager.OnPointerOverTrigger, mesheses[i], "scaling", new BABYLON.Vector3( theScaling.x * 1.01, theScaling.y * 1.01, theScaling.z * 1.01 ), 100 ) ); } catch (error) { //alert(error)
} }
mesheses[i].actionManager.registerAction( new BABYLON.ExecuteCodeAction( { trigger: BABYLON.ActionManager.OnPickTrigger, parameter: "" }, function() { if (oldtransformNodex != null) { if (transformNodex.name == oldtransformNodex.name) { //移动:
moveTrans(transformNodex); console.log('transformNodex') console.log(transformNodex.movex) console.log(transformNodex.name) console.log("移动") console.log(oldtransformNodex.name); } } if (true) { try { if (oldtransformNodex != null) { oldtransformNodex.removeBehavior(drag); var mesheses2 = null; if (oldtransformNodex.getClassName() == "TransformNode") { mesheses2 = oldtransformNodex.getChildMeshes(false); } else { mesheses2 = []; mesheses2.push(oldtransformNodex); } for (var i = 0; i < mesheses2.length; i++) { try { h1.removeMesh(mesheses2[i]); } catch (error) { // alert(error)
} } }
oldtransformNodex = transformNodex; //transformNodex.addBehavior(drag);
var mesheses3 = null; if (transformNodex.getClassName() == "TransformNode") { mesheses3 = transformNodex.getChildMeshes(false); } else { mesheses3 = []; mesheses3.push(transformNodex); } for (var i = 0; i < mesheses3.length; i++) { try { h1.addMesh(mesheses3[i], BABYLON.Color3.White()); } catch (error) { // alert(error)
} } } catch (error) { // alert(error)
} } } ) ); } };
var dag1 = scene.getTransformNodeByName("档案柜01"); var dag2 = scene.getTransformNodeByName("档案柜02"); var dag3 = scene.getTransformNodeByName("档案柜03"); var dag4 = scene.getTransformNodeByName("档案柜04"); var dag5 = scene.getTransformNodeByName("档案柜05"); var dag6 = scene.getTransformNodeByName("档案柜06"); var dag7 = scene.getTransformNodeByName("档案柜07"); var dag8 = scene.getTransformNodeByName("档案柜08"); var dag9 = scene.getTransformNodeByName("档案柜09"); var dag10 = scene.getTransformNodeByName("档案柜10");
prepareGroupButton(dag1, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag2, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag3, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag4, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag5, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag6, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag7, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag8, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag9, BABYLON.Color3(1, 0, 0)); prepareGroupButton(dag10, BABYLON.Color3(1, 0, 0)); }; // createScene function that creates and return the scene
var createScene = function() { engine.displayLoadingUI(); // 创建一个场景并返回
var scene = new BABYLON.Scene(engine); //scene.debugLayer.show();
// 创建一个弧形旋转摄像机
var camera = new BABYLON.ArcRotateCamera( "Camera", 0, 0, 5, new BABYLON.Vector3(0, -1, 0), scene ); camera.setTarget(new BABYLON.Vector3(2, 4, 1)); // 让摄像机控制画布.
camera.attachControl(canvas, true); camera.lowerRadiusLimit = 2.0; // 这里是最大的位置,值越大,物体越小
camera.upperRadiusLimit = 14; camera.radius = 16; camera.alpha = (Math.PI * -211.4) / 180; camera.beta = (Math.PI * 66) / 180; camera.inertia = 0.1; // 缩放的快慢
camera.useAutoRotationBehavior = true; // 自动旋转
camera.panningDistanceLimit = 2; //平移半径
camera.panningInertia = 0; camera.autoTransitionRange = 1; camera.pinchToPanMaxDistance = 0.1; camera.pinchDeltaPercentage = 0.001; camera.useAutoRotationBehavior = false;
scene.activeCamera = camera; scene.activeCamera.useInputToRestoreState = true; var camera1_status = scene.activeCamera.storeState();
var assetsManager = new BABYLON.AssetsManager(scene); var meshTask = assetsManager.addMeshTask( "skull task", "", "asset/", "mjj.glb" );
meshTask.onSuccess = function(task) { task.loadedMeshes[0].scaling = new BABYLON.Vector3(0.2, 0.2, -0.2); task.loadedMeshes[0].position = new BABYLON.Vector3(0.0, 3.952, 2.129); }; meshTask.onError = function(task, message, exception) { console.log(message, exception); };
var hdrTexture = new BABYLON.CubeTexture.CreateFromPrefilteredData( "textures/environmentSpecular.env", scene ); scene.environmentTexture = hdrTexture; // 改变场景背景颜色 - 背景颜色opacity值设为0,达到透明背景的效果
scene.clearColor = new BABYLON.Color4(0, 0, 0, 0);
// renderCanvas.style.backgroundImage = 'url("./textures/' + "4" + '.jpg")';
// renderCanvas.style.backgroundColor = 'yellow';
assetsManager.load();
drag = new BABYLON.PointerDragBehavior({ dragPlaneNormal: new BABYLON.Vector3(0, 0, 1) }); //drag.useObjectOrienationForDragging = false;
drag.validateDrag = targetPosition => { console.log(targetPosition); if (targetPosition.x > 10.5 || targetPosition.x < -10.5) { return false; } if (targetPosition.z > 10.5 || targetPosition.z < -10.5) { return false; } if (oldtransformNodex != null) { return true; } }; drag.onDragEndObservable.add(event => { console.log("dragEnd"); //console.log(event);
//console.log(line03_position)
});
//GUI
h1 = new BABYLON.HighlightLayer("hl1", scene); var step = 0.1; var currentx = 1; scene.registerAfterRender(() => { h1.blurHorizontalSize = h1.blurVerticalSize + currentx; var a = scene.getMaterialByName("carpaint_baseRed");
if (a != null) { if (a.albedoColor == b) { b = new BABYLON.Color3(0, 1, 0); a.albedoColor = b; } }
if (currentx > 0.3) { step *= -1; } if (currentx < 0) { step *= -1; } currentx += step; });
return scene; };
// 创建画布
var canvas = document.getElementById("renderCanvas"); canvas.textAlign = "center" canvas.textBaseline = "middle" // 创建渲染引擎
var engine = new BABYLON.Engine(canvas, true, { stencil: true });
// call the createScene function
var scene = createScene(); scene.autoClear = true; scene.imageProcessingConfiguration.exposure = 1.0; scene.imageProcessingConfiguration.contrast = 1; scene.environmentIntensity = 1; // 不停的渲染场景. runRenderLoop 是一个渲染循环
engine.runRenderLoop(function() { scene.render(); });
window.addEventListener("resize", function() { engine.resize(); });
|