🐙
【React Three Fiber】Reactで作る3D【#11DisplacementScale】
【#11DisplacementScale】
YouTube: https://youtu.be/mJqcgwiUTNE
今回は「displacementScale」を使用して、
平面の画像に立体感を持たせる処理と
3Dオブジェクトの「影」のつけ方について解説します。
src/components/GeoTexture.tsx
import { Plane, Sphere, useTexture } from '@react-three/drei'
import { useControls } from 'leva'
import { DoubleSide } from 'three'
const GeoTexture = () => {
const moonTexture = useTexture({
map: '/lroc_color_poles_1k.jpg',
displacementMap: '/ldem_3_8bit.jpg',
})
const { displacementScale } = useControls({
displacementScale: {
value: 0,
min: -2,
max: 2,
step: 0.1,
},
})
return (
<>
<Sphere position={[0, 0, 2]} castShadow>
<meshStandardMaterial map={moonTexture.map} />
</Sphere>
<Plane args={[10, 10, 128, 128]} receiveShadow>
<meshStandardMaterial
side={DoubleSide}
{...moonTexture}
transparent
displacementScale={displacementScale}
/>
</Plane>
</>
)
}
export default GeoTexture
src/App.tsx
import { Canvas } from '@react-three/fiber'
import { OrbitControls } from '@react-three/drei'
import GeoBox from './components/GeoBox'
import GeoText from './components/GeoText'
import GeoText3d from './components/GeoText3d'
import GeoTexture from './components/GeoTexture'
function App() {
return (
<div className="w-full h-screen">
<Canvas shadows>
<ambientLight intensity={0.1} />
<directionalLight position={[0, 0, 5]} castShadow />
{/* <GeoBox /> */}
{/* <GeoText /> */}
{/* <GeoText3d /> */}
<GeoTexture />
<OrbitControls />
</Canvas>
</div>
)
}
export default App
3Dオブジェクトに影をつけるには、
「Canvas」に「shadows」
「directionalLight」に「castShadow」
「Sphere」に「castShadow」
「Plane」に「receiveShadow」
を設定します。
Discussion