Promo Icon

тЪбя╕П Limited Black Friday Deal

Get 50% off on the React Three Fiber Ultimate Course with the promo code ULTIMATE50

Buy Now

$85.00 $42.50

Events

Starter pack

рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ 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"} />

Change color on hover

рдЕрдм, рдЬрдм рдорд╛рдЙрд╕ рдЗрд╕рдХреЗ рдКрдкрд░ рд╣реЛ рддреЛ 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 рджреНрд╡рд╛рд░рд╛ рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд░рдг рдмреАрдЪ рдХреЗ рдЧреЛрд▓реЗ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдмрдбрд╝реЗ рдЧреЛрд▓реЗ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред

bubbleEvent

рдШрдЯрдирд╛ рдХреЗ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдШрдЯрдирд╛ рдкрд░ stopPropagation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

End of lesson preview

To get access to the entire lesson, you need to purchase the course.