장면
, 카메라
및 렌더러
의 세 가지가 필요하다.const scene = new THREE.Scene();
PerspectiveCamera(시야, 종횡비, 근거리 및 원거리 클리핑 평면)
매개변수 | 설명 |
---|---|
시야 | 디스플레이에 표시되는 장면의 범위 |
종횡비 | 항상 요소의 너비/ 높이 값을 사용 |
근거리 및 원거리 클리핑 평면 | 근거리에서 멀리 있거나, 카메라에서 더 멀리 떨어진 오브젝트는 렌더링하지 않음(성능향상에 중요) |
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/Window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
false
를 사용한다.renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setSize( window.innerWidth/2, window.innerHeight/2, false );
//<canvas>의 너비와 높이가 100 % 인 경우 앱을 절반 해상도로 렌더링.
<canvas
>요소 임)document.body.appendChild( renderer.domElement );
BoxGeometry
가 필요하다.(BoxGeometry
는 큐브의 모든 점 ( 정점 )과 면을 포함하는 오브젝트)
const geometr = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
THREE.Mesh
는 지오메트리 객체와 색깔 및 재질 객체를 받아 하나의 오브젝트를 구성한다.const cube = new THREE.Mesh( geometry, material );
scene.add( cube );
camera.position.z = 5;
render
나 animate loop
를 사용하여 화면이 새로 고침될 때마다 렌더러가 장면을 그리는 루프를 생성한다. (일반 화면에서는 초당 60 회를 의미)requestAnimationFrame
은 사용자가 다른 브라우저 탭으로 이동할 때 일시 중지한다.(자원절약!)const animate = function () {
requestAnimationFrame( animate ); //loop
cube.rotation.x += 0.01; //cube객체에 회전 애니메이션 추가
cube.rotation.y += 0.01;
renderer.render( scene, camera ); //이 scene, camera에 애니메이션 랜더링
};
animate();