holodepth

Three.js · Çoklu model · Object3D · Pivot

Pivot yönetimi: Hareketin ağırlık merkezini kontrol etmek

Pivot, bir Object3D düğümünde dönüş (rotation) ve ölçek (scale) işlemlerinin bağlandığı yerel köktur: yerel koordinatların başlangıcı (0, 0, 0)dır. Kısaca aynı açı değerleri bile, pivot neredeyse hareketin «hangi nokta etrafında» gerçekleşeceğini o noktadan belirler.

position çocuğu ebeveynin uzayında kaydırır; rotation ve scale ise o düğümün yerel başlangıcına göre uygulanır. Bu sayfada sıra şöyle: önce tipik pivot hatasının belirtisi, sonra modeli yeniden export etmeden düzeltme (grup ve geometri), ardından nesne türüne göre beklentiler; en sonda pivotun ölçeğe etkisi ve tek bakışta özet tablo yer alır — böylece üst başlık tanımı kalır, alt bölümler birbirinin yerine geçmez.

Ebeveyn–çocuk zinciri ve menteşe gibi bağların kurulması için Model parenting; birden fazla kökü sahnede birleştirme için Scene graph · runtime sayfalarına bakın — burada yalnızca «dönüş/ölçek referansını nereye koyuyorum?» sorusu işlenir.

Yanlış pivot = yanlış fizik (rotation sorunları)

Geometrik merkez, görsel denge için kullanışlıdır; dönüş ekseni olarak seçmek ise çoğu mekanik parçada yanlıştır. Pivot, «cismin ağırlık merkezi nerede?» sorusunun cevabı değil; «kısıt (menteşe, mil, eklem) nerede ve etrafında ne dönüyor?» sorusunun cevabıdır.

  • Belirti: Kanat, kol veya kapı gibi uzun formlar, beklediğiniz menteşe/eklem yerine gövdenin ortasından dönüyorsa pivot genelde merkeze sabitlenmiştir.
  • Algı: Matematiksel olarak geçerli bir dönüş bile, kısıtla örtüşmediğinde inandırıcılığı düşürür; izleyici hatayı adlandırmasa da hareketi «havada» hisseder.

Pivot Playground aşağıda tek bir kapı levhası ile iki durumu üst üste gösterir: aynı animasyon açısı, farklı dönüş referansı. İsterseniz orbit ile sahneyi çevirin; pivot işaretini açıp kapatarak eksenin nerede olduğunu netleştirin.

Canlı lab · Kapı menteşesi · r170

Tek model, iki state: yanlış modda eksen levhanın ortasından (pembe çizgi + hafif kırmızı ton); doğru modda menteşede (turkuaz çizgi + hafif teal ton). Arkadan rim ışık levha kenarını ayırır; küre ve çizgi görsel yardım kutusundan açılıp kapanır.
Pivot modu
Görsel yardım

Görsel fark (aynı levha)
Durum Etki
Wrong Kapı ortadan döner; menteşe hissi yoktur.
Correct Kanat menteşe ekseninde açılır.

Aşağıdaki bölümde aynı fikri kodla (grup sarmalayıcı / geometri translate) genelleştiririz; senaryolar başlığında kapı dışındaki örnekler (mil, eklem zinciri) özetlenir.

Modelleme hatalarını runtime’da düzeltmek

Kaynak dosyada pivotu düzeltmek en temizidir (Blender, Maya, 3ds Max vb.). Stok glTF / FBX modellerinde ise kök sıklıkla dünya öncülüğünde (0, 0, 0)’a yapışık veya geometriyle hizasız kalır. Pivot Playground’daki Correct düzeni, aşağıdaki grup yönteminin birebir görselidir. İki teknik yol aynı soruya farklı cevap verir: biri sahne hiyerarşisinde yeni kök ekler, diğeri vertex verisini oynatır.

A. Grup (wrapper) stratejisi

THREE.Group ile sarmalamak, geometriyi veya dosyayı değiştirmeden pivotu taşır: dönüş artık grubun yerel kökünde uygulanır.

  1. Boş bir THREE.Group oluşturup dünya veya ebeveyn uzayında, dönmesi gereken eksen üzerinde konumlandırın.
  2. Modeli (mesh veya alt sahne grafiği) grubun çocuğu yapın.
  3. Çocuğun position (ve gerekirse rotation) değerleriyle gövdeyi öyle kaydırın ki gerçek dönüş hattı grubun (0,0,0)’ına denk gelsin.

Sonuç: Animasyonu gruba verirsiniz; alt model stok halinde kalabilir. Undo ve takım çalışması açısından genelde tercih edilen yoldur.

B. Geometriyi öteleme (BufferGeometry.translate)

mesh.geometry.translate(x, y, z), düğümün position’ını değiştirmeden köşeleri (vertices) kaydırır; yerel kök ile örgü arasındaki ilişki kalıcı olarak değişir. Aynı BufferGeometry örneğini paylaşan birden fazla mesh varsa hepsi etkilenir; bounding hesaplarını gerekiyorsa yenileyin.

Örnek kod kesiti

Aşağıdaki blok, yerel ötelemeden sonra sınırları güncellemeyi hatırlatır; sözdizimi renkleri sitenin Prism teması ile (prism-holodepth.css) uygulanır.

// Örnek: geometriyi yerelde x ekseninde kaydırma
mesh.geometry.translate(offsetX, 0, 0);
mesh.geometry.computeBoundingSphere(); // gerektiğinde sınırları güncelleyin

Kritik kullanım senaryoları

Burada her satır farklı bir kısıt türüne karşılık gelir: menteşe (doğrusal eks), eklem zinciri (hiyerarşi), dönme simetrisi (dairesel gövde). Aynı «pivotu doğru yere koy» ilkesi, uygulama alanına göre farklı geometrik hedef demektir.

Kapılar ve pencereler

Dönüş ekseni, kanadın menteşe doğrusu ile çakışmalıdır; pivotu yan veya üst/alt köşeye taşımak için pratikte çoğunlukla grup stratejisinde anlatılan Group yolu kullanılır. Pencerelerde menteşe yönü farklı olsa da kural aynıdır: yerel Y veya X hangisi «açılım ekseni»yse, kök o eksen üzerinde sabit kalmalıdır.

Mekanik parçalar (dişliler ve robot kolları)

Burada mesele tek bir parçanın merkezi değil, zincirdeki her eklem için ayrı köktür: omuz, dirsek, bilek düğümlerinin her birinin pivotu ilgili mafsalın dönüş merkezine oturmalıdır. Üst eklem döndüğünde alttakilerin taşınması parenting ile gelir; yanlış pivot ise «kol gövdeden kopmuş» gibi bağımsız dönüşler üretir.

Dönen objeler (pervaneler ve tekerlekler)

Silindirik gövdelerde hedef geometrik simetridir: dönüş ekseni, dairenin geometrik merkezinden ve mümkünse kütle dağılımının dengelediği noktadan geçmelidir. Küçük bir eksen kayması, yüksek hızda gözle görülür yalpalama (wobble) üretir; burada menteşe değil, mil hizalaması ön plandadır.

HoloDepth teknik notu: Pivot ve scale etkisi

Üst bölümlerde pivotu dönüş ekseni olarak düşündük. Aynı yerel kök, scale uygulandığında da büyümenin hangi yöne «yaslandığını» belirler; bu animasyon tasarımıdır; üstteki «yanlış pivot» teşhisiyle aynı şey değildir; burada bilinçli görsel tercih söz konusudur.

  • Kök gövdeyle çakışıkken ölçek genelde daha simetrik görünür.
  • Kök zemine yakınsa büyüme yukarı doğru «kalkan» hissi verir (ağaç, bina, bar dolumu).
  • Kök bir kenara yakınsa ölçek, o kenardan uzaklaşan yöne doğru genişler (panel açılımı, kapı pervazına yaslanan büyüme vb.).

UI öğelerinde kök sıklıkla sol üst veya merkez seçilir; burada amaç fizik değil hizadır — tablodaki UI satırıyla uyumludur.

HoloDepth özet stratejisi

Tablo yalnızca karar özeti içindir; kapı ile dairesel dönen gövde ayrımı senaryolar bölümünde, grup ile translate ayrımı runtime düzeltme bölümünde, ölçek hissi pivot ve scale bölümünde ayrıntılandı.

Obje tipi İdeal pivot konumu Uygulama yöntemi
Karakter Ayak tabanlarının tam ortası Zemine tam basması için; genelde grup veya iskelet kökü.
Kapı Menteşe kenarı (dikey aks) Gerçekçi açılma için; Group sarmalayıcı veya geometri translate.
Pervane Geometrik merkez Yalpalama olmaması için; merkezleme modelde veya ölçümle doğrulanır.
UI paneli Genellikle sol üst veya merkez Hizalama kolaylığı için; yerel (0,0,0) tasarım kararına bağlıdır.