emin2045

Unreal MVP
23 Haz 2020
169
1
75
28
FRotator ve FVector arasındaki fark tam olarak nedir? FVector u anladım ama FRotator da bir vektör değil mi? 

FVector Vec;                           // diye bir şey tanımlayalım
FRotator Rotation;                  // diye bir şey tanımlayalım


Vec = Rotation.Vector();        //  mesela burada rotation'un neyini aldık, tam anlayamadım.


----------------------Çözüldü
 
emin2045' Alıntı:
FRotator ve FVector arasındaki fark tam olarak nedir? FVector u anladım ama FRotator da bir vektör değil mi? 

FVector Vec;                           // diye bir şey tanımlayalım
FRotator Rotation;                  // diye bir şey tanımlayalım


Vec = Rotation.Vector();        //  mesela burada rotation'un neyini aldık, tam anlayamadım.

Mesela 
      FRotator  rotation(90.0f,330.0f,30.0f); // X te 90 derece y de 330 derece z de 30 derece döndüğünü ifade eder.
Ancak 
      FVector translation(20.0f,30.0f,100.0f); // konum olarak dünyanın hangi noktasındayız onu ifade eder. X te 20 Y de 30 z de 100.0 deyiz.
Yani vector dünyada koordinatımız neresi onu gösteriyor. Mesela araba navigasyonlarında bir nokta olarak GPS in gösterdiği yer işaretleniyor. Tek bir nokta ise ve ok işareti yoksa biz nerde olduğumuzu anlarız ancak nereye dönük olduğumuzu anlayamayız. Ancak bir ok olarak sağa sola gibi bir de ok işareti olsa biz tam olarak hangi yöne dönük olduğumuzu da anlayabiliriz. Ancak bu ikisi bir arada olduğunda (scale de var ama onu geçtim şimdi) tam olarak nerede olduğumuzu ve hangi yöne baktığımızı anlayabiliriz.

Mesela Transform örneğimiz için küp cismimiz yukarda ki değerlere getirelim. Dünyanın merkezine göre konumu şu şekilde oluyor:


Sonra onu FRotator ile döndürdüğümüzde şu hale geliyor:


Şimdi obje dünya koordinat sistemi içerisinde bir translationa ve rotation a sahip: Şu an yeni baktığı doğrultuya bir birim uzunluğunda bir doğru vektörümüz olsa şöyle gözükürdü:


İşte sorduğun FRotator::vector()  mesela yukarda verdiğim FRotator  rotation(90.0f,330.0f,30.0f)  değerini  FVector(0.7f,0.8f,0.6f) gibi uzunluğu bir birim olan bir vektöre çevirir. (Sayıyı salladım şu an FVector muhtemelen başka bir değer çıkacak. Niye yanlış demeyin.)

/******* Şimdi başka bir şekilde anlatıyorum. */

Bir diğer değişle bir bir objenin dönüş değerini FRotattor ile ifade edebileceğimiz gibi, merkezi konumu belli olmayan 1 birim uzunluğunda bir vektörle de belirtebiliriz. Mesela FRotator(0.0f,0.0f,90.0f) ı bir birimlik vektör olarak FVector(0.0f,1.0f,0.0f) olarak ta ifade edebiliriz. İşte FRotator::vector()  bu diğer ifade ediş tarzını veriyor. Mesela örneğimizde rotation.vector() dediğimizde yukarda yazdığım FVector u verir.
   Peki bu bizim ne işimize yarar. Mesela oyunda koşup duran bir ana karakterimiz (PlayerCharacter)  var. Biz bu karakterin vucudunun dönük olduğu tarafta 300 birim ileride bir şey varmı kontrol etmek istiyoruz. Vucudunun dönük olduğu tarafı GetWorldRotation() ile FRotator olarak alabilirsin. Buna CharacterRotation değişkeni diyelim. Eğer FRotator un vektörünü CharacterRotation::vector ile bulursan o karakterin tam karşısına bakan yani vucudunun dönük olduğu yöne bakan bir birim uzunluğunda bir vektör bulmuş olursun. Sonra bunu 300 ile çarparsan tam karakterin dönük olduğu yönün 300 birim ilerisini bulmuş olursun. Zaten bizim istediğimizde buydu. Umarım anlaşılır olmuştur.
Evet matematik acısından  bakarsak frotator da bir vektördür ve vektör aritmetiği kullanır. Ancak unreal terminolojisi acısından kullanım alanı göz önünde bulunaraak frorator denmiştir.
Kolay gelsin.
 
Yani Vec.Rotation() dediğimiz zaman karakterin baktığı yönde bir birim uzunluğunda vektör demiş oluyoruz bunu anladım. Diyelim ki bunu da bir FRotator tipinde bir değişkene (ismi Temp olsun) attık. Temp.Vector() dersek en başa mı dönmüş oluyoruz?
 
emin2045' Alıntı:
Yani Vec.Rotation() dediğimiz zaman karakterin baktığı yönde bir birim uzunluğunda vektör demiş oluyoruz bunu anladım. Diyelim ki bunu da bir FRotator tipinde bir değişkene (ismi Temp olsun) attık. Temp.Vector() dersek en başa mı dönmüş oluyoruz?

FVector::rotation() dediğimiz zaman bir vektörün ne kadar dönmüş olduğunu açı cinsinden ifade etmiş oluruz. FRotator::vector() ise açı cinsinden  olan değerleri vector cinsinden ifade etmeye yarar. Bunu soruyorsan evet bunları peşpeşe kullanırsan  aynı sonuca geri dönebilirsin( Teoride 3 boyutlu uzayda aynı donuyu ifade eden çok sayıda FRotator bulunabilir. Dolayısı ile sayi bazında farklı değerler çıkabilir. Ancak dönüş yönü aynı ve doğru çıkacaktır.).
Ama sonuçta bu ifadeler birbirine dönüşümdür. Yani önermen doğru olur eğer ben sordugun şeyi  yanlış anlamadıysam.