init(); update(); var controls; var scene; var gltf_dom2; var gltf_dom = new THREE.Group(); var newMaterial; var shadowM; var pngCubeRenderTarget, pngCubeRenderTarget2; var torusMesh, torusMesh2, torusMesh3; const params = { roughness: 0.15, metalness: 0.27, exposure: 1.0, envMapIntensity: 1.3, bumpScale: 1, }; const pmremGenerator = new THREE.PMREMGenerator(renderer); pmremGenerator.compileEquirectangularShader(); function init () { var container = document.getElementById('modelBorderContainer'); // 场景 scene = new THREE.Scene(); //const axesHelper = new THREE.AxesHelper( 500 ); //scene.add( axesHelper ); // let hdrEquirect = new THREE.TextureLoader().load( "img/bg.jpg" ); // scene.background = hdrEquirect; scene.background = new THREE.Color('#000000'); // 相机 camera = new THREE.PerspectiveCamera(30, window.innerWidth / window.innerHeight, 1, 1000); camera.lookAt(0, 0, 0); camera.position.set(100, 50, -100); scene.add(camera) // 渲染器 renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); var demobox = document.getElementById("modelBorderContainer") if ($(window).width() <= 768) { renderer.setSize(demobox.clientWidth, 400); } else { renderer.setSize(demobox.clientWidth, demobox.clientHeight); } renderer.setPixelRatio(window.devicePixelRatio); canvas = renderer.domElement container.appendChild(renderer.domElement); renderer.toneMapping = THREE.ACESFilmicToneMapping; renderer.outputEncoding = THREE.sRGBEncoding; camera.aspect = canvas.offsetWidth / canvas.offsetHeight; camera.updateProjectionMatrix(); // 光 const light = new THREE.AmbientLight(0xffffff, 0.3); // soft white light scene.add(light); // 控制器 controls = new THREE.OrbitControls(camera, renderer.domElement); controls.enablePan = false; controls.enableZoom = false; initGlobe(); } function initGlobe () { const pmremGenerator = new THREE.PMREMGenerator(renderer); pmremGenerator.compileEquirectangularShader(); var GLTFloader = new THREE.GLTFLoader(); new THREE.TextureLoader().load('https://omo-oss-file.thefastfile.com/portal-saas/new2022090221040659326/cms/image/ee3cb005-667d-4362-b1f4-86652e0dffc0.jpg', function (texture) { pngCubeRenderTarget2 = texture }) new THREE.TextureLoader().load('https://omo-oss-file.thefastfile.com/portal-saas/new2022090221040659326/cms/image/c260468c-ea3d-47db-a66d-f4f4176d6f7b.png', function (texture) { texture.mapping = THREE.EquirectangularReflectionMapping; texture.encoding = THREE.sRGBEncoding; pngCubeRenderTarget = pmremGenerator.fromEquirectangular(texture); GLTFloader.load('https://omo-oss-file.thefastfile.com/portal-saas/new2022090221040659326/cms/file/280cb9fa-789c-4150-b54d-026566355fa7.glb?cmsTs=1676086028573', function (gltf) { gltf_dom2 = gltf.scene; gltf_dom2.position.y = -30; gltf_dom2.scale.multiplyScalar(30); gltf_dom2.traverse(function (node) { if (node instanceof THREE.Mesh) { node.material.envMap = pngCubeRenderTarget.texture; node.material.envMapIntensity = params.envMapIntensity; } }) torusMesh = gltf_dom2.getObjectByName("调整方案一(4A187915-F398-43E5-9D02-DDF24BF85A4C)"); torusMesh.material.roughness = params.roughness; torusMesh.material.metalness = params.metalness; torusMesh.material.envMapIntensity = params.envMapIntensity; torusMesh.material.bumpScale = params.bumpScale; torusMesh.material.normalScale = new THREE.Vector2(3, 3); let newEnvMap = torusMesh.material.envMap; newEnvMap = pngCubeRenderTarget.texture; newstexture = pngCubeRenderTarget2; torusMesh.material.envMap = newEnvMap; torusMesh.material.map = newstexture; renderer.toneMappingExposure = params.exposure; torusMesh.material.needsUpdate = true; torusMesh2 = gltf_dom2.getObjectByName("调整方案一(E386BC79-3057-4E52-BA81-CCD878188931)"); torusMesh2.material.envMapIntensity = 4; torusMesh2.material.needsUpdate = true; torusMesh3 = gltf_dom2.getObjectByName("调整方案一(3F576522-121D-4794-97BB-928DC60EA76D)"); torusMesh3.material.emissive.setHex(0xffffff); torusMesh3.material.needsUpdate = true; scene.add(gltf_dom2); }, function (xhr) { $('.loading').html('loading... ' + Math.ceil(xhr.loaded / xhr.total * 100) + '%') console.log(Math.ceil(xhr.loaded / xhr.total * 100) + '% loaded'); if ((xhr.loaded / xhr.total * 100) > 99) { $('.loading').fadeOut() } }) }); var planeGeometry = new THREE.PlaneBufferGeometry(160, 140); const mirror = new THREE.Reflector(planeGeometry, { clipBias: 0.003, textureWidth: window.innerWidth * window.devicePixelRatio, textureHeight: window.innerHeight * window.devicePixelRatio, color: new THREE.Color(0x333333), }); mirror.position.y = -30.2; mirror.rotation.x = -0.5 * Math.PI; scene.add(mirror); } var rotating = false; function update () { if (gltf_dom2) { if (rotating) { gltf_dom2.rotation.y += 0.05 } else { gltf_dom2.rotation.y = gltf_dom2.rotation.y; } } requestAnimationFrame(update); renderer.render(scene, camera); } //pauseRotation(); function pauseRotation () { var modelBorder = $("#container"); modelBorder.on("mouseenter", function (event) { rotating = false; }); modelBorder.on("mouseleave", function (event) { rotating = true; }); modelBorder.on('touchmove', function (e) { rotating = false; }, false); modelBorder.on('touchstart', function (e) { rotating = false; }, false); modelBorder.on('touchend', function (e) { rotating = true; }, false); }