Войти
ПрограммированиеФорумФизика

Управление объектом в Newton

#0
10:01, 23 сен. 2006

Блин совсем замучался. Хочу сделать вид от первого лица. Я создал эллипсоид, чтобы определять столкновения, и поместил туда камеру. Но при попытке переместить эллипсоид, он начинал дико кувыркаться. Тут мне немного помогли, и я нашел команду:
> upDirection := V3(0.0, 1.0, 0.0);
> NewtonConstraintCreateUpVector(NewtonWorld, @upDirection.x, BallBody);
Теперь элипсоид не ворочается и стоит прямо, но передвинуть его уже не возможно. Почему?

Вот кусочек кода:
при иницилизации
> NewtonBodySetForceAndTorqueCallback(BallBody, BallCharacterApplyForceAndTorque);
процедура BallCharacterApplyForceAndTorque
>procedure BallCharacterApplyForceAndTorque(const Body : PNewtonBody); cdecl;
>var
> mass : Single;
> Ixx : Single;
> Iyy : Single;
> Izz : Single;
> Force : TVector;
> Torque : TVector;
> TmpM : TMatrix4f;
> LateralDir : TVector;
> Omega : TVector;
> TorqueDir : TVector;
> TmpS : Single;
> TmpV : TVector;
>begin
>NewtonBodyGetMassMatrix(Body, @mass, @Ixx, @Iyy, @Izz);
>Force := V3(0, -Mass * 19.8, 0);
>NewtonBodySetForce(Body, @Force.X);
>// calculate a rotation matrix from the camera heading
>Matrix_SetIdentity(TmpM);
>LateralDir := VCross(Player.Coordinates, V3(0,1,0));
>TmpS := LateralDir.X*LateralDir.X + LateralDir.Y*LateralDir.Y + LateralDir.Z*LateralDir.Z;
>TmpM[2,0] := LateralDir.X * 1/TmpS;
>TmpM[2,1] := LateralDir.Y * 1/TmpS;
>TmpM[2,2] := LateralDir.Z * 1/TmpS;
>TmpV := VCross(V3(TmpM[1,0],TmpM[1,1],TmpM[1,2]), V3(TmpM[2,0],TmpM[2,1],TmpM[2,2]));
>TmpM[0,0] := TmpV.X;
>TmpM[0,1] := TmpV.Y;
>TmpM[0,2] := TmpV.Z;
>// rotate the torque direction to align with the camera
>TorqueDir := CameraTorqueVector;
>Matrix_RotateVect(TmpM, TorqueDir);
>NewtonBodyGetOmega(BallBody, @Omega.X);
>TmpS := Omega.X*TorqueDir.X + Omega.Y*TorqueDir.Y + Omega.Z*TorqueDir.Z;
>Torque := V3(TorqueDir.X*(Ixx*75) - TorqueDir.X*(2*Ixx*TmpS),
> TorqueDir.Y*(Ixx*75) - TorqueDir.Y*(2*Ixx*TmpS),
> TorqueDir.Z*(Ixx*75) - TorqueDir.Z*(2*Ixx*TmpS));
>NewtonBodySetTorque(BallBody, @Torque.X);
>end;

Я так понимаю все дуло в процедуре BallCharacterApplyForceAndTorque. Но что там нужно исправить - не знаю. Помогите, а то мои нервы не выдержат этого мучения.


#1
18:16, 23 сен. 2006

посмотри на delphigl.de
там много примеров с ньютоном

#2
20:49, 23 сен. 2006

Я там не смог найти ни чего нового. Там есть примеры, не спорю, но на них нет исходников. Так как мне быть?

ПрограммированиеФорумФизика

Тема в архиве.