The Hazy Mind tarafından bir XNA eğitimini takip ediyorum Bir Konum (Vector3) ve bir Rotasyon (Quaternion) içeren bir temel nesneye sahibim. nesne modeli öğretici kamera uygulaması itibaren bu Bir bloğun 6 tarafı döndürüyor
gibi ben Dönmesi bir kopyasını yaptı ve yöntemleri Revolve ve Nesne bunları uyguladık görünüyor
public virtual void Rotate(Vector3 axis, float angle)
{
axis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(axis, angle) * Rotation);
}
public virtual void Revolve(Vector3 target, Vector3 axis, float angle)
{
Vector3 revolveAxis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Quaternion rotate = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(revolveAxis, angle));
Position = Vector3.Transform(Position - target, Matrix.CreateFromQuaternion(rotate)) + target;
Rotate(axis, angle);
}
Benim Blok nesne 6 yaratır
ve şimdi benim on the Block Döndür çağırarak, gerçek sorun var: Quad örneklerini ve her Quad nesne üzerinde işlemek yöntemini çağırır, ben her Quad atanan uzaklıklar ve rotasyonlar dokulu Blok böyle giyinip oluşturmak zorunda obj ect, nesnenin dönüşünü değiştirmesine neden olur ve Quad nesnelerim dönmez, dolayısıyla Block nesnesimde yeni bir Döndürme işlevi uygulardım.
public override void Rotate(Vector3 axis, float angle)
{
for (int i = 0; i < mySides.Length; i++)
{
Quad side = mySides[i];
side.Revolve(this.Position, axis, angle);
}
}
Ancak bu burada görüldüğü gibi bana beklenen sonucu vermedi:
yanlış çözüm
aşağıdaki çözüm çalışacak ama çok jenerik olmayacak ve sınırlı olacaktır: Bir kaç tane eksenin etrafında dönmeyi kontrol ettiğimi ve daha sonra her tarafı (Dörtlü nesneyi) doğru şekilde döndürdüğünü belirten ifadeler.
uygun çözüm
Alternatif ben Quad render Blok nesnesi (ebeveynlerinin) Dönüşleri bağımlı nesneleri yapabilir, ama bunu nasıl emin değilim.
Üçüncü ve sonuncu seçenek, Döndürme yönteminin her bir Quad nesnesinin rotasyonunu ve konumunu doğru değerlere güncellemesini sağlamaktır; bu, ayrıca nasıl yapılacağından emin değilim.
Peki ben için soruyorum bu konuda bazı fikir veya düşünce, tercihen görsel bir şekilde, XNA Kuaternionlarla nasıl kullanılacağını açıklayan belki bazı bağlantılar ve/veya öğreticiler ise soru. girişiniz :)