|  | @@ -0,0 +1,165 @@
 | 
	
		
			
				|  |  | +<!DOCTYPE html>
 | 
	
		
			
				|  |  | +<html lang="en">
 | 
	
		
			
				|  |  | +	<head>
 | 
	
		
			
				|  |  | +		<title>three.js webgl - materials - canvas texture</title>
 | 
	
		
			
				|  |  | +		<meta charset="utf-8">
 | 
	
		
			
				|  |  | +		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 | 
	
		
			
				|  |  | +		<style>
 | 
	
		
			
				|  |  | +			body {
 | 
	
		
			
				|  |  | +				margin: 0px;
 | 
	
		
			
				|  |  | +				background-color: #050505;
 | 
	
		
			
				|  |  | +				color: #fff;
 | 
	
		
			
				|  |  | +				overflow: hidden;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			a { color: #e00 }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			#info {
 | 
	
		
			
				|  |  | +				position: absolute;
 | 
	
		
			
				|  |  | +				top: 0px; width: 100%;
 | 
	
		
			
				|  |  | +				color: #ffffff;
 | 
	
		
			
				|  |  | +				padding: 5px;
 | 
	
		
			
				|  |  | +				font-family: Monospace;
 | 
	
		
			
				|  |  | +				font-size: 13px;
 | 
	
		
			
				|  |  | +				text-align: center;
 | 
	
		
			
				|  |  | +				z-index: 1000;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			#drawing-canvas {
 | 
	
		
			
				|  |  | +				position: absolute;
 | 
	
		
			
				|  |  | +				background-color: #000000;
 | 
	
		
			
				|  |  | +				top: 0px;
 | 
	
		
			
				|  |  | +				right: 0px;
 | 
	
		
			
				|  |  | +				z-index: 3000;
 | 
	
		
			
				|  |  | +				cursor: crosshair;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		</style>
 | 
	
		
			
				|  |  | +	</head>
 | 
	
		
			
				|  |  | +	<body>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		<div id="info">
 | 
	
		
			
				|  |  | +			<a href="http://threejs.org" target="_blank">three.js</a> - webgl - canvas as a texture
 | 
	
		
			
				|  |  | +			<div>click and draw in the white box</div>
 | 
	
		
			
				|  |  | +		</div>
 | 
	
		
			
				|  |  | +		<canvas id="drawing-canvas" height="128" width="128"></canvas>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		<script src="../build/three.js"></script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		<script src="js/Detector.js"></script>
 | 
	
		
			
				|  |  | +		<script src="js/libs/stats.min.js"></script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		<script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			var camera, scene, renderer, mesh, material;
 | 
	
		
			
				|  |  | +			var drawStartPos = { x: 0, y: 0 };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			init();
 | 
	
		
			
				|  |  | +			setupCanvasDrawing();
 | 
	
		
			
				|  |  | +			animate();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			function init() {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 2000 );
 | 
	
		
			
				|  |  | +				camera.position.z = 400;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				scene = new THREE.Scene();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				geometry = new THREE.BoxGeometry( 200, 200, 200 );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				material = new THREE.MeshBasicMaterial();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				mesh = new THREE.Mesh( geometry, material );
 | 
	
		
			
				|  |  | +				scene.add( mesh );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				renderer = new THREE.WebGLRenderer( { antialias: true } );
 | 
	
		
			
				|  |  | +				renderer.setPixelRatio( window.devicePixelRatio );
 | 
	
		
			
				|  |  | +				renderer.setSize( window.innerWidth, window.innerHeight );
 | 
	
		
			
				|  |  | +				document.body.appendChild( renderer.domElement );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				stats = new Stats();
 | 
	
		
			
				|  |  | +				document.body.appendChild( stats.dom );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				window.addEventListener( 'resize', onWindowResize, false );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			// Sets up the drawing canvas and adds it as the material map.
 | 
	
		
			
				|  |  | +			function setupCanvasDrawing() {
 | 
	
		
			
				|  |  | +				// get canvas and context
 | 
	
		
			
				|  |  | +				var drawingCanvas = document.getElementById( 'drawing-canvas' );
 | 
	
		
			
				|  |  | +				var drawingContext = drawingCanvas.getContext( '2d' );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				// draw white background
 | 
	
		
			
				|  |  | +				drawingContext.fillStyle = "#FFFFFF";
 | 
	
		
			
				|  |  | +				drawingContext.fillRect( 0, 0, 128, 128 );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				// set canvas as material.map (this could be done to any map, bump, displacement etc.)
 | 
	
		
			
				|  |  | +				material.map = new THREE.Texture( drawingCanvas );
 | 
	
		
			
				|  |  | +				// need to flag the map as needing updating.
 | 
	
		
			
				|  |  | +				material.map.needsUpdate = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				// set the variable to keep track of when to draw
 | 
	
		
			
				|  |  | +				var paint = false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				// add canvas event listeners
 | 
	
		
			
				|  |  | +				drawingCanvas.addEventListener( 'mousedown', function( e ) {
 | 
	
		
			
				|  |  | +					paint = true;
 | 
	
		
			
				|  |  | +					drawStartPos = { x: e.offsetX, y: e.offsetY };
 | 
	
		
			
				|  |  | +				} );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				drawingCanvas.addEventListener( 'mousemove', function( e ) {
 | 
	
		
			
				|  |  | +					if(paint){
 | 
	
		
			
				|  |  | +						draw( drawingContext, e.offsetX, e.offsetY );
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				} );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				drawingCanvas.addEventListener( 'mouseup', function( e ) {
 | 
	
		
			
				|  |  | +					paint = false;
 | 
	
		
			
				|  |  | +				} );
 | 
	
		
			
				|  |  | +				
 | 
	
		
			
				|  |  | +				drawingCanvas.addEventListener( 'mouseleave', function( e ) {
 | 
	
		
			
				|  |  | +					paint = false;
 | 
	
		
			
				|  |  | +				} );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			function draw( drawContext, x, y ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				drawContext.moveTo( drawStartPos.x, drawStartPos.y );
 | 
	
		
			
				|  |  | +				drawContext.strokeStyle = '#000000';
 | 
	
		
			
				|  |  | +				drawContext.lineTo( x, y );
 | 
	
		
			
				|  |  | +				drawContext.stroke();
 | 
	
		
			
				|  |  | +				// reset drawing start position to current position.
 | 
	
		
			
				|  |  | +				drawStartPos = { x: x, y: y };
 | 
	
		
			
				|  |  | +				// need to flag the map as needing updating.
 | 
	
		
			
				|  |  | +				material.map.needsUpdate = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			function onWindowResize() {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				camera.aspect = window.innerWidth / window.innerHeight;
 | 
	
		
			
				|  |  | +				camera.updateProjectionMatrix();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				renderer.setSize( window.innerWidth, window.innerHeight );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			function animate() {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				requestAnimationFrame( animate );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				mesh.rotation.x += 0.01;
 | 
	
		
			
				|  |  | +				mesh.rotation.y += 0.01;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				renderer.render( scene, camera );
 | 
	
		
			
				|  |  | +				stats.update();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	</body>
 | 
	
		
			
				|  |  | +</html>
 |