JSFiddle - React, Tailwind, and code Playground
HTML
<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
CSS
body {
margin: 0;
overflow: hidden;
}
JavaScript
let camera, cameraOrtho, scene, sceneOrtho, renderer, mesh, sprite, lineGeometry;
const spriteWorldCoords = new THREE.Vector3();
const spriteDimensions = new THREE.Vector2( 128, 128 );
init();
animate();
function init() {
const width = window.innerWidth;
const height = window.innerHeight;
camera = new THREE.PerspectiveCamera( 70, width / height, 0.01, 10 );
camera.position.z = 1;
cameraOrtho = new THREE.OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, 0.01, 10 );
cameraOrtho.position.z = 1;
scene = new THREE.Scene();
sceneOrtho = new THREE.Scene();
// mesh
const geometry = new THREE.BoxBufferGeometry( 0.2, 0.2, 0.2 );
const material = new THREE.MeshNormalMaterial();
mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );
// sprite
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load( 'https://threejs.org/examples/textures/sprite0.png' );
const spriteMaterial = new THREE.SpriteMaterial( { map: texture } );
sprite = new THREE.Sprite( spriteMaterial );
sprite.scale.set( spriteDimensions.x, spriteDimensions.y, 1 );
sceneOrtho.add( sprite );
updateSprite();
// line
lineGeometry = new THREE.BufferGeometry();
lineGeometry.setFromPoints( [ mesh.position.clone(), sprite.position.clone() ] );
lineGeometry.attributes.position.dynamic = true;
const lineMaterial = new THREE.LineBasicMaterial( { color: 0xffffff } );
const line = new THREE.Line( lineGeometry, lineMaterial );
scene.add( line );
//
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.autoClear = false;
document.body.appendChild( renderer.domElement );
window.addEventListener( 'resize', onWindowResize, false );
const controls = new THREE.OrbitControls( camera, renderer.domElement );
}
function onWindowResize() {
const...