yarn add three @types/three @react-three/fiber
return (
<>
<Canvas>
</Canvas>
</>
)
return (
<>
<Canvas>
<mesh>
<boxGeometry />
</mesh>
</Canvas>
</>
)
<>
<Canvas>
<directionalLight position={[0, 0, 2]}/>
<ambientLight />
<mesh position={[1, 0, 0]}>
<boxGeometry args={[2, 2, 2]} />
<meshStandardMaterial color={"orange"}/>
</mesh>
</Canvas>
</>
const Cube = () => {
return (
<mesh position={[2, 0, 0]}>
<boxGeometry />
<meshStandardMaterial color={"orange"}/>
</mesh>
)
}
<group position={[-1, 0, 0]}>
<Cube position={[1, 0, 0]} color={"green"} size={[1, 1, 1]}/>
<Cube position={[-1, 0, 0]} color={"hotpink"} size={[1, 1, 1]}/>
<Cube position={[-1, 2, 0]} color={"hotpink"} size={[1, 1, 1]}/>
<Cube position={[1, 2, 0]} color={"hotpink"} size={[1, 1, 1]}/>
</group>
<ambientLight intensity={0.2}/>
<ambientLight intensity={0.2}/>
useFrame((state, delta, xrFrame) => {
// state : 현재 상태
// delta : 현재 프레임과 다음 프레임 시간 차이 ( 초 )
})
const Cube = ({position, size, color}: {position: [number, number, number], size: [number, number, number], color: string}) => {
const ref = useRef<any>();
useFrame((state, delta, frame) => {
ref.current.rotation.x += delta
})
return (
<mesh position={position} ref={ref}>
<boxGeometry args={size}/>
<meshStandardMaterial color={color}/>
</mesh>
)
}
https://threejs.org/docs/#api/en/geometries/SphereGeometry
const Sphere = ({position, args, color}: {position: [number, number, number], args: [number, number, number], color: string}) => {
return (
<mesh position={position}>
<sphereGeometry args={args}/>
<meshStandardMaterial color={color}/>
</mesh>
)
}
https://threejs.org/docs/#api/en/geometries/TorusGeometry
const Torus = ({position, args, color}: {position: [number, number, number], args: [number, number, number, number], color: string}) => {
return (
<mesh position={position}>
<torusGeometry args={args}/>
<meshStandardMaterial color={color}/>
</mesh>
)
}
https://threejs.org/docs/#api/en/geometries/TorusKnotGeometry
const Sphere = ({position, args, color}: {position: [number, number, number], args: [number, number, number], color: string}) => {
const ref = useRef<any>();
const [isHovered, setIsHovered] = useState(false);
useFrame((state, delta, frame) => {
ref.current.rotation.y += delta * .2
})
return (
<mesh position={position} ref={ref} onPointerEnter={(event) => {
event.stopPropagation();
setIsHovered(true);
}} onPointerLeave={() => {
setIsHovered(false);
}}>
<sphereGeometry args={args}/>
<meshStandardMaterial color={isHovered ? "orange" : "lightblue"} wireframe/>
</mesh>
)
}
<Canvas>
<OrbitControls />
...
...
</Canvas>
const directionalLightRef = useRef<any>()
useHelper(directionalLightRef, DirectionalLightHelper);
<directionalLight position={[0, 0, 2]} intensity={0.5} ref={directionalLightRef}/>
yarn add leva
const { lightColor, lightIntensity } = useControls({
lightColor: 'white',
lightIntensity: {
value: 0.5,
min: 0,
max: 5,
},
})
<directionalLight position={[0, 0, 2]} intensity={lightIntensity} ref={directionalLightRef} color={lightColor}/>