CirclesOnObjects

Attempting to render 2d circles on a loaded 3d object using THREE.js

by Bladetrick

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/91/three.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <title>three.js webgl - decals - Decal Splatter</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    
</head>
<body>

    <div id="container"></div>
 
 </body>
 </html>

CSS

body {
  background: #777;
  padding: 0;
  margin: 0;
  font-weight: bold;
  overflow: hidden;
}

#info {
  position: absolute;
  top: 0px;
  width: 100%;
  color: #ffffff;
  padding: 5px;
  font-family: Monospace;
  font-size: 13px;
  text-align: center;
}

a {
  color: #ffffff;
}

JavaScript

var container = document.getElementById( 'container' );
		var renderer, scene, camera, stats;
		var tailcone, mesh, decal;
		var raycaster;
		var line;
		var intersection = {
			intersects: false,
			point: new THREE.Vector3(),
			normal: new THREE.Vector3()
		};
		var mouse = new THREE.Vector2();
        
		var modelloader;
		var partmodel;
		var wirehelper;

		var decalDiffuse;
		var decalNormal;
		var decalMaterial;

		var decals = [];
		var mouseHelper;
		var position = new THREE.Vector3();
		var orientation = new THREE.Euler();
		var size = new THREE.Vector3( 10, 10, 10 );
		var up = new THREE.Vector3( 0, 1, 0 );
		var params = {
			minScale: 10,
			maxScale: 20,
			rotate: true,
			clear: function() {
				removeDecals();
			}
		};
		window.addEventListener('load', init);

		function init() {
            // Renderer
			renderer = new THREE.WebGLRenderer( { antialias: true } );
			renderer.setPixelRatio( window.devicePixelRatio );
			renderer.setSize( window.innerWidth, window.innerHeight );
			container.appendChild(renderer.domElement);

            // Frame Stats
			stats = new Stats();
			container.appendChild( stats.dom );
			scene = new THREE.Scene();

            // Camera & Controls
			camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 1000 );
			camera.position.z = 120;
			camera.target = new THREE.Vector3();
			var controls = new THREE.OrbitControls( camera, renderer.domElement );
			controls.minDistance = 10;
			controls.maxDistance = 20;

            // Lights
			scene.add( new THREE.AmbientLight( 0x443333 ) );
			var light = new THREE.DirectionalLight( 0xffddcc, 1 );
			light.position.set( 1, 0.75, 0.5 );
			scene.add( light );
			var light = new THREE.DirectionalLight( 0xccccff, 1 );
			light.position.set( -1, 0.75, -0.5 );
			scene.add(light);


			var geometry = new THREE.BufferGeometry();
			geometry.setFromPoints( [ new THREE.Vector3(), new THREE.Vector3() ] );
			line = new THREE.Line( geometry, new...