2013-02-26 12 views
8

Pracuję nad projektem 3D za pomocą THREE.JS i chcę animować prostą postać podobną do Minecrafta.THREE.JS jak przenieść kości SkinnedMesh?

W tym celu wyeksportowałem jeden z Blendera (z kośćmi) i wyrenderuję go z THREE.JS za pomocą klasy SkinnedMesh.

Próbowałem wszystkiego, aby przesunąć ramię siatki, ale nie mogę wymyślić, jak to zrobić. Próbowałem zmienić obrót, położenie, macierz, a także ustawić flagę na true (jak matrixWorldNeedsUpdate, ale ramię się nie poruszyło).

Oto przykładowy 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; 
} 

Odpowiedz

5

Podczas konstruowania siatki, upewnij się, że nieruchomość skórowania swojego materiału jest ustawiona na true, np:

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

Hmm, kiedy to zrobię, model zniknie. W tym samouczku [link] (https://devmatrix.wordpress.com/2013/02/27/creating-skeletal-animation-in-blender-and-exporting-it-to-three-js/) wspomina o nazywaniu kości z tymi samymi, co grupy wierzchołków. Brzmi trochę dziwnie, ale spróbowałem i to nie miało znaczenia ... – robshearing

+0

OK, mam to teraz. Muszę dodać więcej niż jeden wierzchołek. – robshearing

0

Wykorzystuje obroty quaternion domyślnie . Spróbuj ustawić meshBody.bones[i].useQuaternion = false;, a następnie zmień parametry obrotów lub skorzystaj z quaternions.