import * as THREE from 'three'; // import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'; import MyTexture from "./../images/result.png"; import MyDepth from "./../images/depth.png"; import './App.css'; const renderer = new THREE.WebGLRenderer({ antialias: true }); function Render3D(isVisible) { let mesh; let material; let image_ar; const settings = { metalness: 0.0, roughness: 0.14, ambientIntensity: 0.85, displacementScale: 5, displacementBias: -0.5, // emissive: 0xffffff, }; // init const camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 1000); camera.position.z = 8.5; const scene = new THREE.Scene(); // const ambientLight = new THREE.AmbientLight( 0xffffff, 4 ); // scene.add( ambientLight ); // const pointLight = new THREE.PointLight( 0xff0000, 1 ); // pointLight.position.z = 2500; // scene.add( pointLight ); scene.background = new THREE.Color( 0xffffff ); // const renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( window.innerWidth/2, window.innerHeight/2 ); renderer.setAnimationLoop( animation ); // renderer.toneMapping = THREE.ACESFilmicToneMapping; // renderer.toneMappingExposure = 1; // renderer.outputColorSpace = THREE.SRGBColorSpace; document.body.appendChild( renderer.domElement ) // animation window.addEventListener("mousemove", onmousemove, false); var plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0.5); // it's up to you how you will create THREE.Plane(), there are several methods var raycaster = new THREE.Raycaster(); //for reuse var mouse = new THREE.Vector2(); //for reuse var intersectPoint = new THREE.Vector3();//for reuse function onmousemove(event) { //get mouse coordinates mouse.x = (event.clientX / window.innerWidth) - 1; mouse.y = -(event.clientY / window.innerHeight)- 1; raycaster.setFromCamera(mouse, camera);//set raycaster raycaster.ray.intersectPlane(plane, intersectPoint); // find the point of intersection mesh.lookAt(intersectPoint); // face our arrow to this point } function animation( time ) { renderer.render( scene, camera ); } function onWindowResize() { const aspect = window.innerWidth / window.innerHeight; camera.aspect = aspect; camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth/2, window.innerHeight/2 ); } window.addEventListener( 'resize', onWindowResize ); // orbit controls // const controls = new OrbitControls( camera, renderer.domElement ); // controls.enableZoom = false; // controls.enableDamping = false; const image = new Image(); const image2 = new Image(); (image.onload) = function() { if (mesh) { mesh.geometry.dispose(); mesh.material.dispose(); scene.remove( mesh ); } image_ar = image.width / image.height ; const ctx = document.createElement('canvas').getContext('2d'); ctx.canvas.width = image.width; ctx.canvas.height = image.height; ctx.drawImage(image, 0, 0); const myrgbmap = new THREE.CanvasTexture(ctx.canvas); const ctx2 = document.createElement('canvas').getContext('2d'); ctx2.canvas.width = image2.width; ctx2.canvas.height = image2.height; ctx2.drawImage(image2, 0, 0); const mydepthmap = new THREE.CanvasTexture(ctx2.canvas); // material material = new THREE.MeshStandardMaterial( { color: 0xaaaaaa, map: myrgbmap, displacementMap: mydepthmap, emissive: 0xffffff, emissiveIntensity: 0.9, emissiveMap : myrgbmap, roughness: settings.roughness, metalness: settings.metalness, displacementScale: settings.displacementScale, displacementBias: settings.displacementBias, side: THREE.DoubleSide } ); // generating geometry and add mesh to scene const geometry = new THREE.PlaneGeometry( 10, 10, 512, 512 ); mesh = new THREE.Mesh( geometry, material ); mesh.scale.y = 1.0 / image_ar; mesh.scale.multiplyScalar( 0.5); scene.add( mesh ); } image.src = MyTexture; image2.src = MyDepth; } function Viewer3D({ isVisible }) { // console.log("called ") renderer.clear(); renderer.setSize( 0, 0); return ( <> {isVisible ? (
) : null} {/* */} ); } export default Viewer3D;