Instant World Tracking
Before setting up instant world tracking, you must first add or replace any existing camera you have in your scene. Find out more here.
To track content from a point on a surface in front of the user, use the InstantTracker
component:
<InstantTracker placementMode >
{/*PLACE CONTENT TO APPEAR IN THE WORLD HERE*/}
</InstantTracker>
With the placementMode
prop set, the instant tracker will let the user choose a location for the content by pointing their camera around the room. When the user indicates that they're happy with the placement, e.g. by tapping a button on-screen, remove that parameter to fix the content in that location:
const [placementMode, setPlacementMode] = useState(true);
return (
<>
<ZapparCanvas>
<ZapparCamera />
<InstantTracker placementMode={placementMode} >
<mesh position={[0, 0, -5]}>
<sphereBufferGeometry />
<meshStandardMaterial color="hotpink" />
</mesh>
</InstantTracker>
<directionalLight position={[2.5, 8, 5]} intensity={1.5} />
</ZapparCanvas>
<div
id="zappar-placement-ui"
onClick={() => {
setPlacementMode((currentPlacementMode) => !currentPlacementMode);
}}
>
Tap here to
{placementMode ? " place " : " pick up "}
the object
</div>
</>
);
The group provides a coordinate system that has its origin at the point that's been set, with the positive Y coordinate pointing up out of the surface, and the X and Z coordinates in the plane of the surface.
Default Placement UI
For your convenience, a default placement UI is available. This can be used by simply passing in a placementUI
prop with values placement-only
or toggle
.
A simple experience which uses placementUI
may look like this:
export default function App() {
return (
<ZapparCanvas>
<ZapparCamera />
<InstantTracker
placementUI="placement-only"
placementCameraOffset={[0, 0, -10]}
>
<mesh>
<sphereBufferGeometry />
<meshStandardMaterial color="hotpink" />
</mesh>
</InstantTracker>
<directionalLight position={[2.5, 8, 5]} intensity={1.5} />
</ZapparCanvas>
);
}