Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.033 c
3-1098692061
starling13
2004-10-25 12:14
2004.11.21
IBDataSet, IBTable


14-1099494164
yanker
2004-11-03 18:02
2004.11.21
Удаление версии файла dll


6-1095235552
SashkoSoft
2004-09-15 12:05
2004.11.21
Передача данных php-скрипту


1-1099657415
Лам :(
2004-11-05 15:23
2004.11.21
Как в ListView сохранить данные


1-1099363557
KisaNetik
2004-11-02 05:45
2004.11.21
резко сам по сибе уменьшился размер проги в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский