OpenGL Кватернионы Поиск конечных углов поворота
Добрый день!
Рисую объекты по следующему коду:
Код:
glPushMatrix;
for I := 0 to 99 do
begin
glColor3f(1,i/255,i/255);
glTranslatef(3,0,0);
glRotatef(10,1,0,0);
glRotatef(10,0,1,0);
glRotatef(10,0,0,1);
RenderBox;//Рисует кубик
end;
glPopMatrix;
При этом с каждой итерацией цикла поворот кубика увеличивается в последовательность X,Y,Z.
Мне необходимо вычислить конечные координаты каждого последующего кубика.
Код:
Var
u:TPoint3d;
Pold:array [-1..99] of TPoint3d;
Uold:array [-1..99] of TPoint3d;
……….
Код:
u.x:=10;
u.y:=10;
u.z:=10;
Pold [-1].X:=0;
Pold [-1].Y:=0;
Pold [-1].Z:=0;
Uold [-1].X:=0;
Uold [-1].Y:=0;
Uold [-1].Z:=0;
for I := 0 to 99 do
begin
glPushMatrix;
glLoadIdentity;
glTranslatef(Pold [i-1].X, Pold [i-1].Y, Pold [i-1].Z);
glRotatef(Uold.X,1,0,0);
glRotatef(Uold.Y,0,1,0);
glRotatef(Uold.Z,0,0,1);
glTranslatef(3,0,0);
glRotatef(u.x,1,0,0);
glRotatef(u.y,0,1,0);
glRotatef(u.z,0,0,1);
Uold [i]:=Summ(Uold [i-1],u);// Функция Summ находет конечные углы поворота.
glGetFloatv(GL_MODELVIEW_MATRIX,@M_M);
Pold [i].X:=M_M[12];
Pold [i].Y:=M_M[13];
Pold[i].Z:=M_M[14];
glLoadIdentity;
glPopMatrix;
end;
for I := 0 to 99 do
begin
glPushMatrix;
glColor3f(i/255,1,i/255);
glTranslatef(Pold [i-1].X, Pold [i-1].Y, Pold [i-1].Z);
glRotatef(Uold[i].X,1,0,0);
glRotatef(Uold[i].Y,0,1,0);
glRotatef(Uold[i].Z,0,0,1);
glTranslatef(3,0,0);
glRotatef(u.x,1,0,0);
glRotatef(u.y,0,1,0);
glRotatef(u.z,0,0,1);
RenderBox;
glPopMatrix;
end;
Координаты положения объекта я могу получить с помощью
Код:
glGetFloatv(GL_MODELVIEW_MATRIX,@M_M);
Pold [i].X:=M_M[12];
Pold [i].Y:=M_M[13];
Pold[i].Z:=M_M[14];
А вот углы поворота найти не могу найти предполагаю, что их вычислить можно используя «Кватернионы». Может ест другие пути?
https://drive.google.com/open?id=1Y4...eXc3JELRzVscFE
|