|
@@ -47,7 +47,7 @@
|
|
|
var controls, renderHelpers = false;
|
|
|
var mouseVector = new THREE.Vector3();
|
|
|
var mouse = new THREE.Vector2();
|
|
|
-
|
|
|
+
|
|
|
var decalDiffuse = THREE.ImageUtils.loadTexture( 'textures/decal/decal-diffuse.png' );
|
|
|
var decalNormal = THREE.ImageUtils.loadTexture( 'textures/decal/decal-normal.jpg' );
|
|
|
|
|
@@ -94,11 +94,10 @@
|
|
|
|
|
|
function init() {
|
|
|
|
|
|
- renderer = new THREE.WebGLRenderer( { antialias: true });
|
|
|
+ renderer = new THREE.WebGLRenderer( { antialias: true } );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
-
|
|
|
container.appendChild( renderer.domElement );
|
|
|
-
|
|
|
+
|
|
|
scene = new THREE.Scene();
|
|
|
helperScene = new THREE.Scene();
|
|
|
|
|
@@ -106,7 +105,7 @@
|
|
|
camera.position.z = 100;
|
|
|
camera.target = new THREE.Vector3();
|
|
|
controls = new THREE.OrbitControls( camera, renderer.domElement );
|
|
|
-
|
|
|
+
|
|
|
scene.add( camera );
|
|
|
|
|
|
var light = new THREE.HemisphereLight( 0xffddcc, 0x111122 );
|
|
@@ -139,7 +138,7 @@
|
|
|
window.addEventListener( 'mousedown', function () {
|
|
|
|
|
|
moved = false;
|
|
|
-
|
|
|
+
|
|
|
}, false );
|
|
|
|
|
|
window.addEventListener( 'mouseup', function() {
|
|
@@ -161,7 +160,7 @@
|
|
|
x = event.clientX;
|
|
|
y = event.clientY;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
mouse.x = ( x / window.innerWidth ) * 2 - 1;
|
|
|
mouse.y = - ( y / window.innerHeight ) * 2 + 1;
|
|
|
|
|
@@ -172,7 +171,7 @@
|
|
|
function checkIntersection() {
|
|
|
|
|
|
if( !mesh ) return;
|
|
|
-
|
|
|
+
|
|
|
mouseVector.set( mouse.x, mouse.y, 1 ).unproject( camera );
|
|
|
|
|
|
raycaster.set( camera.position, mouseVector.sub( camera.position ).normalize() );
|
|
@@ -203,7 +202,7 @@
|
|
|
}
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
var gui = new dat.GUI();
|
|
|
|
|
|
gui.add( params, 'projection', { 'From cam to mesh': 'camera', 'Normal to mesh': 'normal' } );
|
|
@@ -215,7 +214,7 @@
|
|
|
|
|
|
onWindowResize();
|
|
|
render();
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
|
|
|
function loadLeePerrySmith( callback ) {
|
|
@@ -282,12 +281,11 @@
|
|
|
s.set( scale, scale, scale );
|
|
|
|
|
|
if( params.rotate) r.z = Math.random() * 2 * Math.PI;
|
|
|
-
|
|
|
+
|
|
|
var material = decalMaterial.clone();
|
|
|
material.color.setHex( Math.random() * 0xffffff );
|
|
|
|
|
|
var m = new THREE.Mesh( new THREE.DecalGeometry( mesh, p, r, s, check ), material );
|
|
|
- m.renderDepth = - scene.children.length;
|
|
|
decals.push( m );
|
|
|
scene.add( m );
|
|
|
|
|
@@ -307,24 +305,24 @@
|
|
|
|
|
|
var merge = {};
|
|
|
decals.forEach(function (decal) {
|
|
|
-
|
|
|
+
|
|
|
var uuid = decal.material.uuid;
|
|
|
var d = merge[uuid] = merge[uuid] || {};
|
|
|
d.material = d.material || decal.material;
|
|
|
d.geometry = d.geometry || new THREE.Geometry();
|
|
|
d.geometry.merge(decal.geometry, decal.matrix);
|
|
|
-
|
|
|
+
|
|
|
});
|
|
|
|
|
|
removeDecals();
|
|
|
|
|
|
for (var key in merge) {
|
|
|
-
|
|
|
+
|
|
|
var d = merge[key];
|
|
|
var mesh = new THREE.Mesh(d.geometry, d.material);
|
|
|
scene.add(mesh);
|
|
|
decals.push(mesh);
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -341,7 +339,7 @@
|
|
|
function render() {
|
|
|
|
|
|
requestAnimationFrame( render );
|
|
|
-
|
|
|
+
|
|
|
renderer.autoClear = false;
|
|
|
renderer.render( scene, camera );
|
|
|
if( renderHelpers ) renderer.render( helperScene, camera );
|