Otáčení vektoru(normály) pomocí Vector3.Transform()   připomínka

C#, Algoritmy

Dobrý den,

pomocí nějakého kódu co jsem si vymyslel jsem si spočítal naklonění normály podle osy x a z. Avšak nastal takový pro mě záhadný problém zde:

//načtu si úhly
float xRotation = GetAngleOfLand(v2, v3, positionVertex);
float zRotation = GetAngleOfLand(v0, v1, positionVertex);

Vector3 normal = Vector3.Transform(Vector3.Up, Matrix.CreateFromYawPitchRoll(xRotation, 0, zRotation);

                            
vertices[GetIndex(x, y)].Normal = normal;
vertices[GetIndex(x, y)].Normal.Normalize();

Všechno funguje hezky pokud xRotation nebo zRotation není nula. Pokud však jedno z nich je a chci tedy jen jedno natočení podle x nebo z, tak metoda Vector3.Transform vrátí vždy to co jsem dodal do parametru, tedy Vector3.Up. Přeci když zadám jen otočení podel jedné osy, měl by se vektor otočit jen podel jedné osy a ne že to vrátí to co jsem tam zadal a vůbec to neotočí nebo se mýlím?(Zkoušel jsem to transformovat i pomocí Quaternion, ale mělo to stejný výsledek).

problém jsem vyřešil postupným otočením takto:

//načtu si úhly
float xRotation = GetAngleOfLand(v2, v3, positionVertex);
float zRotation = GetAngleOfLand(v0, v1, positionVertex);

Vector3 normal = Vector3.Transform(Vector3.Up, Matrix.CreateRotationX(-xRotation));
normal = Vector3.Transform(normal, Matrix.CreateRotationZ(zRotation));

                            
vertices[GetIndex(x, y)].Normal = normal;
vertices[GetIndex(x, y)].Normal.Normalize();

Ale zajímalo by mě jestli je to(předchozí nefunkčí řešení) matematicky správně nebo je nějaká chyba ve frameworku(i když to docela pochybuji, protože dle mě je to docela často užívaná metoda).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback