![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день!
Рисую объекты по следующему коду: Код:
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;Мне необходимо вычислить конечные координаты каждого последующего кубика. Код:
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 |
|
#2
|
||||
|
||||
|
А как жешь это
Цитата:
|
|
#3
|
|||
|
|||
|
Summ - Должна находить, но ненаходт, ну например такая реализация.
Код:
function Summ(QP:TPoint3d;P2:TPoint3d):TPoint3d; begin Result.X:=QP.X+P.X; Result.Y:=QP.Y+P.Y; Result.Z:=QP.Z+P.Z; end; |
|
#4
|
||||
|
||||
|
Да так вообще ошибка должна быть - заявляется параметр P2, а плюсуется какой-то неизвестный P
|
|
#5
|
|||
|
|||
|
Цитата:
Я создаю кватернионы на угол по оси X на 10 градусов = QX (w = 0,9961; x = 0,0871; y = 0; z = 0) на угол по оси Y на 10 градусов = QY (w = 0,9961; x = 0; y = 0,0871; z = 0) на угол по оси Z на 10 градусов = QZ (w = 0,9961; x = 0; y = 0; z = 0,0871) и перемножаю их Q1:=QX*QY*QZ Q1 – получается кватернион первого поворота. (w = 0,9879; x = 0,0940; y = 0,0789; z = 0,0940) Соответственно потом создаю кватернионы для второй группы поворотов на угол по оси X на 10 градусов = QX (w = 0,9961; x = 0,0871; y = 0; z = 0) на угол по оси Y на 10 градусов = QY (w = 0,9961; x = 0; y = 0,0871; z = 0) на угол по оси Z на 10 градусов = QZ (w = 0,9961; x = 0; y = 0; z = 0,0871) и перемножаю их на кватернион первого поворота Q2:=Q1*QX*QY*QZ (w = 0,9521; x = 0,1858; y = 0,1559; z = 0,1858) Получаю из кватерниона Q2 углы X = 11,6920862197876 Y = 7,94708204269409 Z = 11,6920862197876 Умножения соответственно выполняются по правилам умножениям кватернионов |
|
#6
|
|||
|
|||
|
Полностью согласен. Вы правы
|
|
#7
|
|||
|
|||
|
Цитата:
https://drive.google.com/open?id=1Y4...eXc3JELRzVscFE |
|
#8
|
|||
|
|||
|
|