Đổ bóng

Starter pack

Trong đồ họa 3D, đổ bóng được sử dụng để mô phỏng hiệu ứng ánh sáng chiếu vào một đối tượng và đổ bóng lên một đối tượng khác.

Đổ bóng và nhận bóng

React Three Fiber làm cho việc thêm bóng vào một cảnh trở nên dễ dàng.

Điều đầu tiên chúng ta cần làm là kích hoạt bóng toàn cầu bằng cách thêm thuộc tính shadows vào thành phần <Canvas />:

<Canvas shadows />

Sau đó, bạn cần kích hoạt bóng trên các đối tượng sẽ đổ bóng:

<mesh castShadow />

Và trên các đối tượng sẽ nhận bóng:

<mesh receiveShadow />

Tất nhiên, bạn có thể kích hoạt cả hai trên cùng một đối tượng:

<mesh castShadow receiveShadow />

Thực hiện trên dự án của chúng ta:

<Canvas shadows camera={{ position: [0, 3, 3] }}>
  {/* ... */}
  <mesh rotation-y={Math.PI / 4} castShadow>
    <boxGeometry />
    <meshStandardMaterial color="white" />
  </mesh>

  <mesh rotation-x={-Math.PI / 2} position-y={-0.5} receiveShadow>
    <planeGeometry args={[5, 5]} />
    <meshStandardMaterial color="white" />
  </mesh>
</Canvas>

Shadows not working

Chúng ta đã thêm shadows vào <Canvas />, castShadow trên khối lập phương và receiveShadow trên mặt phẳng nhưng không có gì xảy ra.

Điều này là do chúng ta cũng cần thông báo đèn nào sẽ đổ bóng.

{
  /* ... */
}
<directionalLight position={[5, 5, 5]} intensity={0.5} castShadow />;
{
  /* ... */
}

Shadows one light

Bây giờ, chúng ta có thể thấy bóng của khối lập phương trên mặt phẳng. Chúng ta cũng có thể thiết lập bóng từ nhiều nguồn sáng:

{/* ... */}
<directionalLight position={[5, 5, 5]} intensity={0.5} castShadow />
<directionalLight position={[-5, 5, 5]} intensity={0.5} color="red" castShadow />
{/* ... */}

Shadows multiple lights

Hãy xem bóng dưới sáng ảnh hưởng bởi màu của đèn như thế nào.

Thêm một hình cầu vào cảnh:

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.