2013-02-26 16 views
8

THREE.JS'yi kullanarak bir 3B projede çalışıyorum ve basit bir minecraft gibi bir karakteri canlandırmak istiyorum. THREE.JS SkinnedMesh'in kemiklerini nasıl taşıyacaksınız?

Bunu yapmak için, ben (kemiklerle) Blender birini ihraç ve ben Three.js SkinnedMesh sınıfını kullanarak işlemek.

Ben taşımak için mesh kolunu yapmak için her şeyi denedik ama bunu anlamaya olamaz. Rotasyon, pozisyon, matris değiştirme ve tüm bayrağı doğru olarak ayarlamayı denedim (matrixWorldNeedsUpdate gibi ama kol hareket etmedi). İşte

bir örnek kod:

var meshBody = new THREE.SkinnedMesh(geometry, materialTexture); 

... 

animate = function(){ 
    meshBody.bones[3].rotation.z += 0.1  
    meshBody.bones[3].matrixAutoUpdate = true; 
    meshBody.bones[3].matrixWorldNeedsUpdate = true; 
} 

cevap

5

sizin ağı yaratırken sürerken, malzemenin zarı mülkiyet örneğin true için ayarlanmış olduğundan emin olun:

mesh = new THREE.SkinnedMesh (geometry, 
      new THREE.MeshBasicMaterial ({color: 0xaaaa00, skinning: true}) 
    ); 
+0

Hmm, bunu yaptığımda model kayboluyor. Bu öğretici [bağlantı] On (https://devmatrix.wordpress.com/2013/02/27/creating-skeletal-animation-in-blender-and-exporting-it-to-three-js/) o adlandırmaları bahseder kemikleri, verteks grupları ile aynıdır. Biraz garip geliyor ama denedim ve hiç farketmedi ... – robshearing

+0

Tamam şimdi anladım. Birden fazla köşe eklemek gerekiyor. – robshearing

0

varsayılan olarak Dördey rotasyonlar kullanır . meshBody.bones[i].useQuaternion = false;'u ayarlamaya çalışın ve sonra dönüşün paramlarını değiştirin veya bunun yerine quaternions'u kullanın.