Toggle navigation
Sign Up
Log In
Explore
Works
Folders
Tools
Collections
Artists
Groups
Groups
Topics
Tasks
Tasks
Jobs
Teams
Jobs
Recommendation
More Effects...
JS
var container; var camera, scene, renderer; var _geometry, _originalMorphTargets; var mesh, animation; var radius = 600; var theta = 0; var prevTime = Date.now(); var gui; var settings = {}; settings.mutation = 1; settings.reset = function() { if (_geometry) { for (var i = 0; i < _originalMorphTargets.length; i++) { for (var j = 0; j < _originalMorphTargets[i].length; j++) { _geometry.morphTargets[i].vertices[j].copy(_originalMorphTargets[i][j]); } } } } init(); tick(); function init() { container = document.getElementById("container"); camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 10000 ); camera.position.y = 100; camera.target = new THREE.Vector3( 0, 150, 0 ); scene = new THREE.Scene(); var light = new THREE.DirectionalLight( 0xefefff, 2 ); light.position.set( 1, 1, 1 ).normalize(); scene.add( light ); var light = new THREE.DirectionalLight( 0xffefef, 2 ); light.position.set( -1, -1, -1 ).normalize(); scene.add( light ); var loader = new THREE.JSONLoader( true ); loader.load( "https://s3-us-west-2.amazonaws.com/s.cdpn.io/175711/horse.json", function( geometry ) { _geometry = geometry; _geometry.dynamic = true; _originalMorphTargets = []; for (var i = 0; i < _geometry.morphTargets.length; i++) { _originalMorphTargets[i] = []; for (var j = 0; j < _geometry.morphTargets[i].vertices.length; j++) { _originalMorphTargets[i].push(_geometry.morphTargets[i].vertices[j].clone()) } } mesh = new THREE.Mesh( _geometry, new THREE.MeshLambertMaterial( { color: 0x606060, morphTargets: true } ) ); scene.add( mesh ); animation = new THREE.MorphAnimation( mesh ); animation.play(); // slow? // for (var i = 0; i < _geometry.morphTargets.length; i++) // { // for (var j = 0; j < _geometry.morphTargets[i].vertices.length; j++) // { // Entropy.watch(_geometry.morphTargets[i].vertices[j], 1); // } // } // // for (var i = 0; i < _geometry.vertices.length; i++) // { // Entropy.watch(_geometry.vertices[i], 1); // } } ); renderer = new THREE.WebGLRenderer(); renderer.setClearColor( 0xf0f0f0 ); renderer.setSize( window.innerWidth, window.innerHeight ); container.appendChild(renderer.domElement); gui = new dat.GUI(); gui.add(settings, "mutation", 0.1, 10); gui.add(settings, "reset"); window.addEventListener('resize', onWindowResize, false); } function tick() { requestAnimationFrame(tick); update(); render(); } function update() { theta += 0.1; camera.position.x = radius * Math.sin( THREE.Math.degToRad( theta ) ); camera.position.z = radius * Math.cos( THREE.Math.degToRad( theta ) ); camera.lookAt( camera.target ); if ( animation ) { for (var i = 0; i < _geometry.morphTargets.length; i++) { for (var j = 0; j < _geometry.morphTargets[i].vertices.length; j++) { var v = _geometry.morphTargets[i].vertices[j]; v.x = Entropy.mutate_(v.x, settings.mutation); v.y = Entropy.mutate_(v.y, settings.mutation); v.z = Entropy.mutate_(v.z, settings.mutation); } } mesh.geometry.morphTargetsNeedUpdate = true; var time = Date.now(); animation.update( time - prevTime ); prevTime = time; } } function render() { renderer.render(scene, camera); } function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }
CSS
body { color: #808080; background-color: #fff; margin: 0; overflow: hidden; }
HTML
Join Effecthub.com
Working with Global Gaming Artists and Developers!
Login
Sign Up
Or Login with Your Email Address:
Email
Password
Remember
Or Sign Up with Your Email Address:
Your Email
This field must contain a valid email
Set Password
Password should be at least 1 character
Stay informed via email