|
07.03.2014, 18:33
|
#31
|
AnyKey`щик
Регистрация: 03.03.2014
Сообщений: 16
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вращение осей координат
D3DXMATRIX T;
D3DXMATRIX R;
D3DXMatrixRotationY(&R,-80.0f);
D3DXMatrixTranslation(&T,0.0f,0.0f,45.0f);
result=R*T;
|
(Offline)
|
|
07.03.2014, 18:35
|
#32
|
AnyKey`щик
Регистрация: 03.03.2014
Сообщений: 16
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вращение осей координат
Мне нужно чтоб объект ездил во всех направлениях.......спасибо что отозвался
|
(Offline)
|
|
07.03.2014, 18:57
|
#33
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,313 полезных сообщений (для 5,350 пользователей)
|
Ответ: Вращение осей координат
Сообщение от bersercer26
[IMG]C:\Users\Admin\Desktop\tgVP0njBJq8.jpg[/IMG]
|
Ты издеваешься да?
Хотя я в своё время принёс другу вместо игры, кучу ярлыков
Сообщение от bersercer26
|
Что бы картинка сохранилась на форуме, она должна быть хотя бы в одном сообщение и не в тегах картинки, а в тегах прикреплённого файла.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.03.2014, 19:15
|
#34
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Вращение осей координат
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;
/////////////////////////////////////////
__________________
|
(Offline)
|
|
07.03.2014, 22:06
|
#35
|
AnyKey`щик
Регистрация: 03.03.2014
Сообщений: 16
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вращение осей координат
Честно чет не могу разобраться....
|
(Offline)
|
|
07.03.2014, 22:08
|
#36
|
AnyKey`щик
Регистрация: 03.03.2014
Сообщений: 16
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вращение осей координат
/////////////////////////////////////////
// Поворот
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;
/////////////////////////////////////////
Здесь поворот идет камеры, а мне надо фигуры..... можешь весь исходник кинуть, если не трудно я уже запутался.....
|
(Offline)
|
|
07.03.2014, 23:00
|
#37
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Вращение осей координат
Здесь поворот идет камеры, а мне надо фигуры..... можешь весь исходник кинуть, если не трудно я уже запутался.....
|
Ты не прав. Поворот( точнее преобразование ) будет именно того что ты укажешь вызовом
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 ). Тоесть задаешь какие-то определенные свойства всему конвееру и видеокарта производит отрисовку именно с такими параметрами.
И да исходника не будет, я для тебя написал приведенный выше кусок кода.
Ну вот вроде и все. Если где ошибся не серчайте.
__________________
|
(Offline)
|
|
08.03.2014, 10:10
|
#38
|
AnyKey`щик
Регистрация: 03.03.2014
Сообщений: 16
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вращение осей координат
Спасибо за объяснение...буду разбираться
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:26.
|