‌Scenegraph — سلسله‌مراتبی بودن المان‌ها

🔹 تعریف

Scenegraph یک ساختار درختی (hierarchical) برای اشیاء صحنه است.

  • هر Object3D می‌تواند Child (فرزند) و Parent (والد) داشته باشد.

  • تغییر در والد روی فرزندان هم اثر می‌گذارد (Position, Rotation, Scale).

📌 به عبارتی: Scenegraph = «درخت صحنه»

۱️⃣ اشیاء والد و فرزند

  • والد (Parent) می‌تواند یک Scene یا هر Object3D دیگر باشد

  • فرزند (Child) می‌تواند Mesh، Group یا هر Object3D دیگری باشد

🔹 مثال

const parent = new THREE.Object3D(); scene.add(parent); const child = new THREE.Mesh( new THREE.BoxGeometry(1,1,1), new THREE.MeshStandardMaterial({ color: 0xff0000 }) ); // اضافه کردن فرزند به والد parent.add(child);

📌 حالا اگر parent را جابجا کنیم، child هم همراه آن جابجا می‌شود:

parent.position.x = 5; // فرزند هم به سمت راست منتقل می‌شود

۲️⃣ گروه‌بندی اشیاء با Group

  • برای مدیریت چند Object3D با هم از THREE.Group() استفاده می‌کنیم

  • همه اعضای گروه تحت تأثیر حرکت، چرخش و مقیاس گروه قرار می‌گیرند

🔹 مثال

const group = new THREE.Group(); const cube1 = new THREE.Mesh( new THREE.BoxGeometry(1,1,1), new THREE.MeshStandardMaterial({ color: 0x00ff00 }) ); cube1.position.x = -2; const cube2 = new THREE.Mesh( new THREE.BoxGeometry(1,1,1), new THREE.MeshStandardMaterial({ color: 0x0000ff }) ); cube2.position.x = 2; group.add(cube1); group.add(cube2); scene.add(group); // جابجایی کل گروه group.rotation.y = Math.PI/4;

📌 با چرخش یا جابجایی گروه، هر دو مکعب همزمان تغییر می‌کنند

۳️⃣ سلسله‌مراتب چند سطحی

  • یک فرزند می‌تواند خودش والد دیگر باشد

  • این امکان ایجاد سلسله‌مراتب پیچیده مثل ربات، ماشین یا شخصیت‌های انیمیشنی را می‌دهد

🔹 مثال

const torso = new THREE.Mesh( new THREE.BoxGeometry(1,2,0.5), new THREE.MeshStandardMaterial({ color: 0xffaa00 }) ); const head = new THREE.Mesh( new THREE.SphereGeometry(0.5,32,32), new THREE.MeshStandardMaterial({ color: 0xffff00 }) ); torso.add(head); // سر فرزند تنه است scene.add(torso); // حالا چرخش تنه، سر را هم حرکت می‌دهد torso.rotation.y = Math.PI/6;

۴️⃣ نکات مهم

  • Scene خودش یک Object3D است و والد تمام اشیاء است

  • استفاده از Group برای سازماندهی صحنه بسیار توصیه می‌شود

  • Position, Rotation, Scale والد روی همه فرزندان اثر می‌گذارد

  • Scenegraph باعث مدیریت بهتر و انیمیشن سلسله‌مراتبی می‌شود

۵️⃣ جمع‌بندی بصری

  • والد = کنترل کل گروه

  • فرزند = دنبال‌کننده والد

  • سلسله‌مراتب می‌تواند چند سطحی باشد

  • مناسب انیمیشن‌های پیچیده، رباتیک، خودرو یا ساختمان‌های چندقطعه‌ای