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); }