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

Вниз

OPENGL: Как повернуть ось системы координат на угол.   Найти похожие ветки 

 
DDS   (2003-11-10 07:05) [0]

OPENGL: Как повернуть ось системы координат на угол,
чтобы старые обьекты остались на месте, а новые рисовались
с новым положением осей. А может можно вторую системой координат создать. Если можно, то по подробней...

Не материтесь сильно, я еще только учусь.


 
NailMan ©   (2003-11-10 09:33) [1]

А нафига тебе это делать?

Не проще ли задать матрицу с повернутым положением объекта на нужные углы и по обычному отрисовать его?

Насколько я знаю мировая система координат не может изменяться.


 
DDS   (2003-11-10 16:33) [2]

А как повернуть матрицу?
Вот например:

glGetFloatv(GL_MODELVIEW_MATRIX,@mt);
Что то сделать с матрицей, массив 3x3
glLoadMatrixf(@mt);

И как ее повернуть. Какие то матем. функции применить
к ее элементам что-ли?


 
NailMan ©   (2003-11-11 10:30) [3]

Ну я вот так трансформирую матрицу. Правда пример для D3D приложения, посему некоторые функции тебе придется заменить на OGL аналоги.

procedure move_object(const yaw, pitch, roll: single;    // углы поворота
              var mat: TD3DXMatrix;                     // результат трансформации
              Const SIZE : TD3DXVector3
              );
begin
//Нормализация векторов(исключение SIZE)
 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;


Поворот матрицы относительно локальной системы координат объекта. Углы в радианах. Если матрица единичная, то поворот будет считаться относительно глобальной системы координат(собсно они будут совпадать).

Это функция прямого задания матрицы:
function SetMatrix(const right, up, dir, pos: TD3DVector): TD3DMatrix;
begin
 result._11 := right.x;
 result._12 := right.y;
 result._13 := right.z;
 result._14 := 0;
 result._21 := up.x;
 result._22 := up.y;
 result._23 := up.z;
 result._24 := 0;
 result._31 := dir.x;
 result._32 := dir.y;
 result._33 := dir.z;
 result._34 := 0;
 result._41 := Pos.x;
 result._42 := Pos.y;
 result._43 := Pos.z;
 result._44 := 1;
end;


тут еще надо добавить умножение элементов по диагонали на вектор SIZE. У меня собсно эта функция не используется, но на всякий пожарный есть.


 
Стекляшкин   (2003-11-11 12:40) [4]

- Человек у вас просил средство от кашля, а вы что ему дали?
- Слабительное!
- Где он?
- Вон стоит, кашлянуть боится!

glLoadIdentity();
рисуешь
glRotate( angle, ox, oy, oz );
все что дальше рисуешь будет повернуто на angle


 
DDS   (2003-11-11 17:48) [5]

Спасибо, попробую...



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

Форум: "Игры";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.027 c
14-1081052645
RealRascal
2004-04-04 08:24
2004.05.02
Какой CD-RW + DVD-ROM взять?


7-1078808748
Shark
2004-03-09 08:05
2004.05.02
Delphi и SIEMENS S7


1-1082110912
sapsi
2004-04-16 14:21
2004.05.02
Появление символа подчеркивания при переводе в Pchar


14-1081242454
serge35
2004-04-06 13:07
2004.05.02
Наконец-то азиаты решили написать операционку


1-1082006271
Никита
2004-04-15 09:17
2004.05.02
Использование компонента TWebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский