Перевод локальных параметров в глобальные...

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Перевод локальных параметров в глобальные...

Сообщение D'alex » 12.12.2005 (Пн) 10:27

Народ поясните кто знает плиз...
1.Имеем локальные параметры объекта(позиция, размер,угол вращения)...
2.Поворачиваем объект с помощью матрицы - глобально по трем осям...
3.Как узнать на какой угол объект повернулся - по всем осям локально?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.12.2005 (Вт) 10:32

D'alex
.Имеем локальные параметры объекта(позиция, размер,угол вращения)...

угол вращения вокруг какой оси?
Поворачиваем объект с помощью матрицы - глобально по трем осям...

То есть последовательно применяешь три трансформации?
Как узнать на какой угол объект повернулся - по всем осям локально?

Как это "локально", если это относительно собственной системы координат, то, как ни крути объект, в своей системе он всегда останется на прежней позиции.
Может задачу уточнишь, будет понятнее, что нужно.

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 13.12.2005 (Вт) 12:40

Имеем:
Доступ к функции SetRotation(x,y,z)которая последовательно поворачивает объект по осям y,x,z при этом оси объекта постоянно смещаются относительно мировых осей при каждом повороте....
и я ее не использую для трансформации,следовательно все ее аргументы равны 0...
Делаю:
Для моих целей необходимо чтобы оси объекта оставались постоянно паралельно осям мира...Мне удается добиться такого преобразования с помощью матриц...На выходе имею матрицу объекта со всеми преобразованиями и засовываю ее в доступную мне функцию SetMatrix(),т.е я трансформировал объект так как мне нужно - с этим все в порядке...
Необходимо:
Установить правильно после матричных преобразований, аргументы функции SetRotation(x,y,z)-это необходимо для того,чтобы правильно работало освещение и тени,т.к они построены на аргументах данной функции...Т.е получить все углы на которые повернулся объект с помощью матриц и с учетом работы доступной функции вращения...

пож.попробуйте понять ... если что ,я еще попытаюсь дополнить

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.12.2005 (Вт) 14:23

Для моих целей необходимо чтобы оси объекта оставались постоянно паралельно осям мира

То есть объект можно поворачивать только на 180 градусов? Иначе оси не будут параллельны.
Что за SetRotation(x,y,z)? Ты каким АПИ пользуешься, на каком языке пишешь?

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 13.12.2005 (Вт) 18:44

SetRotation(x,y,z)- это функция изучаемого мною двига....
Почему на 180?..на 360...относительно осей обьекта которые всегда паралельно осям мира...Обьект повернулся "визуально" ,а оси осталась на месте...
В принципе основной вопрос - как из матрицы вытащить параметры углов....на которые обьект повернулся...А нужно мне это для того чтобы подключить физику...физика с моими преобразованиями для обьекта работает правильно,но тени и свет в двиге они получают параметры для обьекта из функции SetRotation(x,y,z)...и если их игнорировать то двиг будет строить тень для обьекта с учетом того что он не повернут после моих матричных преобразований,ведь аргументы
функции равны 0...вот мне и нужно после матричных преобразований
получать из матрицы правильные углы в функцию SetRotation(x,y,z)... для построения тени и света...Пишется все с помощью Dx API
язык PowerBasic...ну сдесь язык вроде не причем ,тут нужна математика как вытащить углы и притом еще учесть что SetRotation()
сначала крутит по y потом по x и z...

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 13.12.2005 (Вт) 19:31

Короче вот код-в этом случае обьект на импульсы реагирует не правильно т.к преобразования физической библы не совпадают с трансформациями двига,но тени и свет для объекта строятся правильно....
Код: Выделить всё
'************************************************************
  SUB UpdateGeoms1()
'************************************************************
DIM vTemp AS R3DVector3D

MB2Class_SetPointerEx Box

  vTemp.x=TOKRB_GetX(bodyBox)
  vTemp.y=TOKRB_GetY(bodyBox)
  vTemp.z=TOKRB_GetZ(bodyBox)

  MB2Mesh_SetPosition vTemp

  vTemp.y =-TOKRB_GetYaw (bodyBox)
  vTemp.x = TOKRB_GetPitch(bodyBox)
  vTemp.z = TOKRB_GetRoll (bodyBox)

  MB2Mesh_SetRotation vTemp

End Sub

В этом случае физика работает класно,а тени разлетаются по разным углам...
Код: Выделить всё
'************************************************************
  SUB UpdateGeoms2()
'************************************************************
  LOCAL MatObj   AS R3DMatrix
  LOCAL MatPos   AS R3DMatrix
  LOCAL MatRot   AS R3DMatrix

MB2Class_SetPointerEx Box

D3DXMatrixRotationYawPitchRoll MatRot,-TOKRB_GetYaw (bodyBox)*g_Rad,TOKRB_GetPitch(bodyBox)* g_Rad,TOKRB_GetRoll (bodyBox)*g_Rad

D3DXMatrixTranslation MatPos, TOKRB_GetX(bodyBox),TOKRB_GetY(bodyBox),TOKRB_GetZ(bodyBox)

D3DXMatrixMultiply     MatObj,  MatRot ,MatPos

MB2Mesh_SetMatrix(MatObj)

End Sub

Надо что-то придумать ,чтобы устанавливать правильные значения для физики в функцию поворота двига тогда тени будут правильно работать или устанавливать правильные углы вытащив их из матрицы...
Последний раз редактировалось D'alex 14.12.2005 (Ср) 18:42, всего редактировалось 2 раз(а).

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.12.2005 (Ср) 10:51

Да, трудно понять, когда не знаешь работы движка. Объясни, зачем тут ПЕРВЫЙ раз дается строка "MB2Mesh_SetPosition vTemp":
Код: Выделить всё
  vTemp.x=TOKRB_GetX(Box)
  vTemp.y=TOKRB_GetY(Box)
  vTemp.z=TOKRB_GetZ(Box)

  MB2Mesh_SetPosition vTemp

  vTemp.y =-TOKRB_GetYaw (Box)
  vTemp.x = TOKRB_GetPitch(Box)
  vTemp.z = TOKRB_GetRoll (Box)

  MB2Mesh_SetRotation vTemp

Ведь потом она дается повторно с другими параметрами, ЗАТИРАЯ старое значение. По крайней мере так было бы в DirectX.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 14.12.2005 (Ср) 12:49

Mikle, смотри внимательно, там SetPosition и SetRotation
ХЎ

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 14.12.2005 (Ср) 18:35

Каждому обьекту в начале присваивается физическая модель описывающая далее все его параметры в "псевдопространстве"
В моем случае Box-это обьект,bodyBox-описываемая поверхность для Box ,которая участвует в физической симуляции...

Код: Выделить всё
определяем обьект с которым работаем...
MB2Class_SetPointerEx Box

получаем параметры позиции  от описываемой поверхности для обьекта, которая включена в физический процесс...
  vTemp.x=TOKRB_GetX(bodyBox)
  vTemp.y=TOKRB_GetY(bodyBox)
  vTemp.z=TOKRB_GetZ(bodyBox)
устанавливаем эти параметры позиции для нашего обьекта
  MB2Mesh_SetPosition vTemp
тоже самое для поворота
  vTemp.y =-TOKRB_GetYaw (bodyBox)
  vTemp.x = TOKRB_GetPitch(bodyBox)
  vTemp.z = TOKRB_GetRoll (bodyBox)

  MB2Mesh_SetRotation vTemp

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.12.2005 (Ср) 19:06

d3drm
Да, это я ступил :roll:

D'alex
А какая система координат в движке? Может причина в разных направлениях осей?
Углы задаются, случайно, не в градусах?
Ты уверен, что строки и столбцы в матрицах соответствуют D3D? Например в OpenGL наоборот.

Дело в том, что математика - она и есть математика, должна работать правильно везде.

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 14.12.2005 (Ср) 19:29

В двиге Dxсовая система координат,а вот в физической библе Gлевая,
но с этим я уже справился ,я же написал что моя вторая функция для
обработки геометрии работает нормально(в тему с физикой)...Углы задаются в градусах при вращении матрицей все учтено...


Вернуться в Мультимедиа

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

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

    TopList