Three.js From Zero · Article s7-10
S7-10 Production Product Viewer
Season 7 · Article 10 · Finale
Production Product Viewer
Everything from S7 in one app: HTML toolbar, worldspace labels, canvas-texture UI, touch gestures, accessibility, crisp text, loading state. A shippable e-commerce 3D viewer.
🏁 Season 7 finale — UI & UX in 3D concludes
The demo
Eames Chair
Walnut + leather
30 × 28 × 36 in
$1,290
30 × 28 × 36 in
$1,290
What's in here
- HTML toolbar (S7-02): logo, action buttons.
- Worldspace labels (S7-03): part names pop out of features.
- Touch gestures (S7-05): orbit with drag, pinch zoom. Works on desktop + mobile.
- A11y (S7-07): role="application", aria-label, keyboard nav (arrows + Tab).
- Text (S7-08): crisp via canvas-texture and DOM overlay.
- Transitions (S7-09): loading spinner → fade-out on ready.
- Color swatches: change material color, announced via aria-live.
Code structure
class ProductViewer {
constructor(root) {
this.root = root;
this.initThree(); // scene, camera, renderer
this.loadAssets(); // with LoadingManager
this.initGestures(); // pointer events
this.initKeyboard(); // arrow keys, Tab hotspots
this.initControls(); // swatch buttons, action handlers
this.startLoop();
}
announce(msg) { this.announcer.textContent = msg; }
setColor(hex) { this.mesh.material.color.set(hex); this.announce('Color: ' + hex); }
}
Season 7 recap
3D UI mental model → HUDs → worldspace labels → canvas-texture → touch → VR → accessibility → text → transitions → production viewer.
Ten articles covering every UI layer you'll touch. Mix and match for your app.
Season 8 next
Production Architecture. State management. Entity-component systems. Authoring tools. Debug overlays. Game loops. Testing 3D apps. The underlying engineering that turns a demo into a product.