Thiết lập

Trong bài học này, chúng ta sẽ thiết lập môi trường với tất cả công cụ cần thiết để bắt đầu xây dựng ứng dụng 3D đầu tiên của mình. Sau đó, chúng ta sẽ tạo dự án React đầu tiêncài đặt các dependencies cần thiết.

Hệ điều hành của bạn không quan trọng. Tôi đang sử dụng Mac, nhưng bạn cũng có thể làm theo trên Windows hoặc Linux.

Visual Studio Code

Bạn có thể sử dụng bất kỳ trình soạn thảo mã nào bạn muốn, nhưng tôi khuyên bạn nên sử dụng Visual Studio Code. Nó miễn phí, mã nguồn mở và có rất nhiều tiện ích mở rộng hữu ích.

Bạn có thể tải về tại đây: https://code.visualstudio.com/

Nếu bạn chọn sử dụng Visual Studio Code, đây là một số tiện ích mở rộng mà tôi khuyên dùng:

  • ESLint: Công cụ linting cho JavaScript và JSX. Nó sẽ hiển thị cho bạn các lỗi và cảnh báo trong mã của bạn.
  • Prettier: Trình định dạng mã. Nó sẽ tự động định dạng mã của bạn khi bạn lưu dựa trên cài đặt của bạn.
  • Copilot: Trợ lý lập trình AI. Nó sẽ giúp bạn viết mã nhanh hơn bằng cách gợi ý các dòng mã dựa trên ngữ cảnh của bạn.

Node.js

Node.js là một runtime JavaScript được xây dựng trên nền tảng V8 JavaScript engine của Chrome. Nó cho phép bạn chạy mã JavaScript ngoài trình duyệt. Trong trường hợp của chúng ta, chúng ta sẽ sử dụng nó để chạy development server của các dự án.

Bạn có thể tải về tại đây: https://nodejs.org/en/download/

Tải phiên bản LTS. Đây là phiên bản ổn định nhất.

Yarn

Yarn là một trình quản lý gói cho JavaScript. Nó tương tự như npm, nhưng nhanh hơn và an toàn hơn.

Bạn có thể tải nó tại đây: https://classic.yarnpkg.com/en/docs/install

Chúng ta sẽ sử dụng nó để cài đặt các thư viện mà chúng ta cần cho các dự án của mình. Ví dụ như Three.js, React Three Fiber, v.v...

Vite

Vite là một công cụ xây dựng cho các dự án web hiện đại. Nó nhanh, nhẹdễ sử dụng.

Nó không yêu cầu cài đặt.

Để tạo một dự án React mới, mở terminal của bạn (trên Visual Studio Code, bạn mở từ menu Terminal > New Terminal) và chạy lệnh sau:

yarn create vite

Sau đó nhập tên dự án của bạn, nhấn enter, và sử dụng phím mũi tên trên bàn phím để chọn React làm framework và JavaScript làm ngôn ngữ.

Chọn Framework với Vite

Bạn sẽ thấy một cái gì đó như thế này:

Dự án đã tạo thành công

Bây giờ trên Visual Studio Code, mở thư mục dự án bằng cách nhấp vào Open Folder và chọn thư mục bạn vừa tạo.

Trong terminal, chạy các lệnh sau để cài đặt các phụ thuộc và khởi động máy chủ phát triển của dự án của bạn:

yarn
yarn dev

Terminal của bạn sẽ cung cấp cho bạn một URL địa phương để truy cập dự án của bạn:

Máy chủ phát triển đã khởi động

Mở nó trong trình duyệt của bạn hoặc sử dụng phím tắt cmd + click trên Mac hoặc ctrl + click trên Windows/Linux trên URL và bạn sẽ thấy trang Vite React mặc định:

Trang Vite React mặc định

Bây giờ chúng ta đã có một dự án React hoạt động. Đến lúc cài đặt các thư viện mà chúng ta cần.

React Three Fiber

Để thêm r3f vào dự án của chúng ta, hãy chạy lệnh sau trong terminal của bạn:

yarn add three @types/three @react-three/fiber

Nếu terminal của bạn vẫn đang chạy development server, hãy dừng nó bằng cách nhấn cmd + c trên Mac hoặc ctrl + c trên Windows/Linux trước khi chạy lệnh trên.

Điều này sẽ cài đặt threereact-three-fiber làm dependencies cho dự án của chúng ta.

Sau khi hoàn tất, xóa tệp App.css và thay thế nội dung của index.css bằng nội dung sau:

#root {
  width: 100vw;
  height: 100vh;
}

body {
  margin: 0;
}

Điều này sẽ làm cho canvas của chúng ta chiếm toàn bộ màn hình.

Thay thế nội dung của App.jsx bằng nội dung sau:

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

function App() {
  return (
    <Canvas>
      <mesh>
        <boxGeometry />
        <meshNormalMaterial />
      </mesh>
    </Canvas>
  );
}

export default App;

Một component Canvas là gốc của mọi ứng dụng r3f. Nó là một React component tạo ra một WebGL context và một Three.js scene.

Bên trong component Canvas chúng ta có một component mesh. Một mesh là một đối tượng có thể được render trong scene. Nó được tạo thành từ một geometry và một material.

Đừng lo nếu bạn không hiểu geometry hoặc material là gì, chúng ta sẽ đề cập đến chúng trong các bài học tiếp theo. Chỉ cần biết rằng đoạn mã này sẽ render một hình lập phương ở giữa màn hình.

Sau đó chạy lại yarn dev để khởi động development server với các dependencies mới.

Bạn sẽ thấy một hình vuông ở giữa màn hình:

First r3f scene

Nhưng nó trông như 2D không phải 3D, điều này là do hình lập phương đang trước camera.

Chúng ta có thể di chuyển camera hơi lên trên, sang phảilùi lại bằng cách thêm thuộc tính camera vào component Canvas:

<Canvas camera={{ position: [3, 3, 3] }}>

Chúng ta sẽ tìm hiểu cách định vị trí trong các bài học kế tiếp.

Bây giờ hình lập phương đã có thể thấy được ở dạng 3D:

First r3f scene camera moved

Các Phiên Bản ⚠️

Three.jsReact Three Fiber là những thư viện được cập nhật thường xuyên. Điều này có nghĩa là mã mà bạn thấy trong khóa học này hoặc các hướng dẫn khác có thể hoạt động khác nếu bạn không sử dụng cùng một phiên bản.

Tại thời điểm viết khóa học này, Three.js đang chuyển đổi sang WebGPU, có khả năng gây ra những thay đổi lớn hoặc thay đổi trong cách mọi thứ được render.

Bằng cách sử dụng starter pack được cung cấp kèm với khóa học này, bạn sẽ chắc chắn có cùng các phiên bản như tôi, nhưng điều quan trọng là biết cách kiểm tra phiên bản của các phụ thuộc của bạn.

Mở tệp package.json và tìm các đối tượng dependenciesdevDependencies:

{
  "name": "react-three-fiber-starter",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
  },
  "dependencies": {
    "@react-three/drei": "^9.74.14",
    "@react-three/fiber": "^8.13.0",
    "@types/three": "^0.152.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "three": "^0.153.0"
  },
  "devDependencies": {
    "@types/react": "^18.0.37",
    "@types/react-dom": "^18.0.11",
    "@vitejs/plugin-react": "^4.0.0",
    "eslint": "^8.38.0",
    "eslint-plugin-react": "^7.32.2",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.3.4",
    "vite": "^4.3.9"
  }
}

Bạn có thể thấy rằng phiên bản của Three.js^0.153.0 và phiên bản của React Three Fiber^8.13.0.

Ký hiệu ^ có nghĩa là chúng ta đang sử dụng phiên bản semver. Điều này có nghĩa là chúng ta sẽ nhận được tất cả các cập nhật của thư viện cho đến khi có phiên bản chính tiếp theo.

Để tìm hiểu thêm về Semantic Versioning, kiểm tra liên kết này: https://devhints.io/semver

ESLint

Nếu bạn đã cài đặt tiện ích mở rộng ESLint cho Visual Studio Code, bạn sẽ thấy một số lỗi trong mã của mình.

Điều này là do tệp cấu hình mặc định do Vite tạo ra không bao gồm các quy tắc r3f.

Để khắc phục, hãy mở tệp .eslintrc.cjs và thêm dòng này vào mảng extends:

"plugin:@react-three/recommended",

Toàn bộ tệp của bạn sẽ trông như thế này:

module.exports = {
  env: { browser: true, es2020: true },
  extends: [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:react/jsx-runtime",
    "plugin:react-hooks/recommended",
    "plugin:@react-three/recommended",
  ],
  parserOptions: { ecmaVersion: "latest", sourceType: "module" },
  settings: { react: { version: "18.2" } },
  plugins: ["react-refresh"],
  rules: {
    "react-refresh/only-export-components": "warn",
  },
};

Bây giờ sau khi lưu tệp, các lỗi sẽ biến mất.

Để có thể lint mã của chúng ta, chúng ta cần cài đặt gói @react-three/eslint-plugins vào dev dependencies của dự án:

yarn add -D @react-three/eslint-plugin

-D sẽ cài đặt gói như một dev dependency. (Vì nó không cần cho bản build sản xuất cuối cùng)

Drei

Drei là một tập hợp các helpers và abstractions hữu ích trên nền r3f.

Chúng ta sẽ sử dụng nó rất nhiều trong các bài học tiếp theo để tạo ra các trải nghiệm 3D dễ dàng và nhanh chóng hơn.

Để cài đặt gói drei, hãy chạy lệnh sau trong terminal của bạn:

yarn add @react-three/drei

Kết luận

Chúng ta đã cài đặt tất cả các dependencies cần thiết cho các dự án của mình và hiện đã có một dự án r3f đang hoạt động. Đây là điểm bắt đầu để chúng ta tạo ra các trải nghiệm 3D.