Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Поворот сцены   Найти похожие ветки 

 
lifo ©   (2004-07-26 01:20) [0]

Как мне правельно повернуть мою сцену ( куб )
Я использую функцию D3DXMatrixRotationYawPitchRoll(&matWorld,y,x,z);
но оно поворачивает его еще под некоторым углом : например если поворачиваем по оси У то оно поворачивает под нек углом к оси ОХ


 
lifo ©   (2004-07-26 10:09) [1]

Блин ну что никто не знает ?????


 
cyborg ©   (2004-07-26 10:15) [2]

Оладьи, может не знают!


 
NailMan ©   (2004-07-26 12:37) [3]

Попробуй такую процедуру

procedure move_object(const yaw, pitch, roll: single;
              var mat: TD3DXMatrix;
              Const SIZE : TD3DXVector3
              );
begin
 right.x := mat._11;
 right.y := mat._12;
 right.z := mat._13;
 up.x := mat._21;
 up.y := mat._22;
 up.z := mat._23;
 dir.x := mat._31;
 dir.y := mat._32;
 dir.z := mat._33;
       D3DXMatrixRotationAxis(mat_yaw, up, yaw);
       D3DXMatrixRotationAxis(mat_pitch, right, pitch);
       D3DXMatrixRotationAxis(mat_roll, dir, roll);
       D3DXVec3TransformCoord(dir, dir, mat_yaw);
       D3DXVec3TransformCoord(right, right, mat_yaw);
       D3DXVec3TransformCoord(dir, dir, mat_pitch);
       D3DXVec3TransformCoord(up, up, mat_pitch);
       D3DXVec3TransformCoord(right, right, mat_roll);
       D3DXVec3TransformCoord(up, up, mat_roll);
       dir := VectorNormalize(dir);
       right := VectorNormalize(CrossProduct(up, dir));
       up := VectorNormalize(CrossProduct(dir, right));
       mat._11 := right.x;
       mat._12 := right.y;
       mat._13 := right.z;
       mat._14 := 0.0;
       mat._21 := up.x;
       mat._22 := up.y;
       mat._23 := up.z;
       mat._24 := 0.0;
       mat._31 := dir.x;
       mat._32 := dir.y;
       mat._33 := dir.z;
       mat._34 := 0.0;
       D3DXMatrixScaling(mat_roll,size.x,size.y,size.z);
       D3DXMatrixMultiply(mat,mat_roll,mat);
end;


2 "Но" по этой процедуре:
- VectorNormalize надо заменить на D3DXVec3Normalize(чуть чуть изменить вид строк в вышеприведенном коде) и CrossProduct на D3DXVec3Cross. В примере используетя моя библиотека, которая более удобна для использования и оптимайзена для нескольких типов процов.
- процедура работает фактически не по абсолютным углам(от начала координат D3D), а по относительным углам(угловым скоростям), тоесть в локальной системе координат объекта.

Для постоянного вращения вокруг какой-то оси можно передавать соответсвенно константный угол. Скажем для постоянног вращения вокруг Z передаешь: move_object(0,0,1, mat, D3DXVector3(1,1,1));
(угол здесь в радинах)

---
WBR, NailMan aka 2:5020/3337.13



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
14-1099537717
Думкин
2004-11-04 06:08
2004.11.21
С днем рождения! 4 ноября


6-1095069742
gunner
2004-09-13 14:02
2004.11.21
Тег <IMG> из бинарника


1-1100011125
Zandrey
2004-11-09 17:38
2004.11.21
Как сохранить экземпляр класса


6-1094827738
redlord
2004-09-10 18:48
2004.11.21
перевод IP адреса в десятичную систему


6-1095185263
-MS-
2004-09-14 22:07
2004.11.21
Delphi+CGI+ServerSocket