2012-02-21 18 views
7

L-system yorumlayıcısı üzerinde çalışıyorum ve quaternion'u rotasyonun iç gösterimi olarak kullanıyorum. Sonucu, ThreeJs JavaScript sahnesine vermem gerekiyor ve json sahnesini, bunu nasıl yapacağımı en iyi şekilde buldum.Three.js json sahnesinde quaternion rotasyonu nasıl kullanılır

https://github.com/mrdoob/three.js/blob/master/examples/scenes/test_scene.js üzerinde bir sahne örneği buldum, ancak dörtlü rotasyonlarla ilgili hiçbir şey yok.

yüzden http://threejs.org/io/s/quaternion yardıma kullanılan ve "rotasyonkuaternion ve useQuaternion özelliklere sahip ama bu hata nedeniyle muhtemelen eksik (sahne yükleyici tarafından yükseltilir, işe yaramaz gibi görünüyor THREE.Object3D olduğu bulundu Ben sipariş Y varsayalım (Ben de Euler açıları için quaternion dönüştürmek için denedim

"obj": { 
    ... 
    "quaternion": [0.38268343236509,0,0,0.923879532511287], 
    "useQuaternion": true 
} 

ama bu alışkanlık nedeniyle muhtemelen açılarının uygulayarak diğer sırasının, benim için çalışmak: "özniteliği,) sonunda EDIT bakınız Z, X). Yukarıdaki örnekte, kuaterniyon, Z ekseni (zift) etrafında 135 derece dönerek Euler açılarına dönüştürülmüştür [pi, pi, pi/4] ancak sahnede doğru gösterilmemiştir. Aşağıdaki resim, Z ekseni tarafından diğerlerinden 11 derece daha fazla döndürülmüş blokları göstermektedir. Eksenler X (kırmızı), Y (yeşil) ve Z (mavi) dir. Euclid'e yanlış dönüşüm quaternion nedeniyle üst yarısı yanlış döndürülür (bu sayfayı uygulama için kullandım: http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/).

ilustration of the problem
DÜZENLEME: Daha fazla inceleme sonra sahne yükleyici tarafından gündeme hata nedeniyle nesne üzerinde eksik "rotasyon" özelliğinin olduğunu. Çıktıdan sonra hata alamazsınız ve sahne yüklenir, fakat yanlıştır (gösterilen görüntü ile aynı şekilde) çünkü quaternion rotasyonları göz ardı edilir.

"obj": { 
    ... 
    "rotation": [3.14159265358979,3.14159265358979,0.785398163397449], 
    "quaternion": [0.38268343236509,0,0,0.923879532511287], 
    "useQuaternion": true 
} 
+0

Sahne yükleyicisi tarafından yükseltilen hata mesajında ​​daha fazla var mı, özellikle de kuaterniyonların kullanımıyla ilgili neyi sevmediğini belirten bir şey var mı? –

+0

Tamam, hata "döndürme" özniteliğinden kaynaklanıyor. Sahne yükleyici muhtemelen quaternion rotasyonları yüklemiyor. – NightElfik

cevap

4

Sorunumu çözdüğümü düşünüyorum. Bu benim soruma doğrudan bir cevap değil, nasıl bir geçici çözüm.

Sorun, quaternion döndürmeleriyle çalışmayan sahne yükleyicisidir. Doğrudan JS'de sahne oluşturmak için sahne oluşturma senaryosunu yeniden yazdım.

var mesh = new THREE.Mesh(geometry, material); 
... set position & scale ... 
mesh.rotation.x = 3.141; 
mesh.rotation.y = 3.141; 
mesh.rotation.z = 0.785; 
mesh.updateMatrix(); 
scene.add(mesh); 

Sonra benim Dördey-euler dönüşüm için tasarlanmış, sorunlarımı (Söz konusu ekli resim) neden olan varsayılan 'XYZ' olarak ayarlandığında THREE.Object3D tarihinde eulerOrder sihirli özelliği bulundu 'YZX' bu yüzden onu değiştirdim.

Thats
mesh.eulerOrder = 'YZX'; 

. Sahne yükleyici ile deneme yapmak için hiç zamanım yok, ancak eulerOrder özelliğini sahne yükleyiciyle ayarlamak mümkün olsaydı, bu sorunun ikinci kısmına çekilecek.

En iyi, doğrudan sahne tanımında kuaternion ayarlaması olurdu, ancak muhtemelen sahne yükleyicinin kendisinde değişiklik yapılması gerekecek.