Матрицы и углы Эйлера.

Программирование на Юнити.

Матрицы и углы Эйлера.

Сообщение Axil 01 ноя 2019, 19:49

1)
Как применить готовую матрицу трансформации к GameObject ?
Нашел только такой способ:
Синтаксис:
Используется csharp
Matrix4x4 mat = Matrix4x4.Rotate( Quaternion.Euler( vEuler ) );
Transform tt = GameObject.Find( "Teapod" ).GetComponent<Transform>();
tt.right   = mat.GetRow( 0 );
tt.up      = mat.GetRow( 1 );
tt.forward = mat.GetRow( 2 );
 

Но не работает правильно.
mat.GetColumn почему-то дает тот-же результат. А угол vEuler.z не работает вообще.

2)
Почему есть разница в двух способах задать повороты:
1-й способ как в пункте выше, 2-й вот так:
Синтаксис:
Используется csharp
Transform tt = GameObject.Find( "Teapod" ).GetComponent<Transform>();
tt.eulerAngles = vEuler;
 

Так вроде бы работает правильно.

3) Как-же меня бесят эти углы Эйлера, почему нельзя было сделать Yaw Pitch Roll ?
Может есть где библиотечка для работы с матрицами с углами Yaw Pitch Roll ?
Аватара пользователя
Axil
UNIт
 
Сообщения: 51
Зарегистрирован: 02 окт 2019, 11:26

Re: Матрицы и углы Эйлера.

Сообщение Axil 01 ноя 2019, 20:59

Почитал я тут и на официальном форуме ... ( https://forum.unity.com/threads/how-to- ... rm.121966/ )
Кватернионы это конечно хорошо и замечательно, но на видеокарте то не они, а матрицы.
Такого лешего Unity не работает напрямую с матрицами и нужно извращаться и писать такую гребенку кода? X(

Чем больше я изучаю Юнити тем больше удивляюсь, с одними моментами все просто, приятно и не нужно заморачиваться, а с другими нужно извращаться так, что просто подгорает. X(

Правильный ответ:
Синтаксис:
Используется csharp
      Transform tt = GameObject.Find( "Teapod" ).GetComponent<Transform>();
      tt.rotation = matrix.rotation;
 
Аватара пользователя
Axil
UNIт
 
Сообщения: 51
Зарегистрирован: 02 окт 2019, 11:26

Re: Матрицы и углы Эйлера.

Сообщение Tolking 02 ноя 2019, 03:39

Видимо я неправ, но я всегда считал что: углы Эйлера это Yaw Pitch Roll (с гимбал локами все как положено) , Матрица поворота = Кватернион...

Может просто пользоваться простыми путями, а не искать сложные?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Матрицы и углы Эйлера.

Сообщение jetyb 07 ноя 2019, 07:41

У каждого Transform доступ к матрице преобразования
Transform.localToWorldMatrix
Это только свойство правда только read only.
Но имея матрицу, через ее API можно получить вращение позицию и шкалу
Matrix4x4.ValidTRS() - проверить матрицу
Matrix4x4.rotation
Matrix4x4.lossyScale
Matrix4x4.MultiplyPoint3x4(new Vector3()) - смещение матрицы
Получить матрицу по параметрам transform:
Matrix4x4.TRS
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6