Introduction - React Three Fiber
React-three-fiber is a React renderer for three.js.
r3f.docs.pmnd.rs
1. React-three-fiber
React-three-fiber๋ React ๊ธฐ๋ฐ์ผ๋ก Three.js๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Three.js๋ 3D ๊ทธ๋ํฝ ๋ ๋๋ง์ ์์ด ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง๋ง, DOM๊ณผ๋ ๋ณ๊ฐ์ ๋ ๋๋ง ํ๊ฒฝ์ ํ์๋ก ํฉ๋๋ค. React-three-fiber๋ ์ด๋ฅผ React์ ์ํ ๊ด๋ฆฌ ๋ฐ ์ปดํฌ๋ํธ ๊ตฌ์กฐ์ ํตํฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค.
https://r3f.docs.pmnd.rs/getting-started/introduction
Introduction - React Three Fiber
React-three-fiber is a React renderer for three.js.
r3f.docs.pmnd.rs
2. @react-three/drei
DREI-> React Three Fiber ์ปดํฌ๋ํธ์ ํ๋ฌ๊ทธ์ธ๋ค์ ๋ฌถ์ด๋์ ํจํค์ง
https://github.com/pmndrs/drei
GitHub - pmndrs/drei: ๐ฅ useful helpers for react-three-fiber
๐ฅ useful helpers for react-three-fiber. Contribute to pmndrs/drei development by creating an account on GitHub.
github.com
@react-three/drei๋ React-three-fiber์์ ์์ฃผ ์ฌ์ฉํ๋ Three.js ๊ธฐ๋ฅ๊ณผ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํ๋ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ณต์กํ Three.js์ ์ค์ ์ ๋จ์ํํ๊ณ , ์ ๋๋ฉ์ด์ ์ด๋ ์กฐ๋ช , ์นด๋ฉ๋ผ ์ปจํธ๋กค ๋ฑ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ์ฌ์ ์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
1. Three.js๋ Canvas ๋ฅผ ์ฌ์ฉํด์ ๋ง๋ ๋ค.
2. R3F ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ ๋๋ฉด, <Canvas> ๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์
import React, { useRef } from 'react';
import { Canvas, useFrame } from '@react-three/fiber';
import { OrbitControls } from '@react-three/drei';
function RotatingBox() {
const boxRef = useRef();
// ๋งค ํ๋ ์๋ง๋ค ํ์
useFrame(() => {
boxRef.current.rotation.x += 0.01;
boxRef.current.rotation.y += 0.01;
});
return (
<mesh ref={boxRef}>
<boxGeometry args={[1, 1, 1]} />
<meshStandardMaterial color="orange" />
</mesh>
);
}
export default function App() {
return (
<Canvas>
{/* OrbitControls๋ฅผ ํตํด 3D ์ฌ์ ๋ง์ฐ์ค๋ก ํ์ */}
<OrbitControls />
{/* ๊ธฐ๋ณธ์ ์ธ ์กฐ๋ช
*/}
<ambientLight intensity={0.5} />
<RotatingBox />
</Canvas>
);
}
์ฃผ์ ์ปดํฌ๋ํธ ์ค๋ช
- Canvas: 3D ์ฌ์ ๋ ๋๋งํ๊ธฐ ์ํ React-three-fiber์ ๊ธฐ๋ณธ ์ปจํ ์ด๋.
- mesh: Three.js์์ ๋ฌผ์ฒด๋ฅผ ์ ์ํ๋ ๊ธฐ๋ณธ ๋จ์.
- OrbitControls (@react-three/drei): ๋ง์ฐ์ค๋ก ์นด๋ฉ๋ผ๋ฅผ ์ด๋ํ๊ณ ํ์ ํ ์ ์๋ ์ปจํธ๋กค๋ฌ.
- useFrame: ์ ๋๋ฉ์ด์ ํ๋ ์๋ง๋ค ์คํ๋๋ ๋ก์ง์ ์ ์ํ ๋ ์ฌ์ฉ.
- useTexture (@react-three/drei): ํ ์ค์ฒ๋ฅผ ๋ก๋ํ๋ ๊ฐ๋จํ ์ ํธ๋ฆฌํฐ ํ .