3D position (x, y, z)를 2D position (x, y)로 변경

3d object위에 그 object에 대한 설명이 달린 태그를 붙여서 object를 따라다니게 하려고 한다.

div로 만든 태그를 object위에 붙여서 따라다니게 하려면 object의 position 값을 대입해야 되는데 position은 x,y,z 값을 가지고 있고, div는 x, y 값만 가지고 있기 때문에 3d position(x,y,z)를 x,y로 변경해서 사용해야만 한다.

‘cube’라는 이름의 Box를 생성한다.

var geo = new THREE.BoxBufferGeometry( 10, 10, 10 );
var mat = new THREE.MeshPhongMaterial( { color : 0xff0000 } );
var cube = new THREE.Mesh( geo, mat );
    cube.position.set( 0, 5, 0 );
    scene.add( cube );

id가 tag인 div를 생성

 <div id="tag">TAG</div> 

tag라는 변수명으로 사용

 <div id="tag">TAG</div> 

loop 함수 안에 이 구문을 집어넣고 매 프레임마다 실행한다.

var canvasWidth = window.innerWidth;       // 3D 캔버스의 넓이
var canvasHeight = window.innerHeight;     // 3D 캔버스의 높이
var widthHalf = canvasWidth / 2;           // 3D 캔버스의 넓이의 절반 값
var heightHalf = canvasHeight / 2;         // 3D 캔버스의 높이의 절반 값

var pos = cube.position.clone();           // 큐브의 위치값 복사
pos.project( camera );
pos.x = ( pos.x * widthHalf ) + widthHalf;
pos.y = - ( pos.y * heightHalf ) + heightHalf;

// pos.x 와 pos.y를 2D 상의 좌표로 사용하면 된다.

tag.style.top = pos.y + 'px';
tag.style.left = pos.x + 'px';