Three.js Setup — Creative Web

Three.js Setup Three.js adalah library JavaScript yang membuat pembuatan grafik 3D di web menjadi jauh lebih mudah. Three.js membungkus WebGL dengan API yang…

Three.js Setup

Three.js adalah library JavaScript yang membuat pembuatan grafik 3D di web menjadi jauh lebih mudah. Three.js membungkus WebGL dengan API yang intuitif.

Instalasi

# Dengan npm
npm install three

# Atau gunakan CDN
# <script type="importmap">
# {
#   "imports": {
#     "three": "https://cdn.jsdelivr.net/npm/[email protected]/build/three.module.js",
#     "three/addons/": "https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/"
#   }
# }
# </script>

Tiga Komponen Utama

Setiap aplikasi Three.js membutuhkan 3 hal: Scene, Camera, dan Renderer.

1. Scene — "Panggung"

Scene adalah container untuk semua objek 3D, cahaya, dan kamera:

import * as THREE from "three";

const scene = new THREE.Scene();
scene.background = new THREE.Color(0x1a1a2e);

2. Camera — "Mata"

Camera menentukan dari mana dan bagaimana kita melihat scene:

const camera = new THREE.PerspectiveCamera(
  75,                                    // FOV (field of view) dalam derajat
  window.innerWidth / window.innerHeight, // aspect ratio
  0.1,                                   // near clipping plane
  1000                                   // far clipping plane
);

camera.position.z = 5; // mundurkan kamera agar bisa melihat objek

PerspectiveCamera mensimulasikan penglihatan manusia — objek jauh terlihat lebih kecil (perspektif). Ada juga OrthographicCamera yang tidak punya perspektif (seperti blueprint).

3. Renderer — "Kanvas"

Renderer menggambar scene ke layar:

const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio);
document.body.appendChild(renderer.domElement);

Setup Lengkap Minimal

import * as THREE from "three";

// Scene
const scene = new THREE.Scene();

// Camera
const camera = new THREE.PerspectiveCamera(
  75, window.innerWidth / window.innerHeight, 0.1, 1000
);
camera.position.z = 5;

// Renderer
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// Tambah objek — kubus sederhana
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x3498db });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// Animation loop
function animate() {
  requestAnimationFrame(animate);
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
}
animate();

OrbitControls — Kontrol Kamera dengan Mouse

OrbitControls memungkinkan user memutar, zoom, dan pan kamera:

import { OrbitControls } from "three/addons/controls/OrbitControls.js";

const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;  // gerakan halus
controls.dampingFactor = 0.05;
controls.enableZoom = true;
controls.autoRotate = false;

// Jangan lupa update di animation loop!
function animate() {
  requestAnimationFrame(animate);
  controls.update(); // PENTING!
  renderer.render(scene, camera);
}
animate();

Handle Window Resize

Agar 3D scene responsif saat window di-resize:

window.addEventListener("resize", () => {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(window.innerWidth, window.innerHeight);
});

Axes Helper & Grid Helper

Untuk debugging dan orientasi:

// Sumbu X (merah), Y (hijau), Z (biru)
const axesHelper = new THREE.AxesHelper(5);
scene.add(axesHelper);

// Grid di lantai
const gridHelper = new THREE.GridHelper(10, 10);
scene.add(gridHelper);

Template Project

Struktur folder yang direkomendasikan:

project/
  index.html
  style.css
  main.js
  package.json
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <style>
    body { margin: 0; overflow: hidden; }
    canvas { display: block; }
  </style>
</head>
<body>
  <script type="module" src="main.js"></script>
</body>
</html>

Sekarang kamu sudah punya fondasi Three.js! Di pelajaran selanjutnya, kita akan menambahkan geometri, material, dan pencahayaan.

Yang akan kamu pelajari