javascript three.js

javascript - Threejs, haciendo que el vidrio rompa el efecto



three.js (0)

Tengo una idea para crear, pero dado que mi conocimiento sobre Three.js y la programación 3D en general es limitado, estoy atascado ... Idea: el usuario está haciendo algunas cosas. En algún momento, toda la pantalla frontal se bloquea y revela algo diferente detrás. Al principio, mi idea era: hacer una captura de pantalla, de lo que está sucediendo ahora, poner esa imagen delante de todo (aún así, tener dificultades para hacer que ese avión tome el 100% de tamaño, idea) cuando se muestra, el usuario no puede notar la diferencia , entre viejas representaciones 3d, y nueva imagen 2d), y luego - romperlo. Entonces, al buscar en la Web ejemplos diferentes, realicé algunas ... cosas: capturas de pantalla creadas, planos y una captura de pantalla aplicada como textura. Para crear un efecto desgarrador, utilicé TessellateModifier para dividir ese plano y ExplodeModifier para crear cada cara como cara separada. Aquí estará el código que hice hasta ahora.

function drawSS() { var img = new Image; img.onload = function() { // When screenshot is ready var canvas = document.createElement(''canvas''); canvas.width = window.innerWidth; canvas.height = window.innerHeight; var context = canvas.getContext(''2d''); // CANVAS DRAWINGS // Draws screenshot // END var texture = new THREE.Texture(canvas); texture.needsUpdate = true; var multiMaterial = [ new THREE.MeshBasicMaterial({map: texture, side: THREE.FrontSide}), // canvas drawings new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true, transparent: true}) // for displaying wireframe ]; var geometry = new THREE.PlaneGeometry(canvas.width, canvas.height); // create plane for (var i = 0, len = geometry.faces.length; i < len; i++) { // Snippet from some stackoverflow post, that works. var face = geometry.faces[i].clone(); face.materialIndex = 1; geometry.faces.push(face); geometry.faceVertexUvs[0].push(geometry.faceVertexUvs[0][i].slice(0)); } geometry.dynamic = true; THREE.GeometryUtils.center( geometry ); // ? var tessellateModifier = new THREE.TessellateModifier( 10 ); for ( var i = 0; i < 5; i ++ ) tessellateModifier.modify( geometry ); new THREE.ExplodeModifier().modify( geometry ); geometry.vertices[0].x -=300; geometry.vertices[1].x -=300; geometry.vertices[2].x -=300; var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial(multiMaterial) ); scene.add( mesh ); }; // THEN, set the src img.src = THREEx.Screenshot.toDataURL(renderer); }

Por ahora, moví 1 cara, cambiando las coordenadas de 3 vértices. Estoy preguntando si este enfoque es el camino a seguir. El resultado se ve así. (líneas blancas - wireframe, líneas negras - (dibujos en lienzo) mis wireframes deseados - problema para más adelante). Nota: al moverse de esta manera, la textura sigue, no sé, si hago nuevos triángulos usando estos vértices, ¿cómo establecería la textura?