ここまでの議論を 次に再開するときすぐ作業に戻れるように、
「継続メモ(最小構成の階層メッシュOS版)」 として整理しておくね。
🗂 継続メモ(Three.js × Flask × 階層メッシュOS 最小構成)
■ 目的(今回の到達点)
卵型メッシュ(UV球)を対象に:
- 連続面を選択できる(BFS によるフェイスグループ抽出)
- 選択部分をシンボリックリンク化できる(LinkNode)
- 選択部分だけ拡大表示できる(LOD)
- 選択部分だけ細分化できる(SubdivisionModifier)
- 選択部分を編集できる(TransformControls)
これらを Flask + Three.js の最小構成で実現するという方針。
■ Flask 側の構造(managa/src)
managa/src/
├── controllers/
│ ├── index.py
│ ├── ai_api.py(後でAI連携)
│ └── mesh_api.py(必要なら)
├── static_managa/
│ └── js/
│ ├── core/(Three.js基盤)
│ ├── meshos/(階層メッシュOS)
│ ├── editor/(選択・編集)
│ └── app.js(統合)
└── templates/
└── editor.html
■ Three.js 側の OS レイヤー(最小構成)
1. MeshOS(階層メッシュ)
MeshNode- 実体メッシュ(BufferGeometry + Material)
- 子ノードを持てる
LinkNode- 元メッシュを参照するシンボリックリンク
InstancedMeshを使用
Subdivider- SubdivisionModifier による細分化
LODManager- 選択部分だけ LOD を持たせる
2. SelectionOS(連続面選択)
- Raycaster で faceIndex を取得
- BFS で隣接面をたどり 連続面グループ を抽出
- 抽出した面だけで新しい MeshNode を作る
3. EditOS(編集)
- TransformControls を選択部分にアタッチ
- 頂点編集は後で追加可能(position属性操作)
■ 卵型メッシュ(UV球)での最小実装
EggMesh.js- SphereGeometry(1, 32, 32) を返すだけ
- 卵型は後で差し替え可能
■ app.js の流れ(最小構成)
- 卵型メッシュを生成して scene に追加
- クリック → faceIndex → 連続面抽出
- 抽出面から部分メッシュを生成
- LinkNode を作成して配置
- SubdivisionModifier で細分化
- TransformControls で編集可能にする
■ 次にやるべきこと(再開ポイント)
★ 最優先(次回の作業)
「抽出した面から部分メッシュを生成する関数」
extractMeshFromFaces(egg, faces)
これを実装すると、最小構成が実際に動く。
その後のステップ
- LinkNode の最適化(InstanceMesh の扱い)
- LOD の自動生成ルール
- Flask 側の AI API と統合(構造 JSON → MeshNode)
必要なときにこのメモを読み返せば、すぐ続きを再開できるようにしてあるよ。