forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Вращение осей координат (http://forum.boolean.name/showthread.php?t=18176)

bersercer26 07.03.2014 18:33

Ответ: Вращение осей координат
 
D3DXMATRIX T;
D3DXMATRIX R;

D3DXMatrixRotationY(&R,-80.0f);
D3DXMatrixTranslation(&T,0.0f,0.0f,45.0f);

result=R*T;

bersercer26 07.03.2014 18:35

Ответ: Вращение осей координат
 
Мне нужно чтоб объект ездил во всех направлениях.......спасибо что отозвался

Arton 07.03.2014 18:57

Ответ: Вращение осей координат
 
Цитата:

Сообщение от bersercer26 (Сообщение 276253)
[IMG]C:\Users\Admin\Desktop\tgVP0njBJq8.jpg[/IMG]

Ты издеваешься да?

Хотя я в своё время принёс другу вместо игры, кучу ярлыков :-D


Цитата:

Сообщение от bersercer26 (Сообщение 276254)

Что бы картинка сохранилась на форуме, она должна быть хотя бы в одном сообщение и не в тегах картинки, а в тегах прикреплённого файла.

mr.DIMAS 07.03.2014 19:15

Ответ: Вращение осей координат
 
2Arton - ошиблись разделом, вам в раздел Болтовня.

Код:

/////////////////////////////////////////
// при инициализации объекта
D3DXVECTOR3 right( 1, 0, 0 );
D3DXVECTOR3 up( 0, 1, 0 );
D3DXVECTOR3 look( 0, 0, 1 );
D3DXVECTOR3 pos( 0, 0, 0 );
/////////////////////////////////////////

/////////////////////////////////////////
// В цикле
D3DXMATRIX out;

// Делаем оси ортогональными
D3DXVec3Normalize(&look, &look);

D3DXVec3Cross(&up, &look, &right);
D3DXVec3Normalize(&up, &up);

D3DXVec3Cross(&right, &up, &look);
D3DXVec3Normalize(&right, &right);

float x = -D3DXVec3Dot(&right, &pos);
float y = -D3DXVec3Dot(&up, &pos);
float z = -D3DXVec3Dot(&look, &pos);

// Строим матрицу
out._11 = right.x;
out._12 = up.x;
out._13 = look.x;
out._14 = 0.0f;

out._21 = right.y;
out._22 = up.y;
out._23 = look.y;
out._24 = 0.0f;

out._31 = right.z;
out._32 = up.z;
out._33 = look.z;
out._34 = 0.0f;

out._41 = x;
out._42 = y;
out._43 = z;
out._44 = 1.0f;

device->SetTransform( D3DTS_WORLD, &out );
/////////////////////////////////////////

/////////////////////////////////////////
// Поворот
D3DXMATRIX result,pitchMatrix,yawMatrix,rollMatrix;
D3DXMatrixRotationAxis( &pitchMatrix, &D3DXVECTOR3( 1, 0, 0 ), pitchAngleRadians );
D3DXMatrixRotationAxis( &yawMatrix, &D3DXVECTOR3( 0, 1, 0 ), yawAngleRadians );
D3DXMatrixRotationAxis( &rollMatrix, &D3DXVECTOR3( 0, 0, 1 ), rollAngleRadians );

result = pitchMatrix * yawMatrix * rollMatrix;
D3DXVec3TransformCoord( &right, &D3DXVECTOR3( 1, 0, 0 ), &result );
D3DXVec3TransformCoord( &look, &D3DXVECTOR3( 0, 1, 0 ), &result );
D3DXVec3TransformCoord( &up, &D3DXVECTOR3( 0, 0, 1 ), &result );
/////////////////////////////////////////

/////////////////////////////////////////
// Перемещение в зависимости от направления
pos += right * xSpeed;
pos += up * ySpeed;
pos += look * zSpeed;
/////////////////////////////////////////

/////////////////////////////////////////
// Перемещение по осям
pos += xSpeed;
pos += ySpeed;
pos += zSpeed;
/////////////////////////////////////////


bersercer26 07.03.2014 22:06

Ответ: Вращение осей координат
 
Честно чет не могу разобраться....

bersercer26 07.03.2014 22:08

Ответ: Вращение осей координат
 
/////////////////////////////////////////
// Поворот
D3DXMATRIX result,pitchMatrix,yawMatrix,rollMatrix;
D3DXMatrixRotationAxis( &pitchMatrix, &D3DXVECTOR3( 1, 0, 0 ), pitchAngleRadians );
D3DXMatrixRotationAxis( &yawMatrix, &D3DXVECTOR3( 0, 1, 0 ), yawAngleRadians );
D3DXMatrixRotationAxis( &rollMatrix, &D3DXVECTOR3( 0, 0, 1 ), rollAngleRadians );

result = pitchMatrix * yawMatrix * rollMatrix;
D3DXVec3TransformCoord( &right, &D3DXVECTOR3( 1, 0, 0 ), &result );
D3DXVec3TransformCoord( &look, &D3DXVECTOR3( 0, 1, 0 ), &result );
D3DXVec3TransformCoord( &up, &D3DXVECTOR3( 0, 0, 1 ), &result );
/////////////////////////////////////////

/////////////////////////////////////////
// Перемещение в зависимости от направления
pos += right * xSpeed;
pos += up * ySpeed;
pos += look * zSpeed;
/////////////////////////////////////////

/////////////////////////////////////////
// Перемещение по осям
pos += xSpeed;
pos += ySpeed;
pos += zSpeed;
/////////////////////////////////////////






Здесь поворот идет камеры, а мне надо фигуры..... можешь весь исходник кинуть, если не трудно я уже запутался.....

mr.DIMAS 07.03.2014 23:00

Ответ: Вращение осей координат
 
Цитата:

Здесь поворот идет камеры, а мне надо фигуры..... можешь весь исходник кинуть, если не трудно я уже запутался.....
Ты не прав. Поворот( точнее преобразование ) будет именно того что ты укажешь вызовом



Код:

device->SetTransform( ... )
Например
Код:

device->SetTransform( D3DTS_WORLD, &matrix )
Задаст преобразование которое применится к отрисовываемому объекту( device->DrawIndexedPrimitive, device->DrawPrimitive и т.д. )

Преобразование
Код:

device->SetTransform( D3DTS_VIEW, &matrix )
задает дополнительное преобразование вида( камеры ). В DirectX преобразования вынесены в отдельные матрицы, в OpenGL же есть матрицы GL_MODELVIEW - тут две матрицы( видовая и мировая ) уже объединены в одну.

Вообще же приведенный выше код будет работать и для камеры и для объекта.

Для объекта код будет таким, каким я привел его выше.

Для камеры все то же самое, только вызов

Код:

device->SetTransform( D3DTS_WORLD, &out );
Заменяется на

Код:

device->SetTransform( D3DTS_VIEW, &out );
А общий порядок операций примерно такой

Код:

device->SetTransform( D3DTS_WORLD, &worldMatrix );
device->SetTransform( D3DTS_VIEW, &viewMatrix );
device->DrawPrimitive( ... )

В таком варианте при отрисовке задействуются только что установленные матрицы.

Вообще DX и OGL это что-то типа конечного автомата( FFP часть естественно - на то она и Fixed Function Pipeline :-D ). Тоесть задаешь какие-то определенные свойства всему конвееру и видеокарта производит отрисовку именно с такими параметрами.

И да исходника не будет, я для тебя написал приведенный выше кусок кода.

Ну вот вроде и все. Если где ошибся не серчайте.

bersercer26 08.03.2014 10:10

Ответ: Вращение осей координат
 
Спасибо за объяснение...буду разбираться


Часовой пояс GMT +4, время: 12:27.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot