React Three Fiber Hooks

Starter pack

Dalam pelajaran ini, kita akan mempelajari apa itu hooks useThree dan useFrame yang disediakan oleh React Three Fiber, kapan dan bagaimana menggunakannya.

useThree

useThree memberikan akses ke model state yang berisi renderer default, scene, kamera, ukuran viewport, dan sebagainya.

Walaupun saya akan menjelaskan setiap properti state yang akan kita gunakan pada waktu yang tepat, Anda dapat menemukan daftar lengkap properti di dokumentasi.

Untuk menggunakannya, kita perlu mengimpornya dari @react-three/fiber, dan kemudian memanggilnya di dalam komponen kita:

import { Canvas, useThree } from "@react-three/fiber";
// ...

const Cube = (props) => {
  const { camera } = useThree();
  // ...
};

// ...

Meskipun cara penggunaan useThree ini berfungsi, ini akan menyebabkan komponen melakukan re-render pada perubahan nilai lain selain dari yang kita dapatkan dari destructuring.

Sebagai gantinya, kita dapat menggunakan pola selector untuk hanya mendapatkan nilai yang kita butuhkan:

import { Canvas, useThree } from "@react-three/fiber";

const Cube = (props) => {
  const camera = useThree((state) => state.camera);
  // ...
};

Dengan cara ini, komponen hanya akan melakukan re-render ketika nilai camera berubah.

Ingatlah bahwa nilai internal threejs tidak reaktif. Jika camera.position berubah, komponen tidak akan melakukan re-render. (Untungnya)

Sekarang kita memiliki akses ke kamera, kita dapat memodifikasi fov (field of view) untuk melakukan zoom in atau out:

// ...

const Cube = (props) => {
  const camera = useThree((state) => state.camera);

  const updateFov = (fov) => {
    camera.fov = fov;
    camera.updateProjectionMatrix();
  };

  useControls("FOV", {
    smallFov: button(() => updateFov(20)),
    normalFov: button(() => updateFov(42)),
    bigFov: button(() => updateFov(60)),
    hugeFov: button(() => updateFov(110)),
  });

  // ...
};

// ...

Catatan:

  • Metode updateProjectionMatrix diperlukan untuk memberi tahu threejs bahwa kamera telah berubah dan perlu diperbarui.
  • Dengan memberikan nilai string sebagai parameter pertama ke useControls kita dapat mengelompokkan properti berdasarkan folder.

Field of View kamera kita diperbarui dengan benar dari kontrol

useFrame

Threejs adalah perpustakaan berbasis render-loop. Ini berarti bahwa apa yang kita lihat di layar adalah hasil dari loop yang merender scene pada setiap frame. Seperti video adalah urutan gambar, scene 3D adalah urutan frame.

Hook useFrame memungkinkan kita untuk menjalankan kode pada setiap frame yang dirender, seperti menjalankan efek, memperbarui kontrol, dan animasi.

Ketika menargetkan 60fps, callback akan dipanggil 60 kali per detik.

Three.js logoReact logo

React Three Fiber: The Ultimate Guide to 3D Web Development

✨ You have reached the end of the preview ✨

Go to the next level with Three.js and React Three Fiber!

Get full access to this lesson and the complete course when you enroll:

  • 🔓 Full lesson videos with no limits
  • 💻 Access to the final source code
  • 🎓 Course progress tracking & completion
  • 💬 Invite to our private Discord community
Unlock the Full Course – Just $85

One-time payment. Lifetime updates included.