実装詳細とアーキテクチャ要件
Role Cが担当する「フロントエンド&3Dモジュール」は、保護者が直感的に状況を把握できるUIを提供する役割を担います。「巨大な3Dモデルによるブラウザクラッシュ」や「バックグラウンド時のWebSocket切断」を回避し、モバイル端末でもサクサク動く堅牢なWebアプリケーションを構築する必要があります。
目的: Polycamの3Dモデルをブラウザ上でレンダリングする。
@react-three/fiber をセットアップし、useGLTF フックでモデルを読み込みシーンに配置。OrbitControlsで視点操作を可能にする。
【重要】技術的課題と根本解決:
スキャンした高精細モデルはファイルサイズが大きく、モバイル端末でブラウザがクラッシュします。必ずBlender等で事前にポリゴン数を削減(Decimate)し、テクスチャを圧縮(Draco圧縮等)した軽量な .glb ファイルを使用してください。また、Reactの Suspense を用いてローディングUIを実装しUXの低下を防ぐこと。
目的: 危険検知アラートをブラウザにリアルタイムでポップアップさせる。
aws-iot-device-sdk-v2 (ブラウザ版) または mqtt.js を使用し、IoT CoreにWebSocket接続してトピックをSubscribeする。
【重要】技術的課題と根本解決:
スマホの画面ロックやタブのバックグラウンド化によりWebSocket接続は頻繁に切断されます。切断を検知して自動再接続(Exponential Backoff)を行うロジックを実装し、UI上に「接続中/オフライン」のステータスインジケーターを必ず配置して状態の不整合を防いでください。
目的: 受信したアラートの座標を3D空間上に視覚化する。
【重要】技術的課題と根本解決:
2Dから3Dへの変換はカメラの設置角度や画角に依存するため単純な計算ではずれます。Three.jsの Raycaster を用いて、仮想カメラから3Dモデルの床面に向けてレイを飛ばし、交差判定(Intersection)によって正確な3D座標を算出するロジックを実装してください。
目的: 過去の危険エリアを3D空間上に重畳表示する。
【重要】技術的課題と根本解決:
大量のデータポイントを個別のメッシュとして描画するとドローコールが増大しFPSが著しく低下します。必ずThree.jsの InstancedMesh を使用するか、カスタムシェーダーを用いてGPU側で一括描画するパフォーマンス最適化を行ってください。