тЪбя╕П Limited Black Friday Deal
Get 50% off on the React Three Fiber Ultimate Course with the promo code ULTIMATE50
Buy Now
Fundamentals
Core
Master
Shaders
Events
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ React Three Fiber рдореЗрдВ рдорд╛рдЙрд╕, рдХреАрдмреЛрд░реНрдб рдФрд░ рдЯрдЪ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реА 3D рд╕реАрди рдХреЛ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдФрд░ рдЗрдорд░реНрд╕рд┐рд╡ рдмрдирд╛ рд╕рдХреЗрдВред
Mouse
Meshes рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╡реЗрдВрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдорд╛рдЙрд╕ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдорд╛рдЙрд╕ mesh рдХреЗ рдКрдкрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╣рдо onPointerEnter
рдФрд░ onPointerLeave
рдЗрд╡реЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЬрдм рдорд╛рдЙрд╕ рд╣рдорд╛рд░реЗ sphere рдХреЗ рдКрдкрд░ рд╣реЛ рддреЛ рдЗрд╕рдХреЗ рд░рдВрдЧ рдХреЛ рдмрджрд▓реЗрдВред
рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ state рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдорд╛рдЙрд╕ sphere рдХреЗ рдКрдкрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
const [hovered, setHovered] = useState(false);
рдлрд┐рд░ рд╣рдо <mesh />
рдХреЙрдореНрдкреЛрдиреЗрдиреНрдЯ рдкрд░ onPointerEnter
рдФрд░ onPointerLeave
рдЗрд╡реЗрдВрдЯреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
<mesh {...props} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} > {/* ... */} </mesh>
рдЕрдВрдд рдореЗрдВ, рд╣рдо material рдХреЗ рд░рдВрдЧ рдХреЛ hovered
state рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ conditional рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ:
<meshStandardMaterial color={hovered ? "pink" : "white"} />
рдЕрдм, рдЬрдм рдорд╛рдЙрд╕ рдЗрд╕рдХреЗ рдКрдкрд░ рд╣реЛ рддреЛ sphere рдЧреБрд▓рд╛рдмреА рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдпрд╣ рднреА рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдЙрд╕ mesh рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, onClick
рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рд╣рдо рдПрдХ state рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ sphere рдЪрдпрдирд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ:
const [selected, setSelected] = useState(false);
рдлрд┐рд░, рд╣рдо <mesh />
рдХреЙрдореНрдкреЛрдиреЗрдиреНрдЯ рдкрд░ onClick
рдЗрд╡реЗрдВрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
<mesh {...props} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} onClick={() => setSelected(!selected)} > {/* ... */} </mesh>
рд╣рдо selected
state рдХреЛ рдЙрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рд╣рдо material рдХреЗ рд░рдВрдЧ рдХреЛ active
state рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ conditional рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ:
let color = hovered ? "pink" : "white"; if (selected) { color = "hotpink"; } return ( <mesh {...props} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} onClick={() => setSelected(!selected)} > <sphereGeometry args={[0.5, 64, 64]} /> <meshStandardMaterial color={color} /> </mesh> );
рдореИрдВрдиреЗ рд░рдВрдЧ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рддрд╛рдХрд┐ рджреЛ ternary operators рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рдкрдбрд╝реЗред
рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдмрдмрд▓рд┐рдВрдЧ
рдЖрдЗрдП рд╣рдорд╛рд░реА рддреАрди рдЧреЛрд▓реЗ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдмрдбрд╝рд╛ рдЧреЛрд▓рд╛ рдЬреЛрдбрд╝реЗрдВред
// ... export const Experience = () => { return ( <> <MoveableSphere scale={3} position-z={-10} /> <MoveableSphere /> <MoveableSphere position-x={-2} /> <MoveableSphere position-x={2} /> <ContactShadows rotation-x={Math.PI / 2} position={[0, -1.6, 0]} opacity={0.42} /> <Environment preset="sunset" /> </> ); };
рдпрджрд┐ рд╣рдо рдмреАрдЪ рдХреЗ рдЧреЛрд▓реЗ рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реЗ рдЧреЛрд▓реЗ рдкрд░ рднреА onPointerEnter
рдФрд░ onPointerLeave
рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдШрдЯрдирд╛рдПрдВ рдмрдмрд▓рд┐рдВрдЧ рдХрд░ рд░рд╣реА рд╣реЛрддреА рд╣реИрдВред
React Three Fiber рджреНрд╡рд╛рд░рд╛ рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд░рдг рдмреАрдЪ рдХреЗ рдЧреЛрд▓реЗ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдмрдбрд╝реЗ рдЧреЛрд▓реЗ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред
рдШрдЯрдирд╛ рдХреЗ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдШрдЯрдирд╛ рдкрд░ stopPropagation
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
End of lesson preview
To get access to the entire lesson, you need to purchase the course.