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

Разворот объекта вокруг нескольких точек в C++/DirectX

03.10.2009, 19:51. Показов 2343. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла проблема.
Суть такова: некоторый объект (их много) необходимо
1. повернуть сперва вокруг свей оси, переместить в точку (x,y,z),
2. затем повернуть по оси y вокруг некой постоянно меняющейся точки (zep1.st_x, zep1.st_y, zep1.st_x) (поворачиваться будут все объекты скопом).

п.1 реализовал.
Дальше ничего не выходит.
Реализация:

Вызов ф-ции(один из многих):
SetupMatrices(zep1.st_x+8,zep1.st_y,zep1.st_z+10 ,0,0,zep1.rot_right+90*D3DX_PI/180,zep1.rotat);
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
VOID SetupMatrices(float x,float y,float z,float rot_x,float rot_y,float rot_z,float rotate)
 
{
        
    D3DXMATRIXA16 matWorld;//матрица мира
    D3DXMATRIXA16 matWorldRotation;//матрица
        D3DXMATRIXA16 matWorldRotationX;//матрица поворота по оси x
    D3DXMATRIXA16 matWorldRotationY;//матрица поворота по оси y
    D3DXMATRIXA16 matWorldRotationZ;//матрица поворота по оси z
    D3DXMATRIXA16 matWorldTranslation;//матрица перемещения
 
 
    D3DXMatrixRotationX( &matWorldRotationX, rot_x);
    D3DXMatrixRotationY( &matWorldRotationY,rot_y);
    D3DXMatrixRotationZ( &matWorldRotationZ,rot_z);
 
 
    D3DXMatrixMultiply(&matWorldRotation, &matWorldRotationX, &matWorldRotationZ);
    D3DXMatrixMultiply(&matWorldRotation,&matWorldRotation, &matWorldRotationY);
    
    D3DXMatrixTranslation(&matWorldTranslation, 0, 0, 0);
 
    
    D3DXMatrixMultiply(&matWorld, &matWorldTranslation, &matWorldRotation);
 
    D3DXMatrixTranslation(&matWorldTranslation, x, y,z);
 
    D3DXMatrixMultiply(&matWorld, &matWorld, &matWorldTranslation);
/////////////////////////////////////////////////////////////////////////////
    а сюда что?
/////////////////////////////////////////////////////////////////////////////
 
    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 );
}
Что делать? Распишете пожалуйства поподробнее, никак не получается.
Сделал так, но толку никакого.
C++
1
2
3
4
D3DXMATRIXA16 matWorldTranslation2;//матрица перемещения
    D3DXMatrixRotationY( &matWorldRotationY,rotate);
    D3DXMatrixTranslation(&matWorldTranslation2, x, y,z);
    D3DXMatrixMultiply(&matWorld, &matWorldTranslation2, &matWorldRotationY);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2009, 19:51
Ответы с готовыми решениями:

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

Вращение объектов вокруг своей оси в DirectX
Всех приветствую. Собственно проблема заключается вот в чем. Нужно провернуть объект,...

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

Transform.World вращает мир вокруг объекта или наоборот? (DirectX)
Доброго времени суток! 1)Tramsform.World вращает мир вокруг объекта или наоборот?(хотя по названию...

1
Эксперт С++
1673 / 1045 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
04.10.2009, 11:54 2
Тебе надо разобраться с порядком применения преобразований и с тем, в какой системе координат они заданы. Возьмём, к примеру, пункт 1. Если ты хочешь (что наиболее вероятно), чтобы это был поворот вокруг эйлеровых углов (т.е., поворот вокруг оси X, потом вокруг УЖЕ ПОВЁРНУТОЙ в предыдущем шаге оси Y и потом вокруг опять же повёрнутой предыдущими шагами оси Z), то ты делаешь правильно. При этом СК, в которой задаются преобразования, как бы прилеплена к объекту. Если ты хочешь производить эти же повороты вокруг мировых осей, то надо перемножить матрицы в обратном порядке: Z, Y, X.
Далее, что такое поворот вокруг некоторой точки? Это 3 действия: перенос данной точки в (0, 0, 0), поворот и обратный перенос в ту же точку. Поскольку ты по идее строишь собственную матрицу world для каждого объекта, этот сомножитель будет просто повторяться для каждого из них. Ты даже можешь посчитать её один раз и потом просто домножать на неё матрицу world.
0
04.10.2009, 11:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2009, 11:54
Помогаю со студенческими работами здесь

Рисование ломанной фигуры вокруг нескольких точек
Нужна помощь в понимании того, каким образом можно построить такие фигуры, как на картинке....

Как задать разворот объекта в градусах
Проблема в том что мне нужно сделать так чтобы объект разворачивался в исходное состояние ,но как...

Разворот объекта по направлению вектора скорости
Собственно, как реализовать? Если снаряд бросается по навесной траектории и нужно, чтобы его...

Посчитать площадь вокруг облака точек (с учётом области влияния точек)
Есть набор точек на плоскости. Каждая точка имеет известную область влияния, допустим в радиусе...


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

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

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