Guest User

Untitled

a guest
May 7th, 2020
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5.     <meta charset="utf-8">
  6.     <title>demoFBX</title>
  7.     <style>
  8.         body {
  9.             margin: 0;
  10.         }
  11.  
  12.         canvas {
  13.             display: block;
  14.         }
  15.     </style>
  16. </head>
  17.  
  18. <body>
  19.     <script type="module">
  20.  
  21.         import * as THREE from 'https://unpkg.com/three@0.115.0/build/three.module.js';
  22.         import { OrbitControls } from 'https://unpkg.com/three@0.115.0/examples/jsm/controls/OrbitControls.js';
  23.         import { FBXLoader } from 'https://unpkg.com/three@0.115.0/examples/jsm/loaders/FBXLoader.js';
  24.  
  25.         var scene, camera, controls, raycaster, mouse, renderer, materials;
  26.  
  27.         init();
  28.         animate();
  29.  
  30.         function init() {
  31.  
  32.             scene = new THREE.Scene();
  33.             camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 2000);
  34.             camera.position.z = 400;
  35.  
  36.             {
  37.                 var skyColor = 0xB1E1FF;  // light blue
  38.                 var groundColor = 0xB97A20;  // brownish orange
  39.                 var intensity = 1;
  40.                 var light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
  41.                 scene.add(light);
  42.             }
  43.  
  44.             {
  45.                 var color = 0xFFFFFF;
  46.                 var intensity = 1;
  47.                 var light = new THREE.DirectionalLight(color, intensity);
  48.                 light.position.set(5, 10, 2);
  49.                 scene.add(light);
  50.                 scene.add(light.target);
  51.             }
  52.  
  53.             renderer = new THREE.WebGLRenderer();
  54.             renderer.setSize(window.innerWidth, window.innerHeight);
  55.             document.body.appendChild(renderer.domElement);
  56.  
  57.             controls = new OrbitControls(camera, renderer.domElement);
  58.             raycaster = new THREE.Raycaster();
  59.             mouse = new THREE.Vector2();
  60.  
  61.             var texture = new THREE.TextureLoader();
  62.  
  63.             materials = [
  64.                 new THREE.MeshBasicMaterial({ map: texture.load('/models/fbx/textureFBX.png') }),
  65.                 new THREE.MeshBasicMaterial({ map: texture.load('/models/fbx/texture0.png') }),
  66.                 new THREE.MeshBasicMaterial({ map: texture.load('/models/fbx/texture1.png') }),
  67.                 new THREE.MeshBasicMaterial({ map: texture.load('/models/fbx/texture2.png') })
  68.             ];
  69.  
  70.             var fbxLoader = new FBXLoader();
  71.             fbxLoader.load('/models/fbx/cube.fbx', function (object) {
  72.  
  73.                 object.traverse(function (child) {
  74.                     if (child.isMesh) {
  75.                         child.material = materials[0];
  76.                     }
  77.                 });
  78.  
  79.                 scene.add(object);
  80.             });
  81.  
  82.             window.addEventListener('click', onClick, false);
  83.             window.addEventListener('resize', onWindowResize, false);
  84.         }
  85.  
  86.         function onWindowResize() {
  87.             camera.aspect = window.innerWidth / window.innerHeight;
  88.             camera.updateProjectionMatrix();
  89.             renderer.setSize(window.innerWidth, window.innerHeight);
  90.         }
  91.  
  92.         function onClick() {
  93.             event.preventDefault();
  94.  
  95.             mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  96.             mouse.y = - (event.clientY / window.innerHeight) * 2 + 1;
  97.  
  98.             raycaster.setFromCamera(mouse, camera);
  99.  
  100.             var intersects = raycaster.intersectObjects(scene.children, true);
  101.  
  102.             if (intersects.length > 0) {
  103.  
  104.                 const position = intersects[0].object.geometry.attributes.position;
  105.                 const vector = new THREE.Vector3();
  106.                 const face = intersects[0].face;
  107.  
  108.                 var geometry = new THREE.Geometry();
  109.  
  110.                 for (let i = 0, l = position.count; i < l; i++) {
  111.  
  112.                     vector.fromBufferAttribute(position, i);
  113.                     vector.applyMatrix4(intersects[0].object.matrixWorld);
  114.                     //console.log( vector );
  115.                     if (i === face.a || i === face.b || i === face.c) {
  116.                         geometry.vertices.push(vector.clone());
  117.                     }
  118.                 }
  119.  
  120.  
  121.                 console.log(geometry);
  122.                 geometry.faces = [new THREE.Face3(0, 1, 2)];
  123.  
  124.  
  125.                 console.log(geometry.vertices);
  126.                 console.log(geometry.faces);
  127.                 console.log(geometry.boundingSphere);
  128.  
  129.                 geometry.faceVertexUvs[0].push([
  130.                     new THREE.Vector2(0, 0),        
  131.                     new THREE.Vector2(0.5, 0),
  132.                     new THREE.Vector2(0.5, 0.5)
  133.                 ]);
  134.  
  135.                 //updating the uvs
  136.                 geometry.uvsNeedUpdate = true;
  137.                 geometry.computeBoundingSphere();
  138.                 geometry.computeVertexNormals();
  139.                 geometry.computeFaceNormals();
  140.                 var materialTemp = new THREE.MeshBasicMaterial({ map: materials[0] });
  141.  
  142.                 var mesh = new THREE.Mesh(geometry, materialTemp);
  143.                 scene.add(mesh);
  144.             }
  145.         }
  146.  
  147.         function animate() {
  148.             requestAnimationFrame(animate);
  149.             renderer.render(scene, camera);
  150.         }
  151.  
  152.     </script>
  153. </body>
  154.  
  155. </html>
Add Comment
Please, Sign In to add comment