Бугреев ПЗ (1231492), страница 14
Текст из файла (страница 14)
### Определение позиции тела как вектор во время движения ###
procedure TForm1_.MoveOnward(Obj: TGLSceneObject;
const deltaTime: Double);
begin //Регулировка скорости, за счет Deltatime
Obj.Position.AsVector:=VectorCombine(Obj.Position.AsVector, Obj.Up.AsVector, 1, deltaTime/20);
end;
### Смещение тел, на одну точку на сплайне ###
procedure TForm1_.Button1Click(Sender: TObject);
begin
B:=(GLLines1.Nodes[i+1].Z-GLLines1.Nodes[i-1].Z)/2;
C:=(GLLines1.Nodes[i+1].X-GLLines1.Nodes[i-1].X)/2;
Cube2.Direction.asVector:=VectorMake(C,0,B);B:=GLLines1.Nodes[i+1].Z+GLLines1.Nodes[i-1].Z;
C:=GLLines1.Nodes[i+1].X+GLLines1.Nodes[i-1].X; PX:=C/2; PZ:=B/2;
Cube2.Position.X:=PX; Cube2.Position.Z:=PZ; B:=(GLLines1.Nodes[i].Z-GLLines1.Nodes[i-2].Z)/2;
C:=(GLLines1.Nodes[i].X-GLLines1.Nodes[i-2].X)/2; C2.Direction.asVector:=VectorMake(C,0,B);
B:=GLLines1.Nodes[i].Z+GLLines1.Nodes[i-2].Z;C:=GLLines1.Nodes[i].X+GLLines1.Nodes[i-2].X;
PX:=C/2; PZ:=B/2; C2.Position.X:=PX; C2.Position.Z:=PZ; Inc(i);
end;
### Назначение векторов движущимся телам при создании формы ###
procedure TForm1_.FormCreate(Sender: TObject);
begin
i:=2;B:=GLLines1.Nodes[i+1].Z-Cube3.Position.Z; C:=GLLines1.Nodes[i+1].X-Cube2.Position.X;
Cube2.Direction.asVector:=VectorMake(C, 0,B);
Cube2.LoadFromFile(GetCurrentDir+'\Models\loko.3ds');
C2.LoadFromFile(GetCurrentDir+'\Models\pass.3ds');
B:=GLLines1.Nodes[i+1].Z-DCC2.Position.Z; C:=GLLines1.Nodes[i+1].X-C2.Position.X;
C2.Direction.asVector:=VectorMake(C, 0,B);
end;
### Запуск непрерывного движения по сплайну ###
procedure TForm1_.Button2Click(Sender: TObject);
begin
N:=i-1; sv:= Cube2.Position.asVector; sv1:= C2.Position.asVector;
B:=(GLLines1.Nodes[i+1].Z-GLLines1.Nodes[i-1].Z)/2;
C:=(GLLines1.Nodes[i+1].X-GLLines1.Nodes[i-1].X)/2; sd:= Cube2.Direction.asVector;
B:=(GLLines1.Nodes[N+1].Z-GLLines1.Nodes[N-1].Z)/2;
C:=(GLLines1.Nodes[N+1].X-GLLines1.Nodes[N-1].X)/2; sd1:= C2.Direction.asVector; sl:=1;
end;
### Организация возможности вращения камеры во время работы в программе ###
procedure TForm1_.GLSceneViewer1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
mx:=x; my:=y;
end;
procedure TForm1_.GLSceneViewer1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if Shift<>[] then begin GLCamera1.MoveAroundTarget(my-y, mx-x);
mx:=x; my:=y;
end;
end;
procedure TForm1_.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
GLCamera1.AdjustDistanceToTarget(Power(1.1, WheelDelta / 120));
end;
procedure TForm1_.Button3Click(Sender: TObject);
begin
N:=i-1; sv:= Cube2.Position.asVector; sv1:= C2.Position.asVector;
B:=(GLLines1.Nodes[i+1].Z-GLLines1.Nodes[i-1].Z)/2;
C:=(GLLines1.Nodes[i+1].X-GLLines1.Nodes[i-1].X)/2;sd:= Cube2.Direction.asVector;
B:=(GLLines1.Nodes[N+1].Z-GLLines1.Nodes[N-1].Z)/2;
C:=(GLLines1.Nodes[N+1].X-GLLines1.Nodes[N-1].X)/2;sd1:= C2.Direction.asVector;
end;
### Организация движения камеры по нажатию клавиш направления ###
procedure TForm1_.FormKeyPress(Sender: TObject; var Key: Char);
begin
with GLCamera1 do case Key of
'2': MoveAroundTarget(3, 0); '4': MoveAroundTarget(0, -3); '6': MoveAroundTarget(0, 3);
'8': MoveAroundTarget(-3, 0);'-':AdjustDistanceToTarget(1.1); '+': AdjustDistanceToTarget(1 / 1.1);
end;
end;
end.
83















