React Three Fiber Hooks

Starter pack

في هذا الدرس، سوف نكتشف ما هي useThree و useFrame التي يوفرها React Three Fiber، وكيف ومتى نستخدمها.

useThree

useThree تعطي الوصول إلى نموذج state الذي يحتوي على العارض الافتراضي، المشهد، الكاميرا، حجم العرض، وما إلى ذلك.

بينما سأشرح كل خصائص state التي سنستخدمها في الوقت المناسب، يمكنك العثور على القائمة الكاملة للخصائص في التوثيق.

لاستخدامه، نحتاج إلى استيراده من @react-three/fiber، ثم استدعاؤه داخل مكوننا:

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

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

// ...

بينما تعمل هذه الطريقة لاستخدام useThree، فإنها ستسبب في إعادة تجسيد المكون عند تغييرات القيم الأخرى غير التي حصلنا عليها من التفكيك.

بدلاً من ذلك يمكننا استخدام نمط selector للحصول فقط على القيم التي نحتاجها:

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

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

بهذه الطريقة، سيعيد المكون التجسيد فقط عندما تتغير قيمة camera.

تذكر أن القيم الداخلية لـ threejs ليست تفاعلية. إذا تغيرت camera.position، لن يعيد المكون التجسيد. (لحسن الحظ)

الآن لدينا الوصول إلى الكاميرا، يمكننا تعديل fov (مجال الرؤية) للتكبير أو التصغير:

// ...

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)),
  });

  // ...
};

// ...

ملاحظات:

  • الطريقة updateProjectionMatrix مطلوبة لإخبار threejs بأن الكاميرا قد تغيرت وتحتاج إلى التحديث.
  • عن طريق تمرير قيمة سلسلة كناتج أول إلى useControls يمكننا تجميع الخصائص بواسطة مجلد.

تم تحديث مجال الرؤية للكاميرا لدينا بشكل صحيح من العناصر التحكم

useFrame

Threejs هي مكتبة تعتمد على render-loop. هذا يعني أن ما نراه على الشاشة هو نتيجة لحلقة تقوم بعرض المشهد في كل إطار. كما أن الفيديو هو تعاقب للصور، فإن المشهد ثلاثي الأبعاد هو تعاقب للإطارات.

يسمح لنا useFrame بتنفيذ الكود في كل إطار يتم عرضه، مثل تشغيل التأثيرات، وتحديث التحكمات، والرسوم المتحركة.

عند استهداف 60 إطار في الثانية، سيتم استدعاء callback 60 مرة في الثانية.

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.