0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
1

Вращение объектов вокруг своей оси в DirectX

18.09.2009, 19:52. Показов 4672. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую.
Собственно проблема заключается вот в чем.

Нужно провернуть объект, располагающийся в точке, отличной от (0,0,0) вокруг его собственной оси.

Вместо этого вращение происходит относительно начало координат.

Поворот осуществляется в ф-ции SetupMatrices.

В виде rot_y поступает 0, в виде rot_z 90/180*3.14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
VOID SetupMatrices(float x,float y,float z, float rot_z, float rot_y)
{
 
   D3DXMATRIXA16 matWorld;
   D3DXMATRIXA16 matWorldRotation;
   D3DXMATRIXA16 matWorldRotationZ;
   D3DXMATRIXA16 matWorldRotationY;
   D3DXMATRIXA16 matWorldTranslation;
 
    D3DXMatrixRotationZ( &matWorldRotationZ, rot_z);
    D3DXMatrixRotationY( &matWorldRotationY,rot_y);
    D3DXMatrixMultiply(&matWorldRotation, &matWorldRotationZ, &matWorldRotationY);
 
    D3DXMatrixTranslation(&matWorldTranslation, x, y, z);    
    D3DXMatrixMultiply(&matWorld, &matWorldTranslation, &matWorldRotation);
    pDevice->SetTransform( D3DTS_WORLD, &matWorld );
 
        D3DXMATRIXA16 matView;
        D3DXMATRIXA16 matProj;
        Cam.GetViewMatrix(&matView);
 
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 1000.0f );//дальность обзора
    pDevice->SetTransform( D3DTS_VIEW, &matView  );
    pDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}
Как путь решения проблемы на сайтах советуют переносить объект в начало координат и обратно (соответственно D3DXMatrixTranslation(&matWorldTranslation, -x, -y, -z); и наооборот). Не помогает.

Но зачем это делать? Ведь на момент поворота ни одна матрица "не знает" координат и фигура находится в (0,0,0)? Принудительное прописывание matWorld._41=0 и т.д. также не помогает.

Подскажите пожалуйста, что делать?

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2009, 19:52
Ответы с готовыми решениями:

Поворот bitmap вокруг своей оси DirectX 11
Учу DX11 по урокам rastertek, но там не описано как можно вращать созданные bitmap. Гуглом...

DirectX вращение камеры вокруг центра
Здравствуйте! Пытаюсь создать класс камеры, где была бы возможность двигать камеру вокруг объекта(в...

Поворот объекта вокруг своей оси Y при помощи D3DXMatrixRotationY
Привет всем!Прошу помочь мне с D3DXMatrixRotationY. Я создал 3d сцену и объект, которым я могу...

Вращение планеты вокруг солнца, и вокруг своей оси
У меня есть Солнце, которое находиться в координатах(0.0.0), и нужно вращать планеты, как по...

2
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
18.09.2009, 20:07 2
Цитата Сообщение от Nicl Посмотреть сообщение
Как путь решения проблемы на сайтах советуют переносить объект в начало координат и обратно (соответственно D3DXMatrixTranslation(&matWorldTranslation, -x, -y, -z); и наооборот). Не помогает.

Но зачем это делать? Ведь на момент поворота ни одна матрица "не знает" координат и фигура находится в (0,0,0)? Принудительное прописывание matWorld._41=0 и т.д. также не помогает.
Вообще-то должно помогать. Переносим в (0; 0; 0). Поворачиваем - относительно неё. Переносим обратно. Вроде логично, что получился нужный поворот. Насчёт "знает"/"не знает" не понял, но вообще каждый перенос и поворот - это умножение координат точки на матрицу. Умножение - операция ассоциативная, так что сначала перемножатся эти матрицы и получится одна матрица нужного поворота.
Если очень хочется, можно перемножить вручную и получить эту матрицу.
0
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
18.09.2009, 20:41  [ТС] 3
Может я не понимаю чего-то... Напишите пожалуйста на моем коде - что и как реализовать.
0
18.09.2009, 20:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2009, 20:41
Помогаю со студенческими работами здесь

Вращение прямоугольника вокруг своей оси
Добрый день,прошу помочь выполнить вот такую задачку в HomeLisp. Задача: Написать функцию,...

Вращение объекта вокруг своей оси
Есть такой класс class TPoint(): def __init__(self): self._x = random.randint(0,...

Вращение колеса вокруг своей оси
Помогите. Я уже запарилась. В общем, мне нужно что бы колесо со спицами двигалось по осе X и...

Вращение объекта вокруг своей оси
Здравствуйте я полный новичок в unity3d, недавно столкнулся с такой проблемой, буду рад если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru