A Dive Into React And Three.js Using react-three-fiber

Today, we’re going to learn how to configure and use react-three-fiber for building and displaying 3D models and animations in React and React Native applications.

This tutorial is for developers who want to learn more about 3D model animations in the web using React and for anyone who’s had limitations with Three.js like inability to create canvas, bind user events like click events and start a render loop, react-three-fiber comes with these methods. We’ll be building a 3D model to better understand how to build Three.js 3D models using react-three-fiber.

Getting Started With react-three-fiber

Three.js is a library that makes it easier to create 3D graphics in the browser, it uses a canvas + WebGL to display the 3D models and animations, you can learn more here.

react-three-fiber is a React renderer for Three.js on the web and react-native, it is a boost to the speed at which you create 3D models and animations with Three.js, some examples of sites with 3D models and animations can be found here. react-three-fiber reduces the time spent on animations because of its reusable components, binding events and render loop, first let’s take a look at what is Three.js.

react-three-fiber allows us to build components of threeJS code using React state, hooks and props, it also comes with the following elements:

mesh A property that helps define the shape of our models
hooks react-three-fiber defines hooks that help us write functions that help define user events such as onClick and onPointOver
Component-based and render loop react-three-fiber is component-based and renders according to a change in state or the store

How To Use react-three-fiber

To use react-three-fiber, you start by using the commands below:

NPM

npm i three react-three-fiber

YARN

yarn add three react-three-fiber 

Note: For react-three-fiber to work, you’ll need to install three (Three.js) as we did above.

Building A React 3D Ludo Dice Model And Animation Project

Here we are going to build a 3D ludo dice model using react-three-fiber like we have in the video below.

Rendering 3D Ludo Dice Box

In this section, we are going to render our Box component in our App.js and complete our 3d ludo box, to do that first, let’s create an App component and wrap it with a Canvas tag, this is to render our 3D models, let’s do that below.

const App = () => {
  return (
    <Canvas>
    </Canvas>
  );
}
export default App;

Next, let’s add a light to the boxes, react-three-fiber provides us with three components to light our models, they are as follows

  • ambientLight
    This is used to light all objects in a scene or model equally, it accepts props such as the intensity of the light, this will light the body of the ludo dice.
  • spotLight
    This light is emitted from a single direction, and it increases as the size of the object increases, this will light the points of the ludo dice.
  • pointLight
    This works similar to the light of a light bulb, light is emitted from a single point to all directions, this will be necessary for the active state of our application.

Let’s implement the above on our application below.

const App = () => {
  return (
    <Canvas>
      <ambientLight intensity={0.5} />
      <spotLight position={[10, 10, 10]} angle={0.15} penumbra={1} />
      <pointLight position={[-10, -10, -10]} />
    </Canvas>
  );
}
export default App;

In the above code, we imported the ambientLight component from react-three-fiber and added an intensity of 0.5 to it, next we added a position and angle to our spotLight and pointLight component. The final step to our application is to render our box component and add a position to the ludo dice boxes, we’d do that in the code below

<Box position={[-1.2, 0, 0]} />
<Box position={[2.5, 0, 0]} />

When done, your ludo 3D dice should look similar to the image below:

A working demo is available on CodeSandbox.

Conclusion

react-three-fiber has made rendering 3D models and animations easier to create for React and React Native applications. By building our 3D ludo dice box, we’ve learned about the basics of Three.js alongside its components and benefits of react-three-fiber as well as how to use it.

You can take this further by building 3D models and animations in your React and Native applications by using react-three-fiber on your own. I’d love to see what new things you come up with!

You can read more on Three.js and react-three-fiber in the references below.

This content was originally published here.