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.