// 从这里开始 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 = "
阅行客 提供技术支持!
"; 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(); });