2010-08-20 14 views
6

Sadece XNA'da başlıyorum ve rotasyon hakkında bir sorum var. Bir vektörü XNA'daki bir döndürme matrisi ile çarptığınızda, saat yönünün tersine gider. Bu anladım. Bununla birlikte, ne elde edemediğime dair bir örnek vereyim. Boru hattına rastgele bir sanat öğesi yüklediğimi varsayalım. Daha sonra, güncelleme yöntemi çalıştırıldığında her bir kareyi 2 radyan artıracak bazı değişkenler yaratıyorum (testRot + = 0.034906585f). Karm şaşkınlığımın ana özelliği, varlık bu ekran alanında saat yönünde dönüyor. Bu bir döndürme matrisinin bir vektörü saat yönünün tersine döndüreceği için beni şaşırtıyor.XNA'daki bu döndürme davranışı nedir?

Başka bir şey, konum vektörümün yanı sıra benim kökümün nerede olduğunu belirttiğimde, kökeni döndürdüğümü anlıyorum. Bu varlığın kaynağından geçen dikey eksen olduğunu mu varsayıyorum? Eğer öyleyse, rotasyon nereden başlıyor? Başka bir deyişle, Y ekseni veya x ekseni üstünden dönmeye başlıyorum mı?

+0

@llya - Muhtemelen diğer sorularınızın cevaplarını kabul etmelisiniz, böylece başkaları sorunuzu cevaplamak isteyeceklerdir. – TheCloudlessSky

+0

Tamam, kabul edildi. Üzgünüm çocuklar unuttun. – Ilya

cevap

11

XNA SpriteBatch, İstemci Alanı'da çalışır. “Yukarı” Y-, Y + değil (Kartezyen uzayda olduğu gibi, yansıtma alanı ve çoğu insanın genellikle dünya alanı için seçtiği). Bu, dönüşü saat yönünde (Kartezyen uzayda olduğu gibi saat yönünün aksine değil) gösterir. Rotasyonun üretmekte olduğu gerçek koordinatlar aynıdır.

Döndürmeler görelidir, bu nedenle belirli bir konumdan gerçekten "başlama" yapmazlar.

sonra mutlak açıları her zaman sıfır radyan olarak X + ekseninden başlangıç ​​ sin veya cos veya atan2 gibi matematik fonksiyonları kullanarak ise, pozitif dönüş yönü Y + doğru döner.


SpriteBatch işlemleri sırası şöyle görünür:

    Sprite (0,0) sol üst köşesinde bir dörtlü olarak başlar
  1. onun dokusu ile aynı olma boyutu boyut (veya SourceRectangle).
  2. Grafiği orijine göre geri döndürün (böylece başlangıç ​​noktasını (0,0) konumuna getirin).
  3. Ölçekli peri
  4. SpriteBatch.Begin

Bu istemci Uzayda hareketli grafiği yerleştirir gelen matrisi uygula konumunu tarafından

  • sprite Çevir sprite döndürün.

    Son olarak, her istemci için, bu İstemci Alanını, GPU tarafından kullanılan Projeksiyon Alanı'na dönüştürmek için bir matris uygulanır. (Yansıtma alanı, görünümün sol alt köşesinde (-1, -1), sağ üst köşede (1,1) olarak bulunur.)

  • +1

    Vay, teşekkürler dostum. Çok iyi açıkladı. Eğiticiler/kitaplar aradım ve yaptıkları her şey derinlemesine konuşmadan bunlardan bahsediyordu. – Ilya

    +0

    @llya: Rica ederim. (PS: kabul etmeyi ve kabul etmeyi unutmayın :) –

    2

    XNA'dan yeni olduğunuz için, bir kitaplık tanıtmama izin verin. öğrenirken size çok yardımcı olacaktır. XNA Debug Terminali olarak adlandırılır ve çalışma zamanında rasgele kod çalıştırmanıza izin veren açık kaynaklı bir projedir. Yani değişkenlerinizin beklediğiniz değere sahip olup olmadığını görebilirsiniz. Tüm bunlar oyunun üstünde ve oyununuzu duraklatmadan bir terminal ekranında gerçekleşir. http://www.protohacks.net/xna_debug_terminal numaralı telefondan indirilebilir. Kurulumu ücretsiz ve çok kolaydır, böylece kaybedecek hiçbir şeyiniz yoktur.