[Three.js] 3D 객체의 렌더링과 표시
Three.js
JavaScript 라이브러리를 통해 WebGL를 쉽게 다룰 수 있도록 Three.js를 사용한다.
HTML
<head>
<title>Scene</title>
<script type="text/javascript" src="../libs/three.js"></script>
<style>
body {
margin: 0;
overflow: hidden;
}
</style>
</head>
<body>
<!-- Div which will hold the Output -->
<div id="WebGL-output">
</div>
Scene 추가
three.js 는 3차원 객체로 구성되는 장면 (Scene)이 있다.
Scene은 렌더링 할 모든 객체와, 카메라와 광원을 저장하는 컨테이너이다.
var scene = new THREE.Scene();
Camera 추가
Scene을 렌더링할 때는 어떤 시점에서 장면을 보는가에 따라서 다양한 모습으로 렌더링된다.
그 시점을 Camera로 정의한다.
Camera에는 PerspectiveCamera, OrthographicCamera 두 가지가 존재한다.
PerspectiveCamera
: 일상생활에서 우리가 보는 외관.OrthographicCamera
: 직교 카메라, 시점으로부터의 거리에 상관없이 모든 물체가 동일한 크기이다.
THREE.PerspectiveCamera(fov, aspect, near, far)
- fov — Camera frustum vertical field of view.
- aspect — Camera frustum aspect ratio.
- near — Camera frustum near plane.
- far — Camera frustum far plane.
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
Renderer 추가
이 장면을 모니터와 같은 출력 장치에 출력할 수 있는, 즉 렌더링할 수 있는 Renderer가 있다.
var renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setClearColorHex();
renderer.setClearColor(new THREE.Color(0xEEEEEE));
renderer.setSize(window.innerWidth, window.innerHeight);
- 오브젝트의 가장자리를 매끄럽게 하기 위해 antialias를 true로 한다.
AxisHelper (좌표계) 생성
var axes = new THREE.AxisHelper(20);
scene.add(axes);
Plane(바닥) 추가
var planeGeometry = new THREE.PlaneGeometry(60, 20); // 가로, 세로
var planeMaterial = new THREE.MeshBasicMaterial({color: 0xcccccc});
var plane = new THREE.Mesh(planeGeometry, planeMaterial); // 형태, 재질 합쳐주는 역할
// rotate and position the plane
plane.rotation.x = -0.5 * Math.PI;
plane.position.x = 15;
plane.position.y = 0;
plane.position.z = 0;
// add the plane to the scene
scene.add(plane);
- Plane은 기본값이 수직으로 서있기 때문에 rotation 시켜서 수평으로 만든다.
Cube 생성
// create a cube
var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
var cubeMaterial = new THREE.MeshBasicMaterial({color: 0xff0000, wireframe: true}); // 광원의 영향을 받지 않기 때문에 그림자를 만들지 못한다.
var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
// position the cube
cube.position.x = -4;
cube.position.y = 3;
cube.position.z = 0;
// add the cube to the scene
scene.add(cube);
Sphere 생성
// create a sphere
var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
var sphereMaterial = new THREE.MeshBasicMaterial({color: 0x7777ff, wireframe: true});
var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
// position the sphere
sphere.position.x = 20;
sphere.position.y = 4;
sphere.position.z = 2;
// add the sphere to the scene
scene.add(sphere);
Camera 추가
// position and point the camera to the center of the scene
camera.position.x = -30;
camera.position.y = 40;
camera.position.z = 30;
camera.lookAt(scene.position);
Rendering
// add the output of the renderer to the html element
document.getElementById("WebGL-output").appendChild(renderer.domElement);
// render the scene
renderer.render(scene, camera);
결과물
REFERENCE
Author And Source
이 문제에 관하여([Three.js] 3D 객체의 렌더링과 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@godud2604/Three.js-3D-객체의-렌더링과-표시저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)