Тема: Vehicle Physics
Показать сообщение отдельно
Старый 29.12.2011, 01:44   #1
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Vehicle Physics

Методом тыка и какой-то матери сделал нечто ведущее себя как четырехколесное авто. Т.е. оно приседает как надо если ударить его шариком и гораздо охотней движется в продольном направлении.
Но какого хрена у этого при движении колеса вертятся с нужной скоростью, но не в ту сторону?



class car{
public:
//масса автомобиля.
float mass;
//жесткость пружин
Handle body;
Handle fl,fr,rr,rl;
Handle wh[4];

car(){

makebodycompaund();
xEntityCreateVehicle(body);
xEntityAddWheel(body,fr);
xEntityAddWheel(body,fl);
xEntityAddWheel(body,rr);
xEntityAddWheel(body,rl);
xEntityDisableSleeping(body);
xEntityDisableSleeping (fr);
xEntityDisableSleeping (fl);
xEntityDisableSleeping (rr);
xEntityDisableSleeping (rl);
float height=0.3;
xEntityWheelSetConnectionPoint(body,0,-0.85,height,-1.55);
xEntityWheelSetConnectionPoint(body,1,0.85,height,-1.55);
xEntityWheelSetConnectionPoint(body,2,-0.95,height,1.6);
xEntityWheelSetConnectionPoint(body,3,0.95,height,1.6);

float maxforce=130;
xEntityWheelSetMaxSuspensionForce(body,0,maxforce);
xEntityWheelSetMaxSuspensionForce(body,1,maxforce);
xEntityWheelSetMaxSuspensionForce(body,2,maxforce);
xEntityWheelSetMaxSuspensionForce(body,3,maxforce);

float travel=100.0;
xEntityWheelSetMaxSuspensionTravel(body,0,travel);
xEntityWheelSetMaxSuspensionTravel(body,1,travel);
xEntityWheelSetMaxSuspensionTravel(body,2,travel);
xEntityWheelSetMaxSuspensionTravel(body,3,travel);
float radius=0.38;
xEntityWheelSetRadius(body,0,radius);
xEntityWheelSetRadius(body,1,radius);
xEntityWheelSetRadius(body,2,radius);
xEntityWheelSetRadius(body,3,radius);
float steering=0.0;
xEntityWheelSetSteering(body,0,steering);
xEntityWheelSetSteering(body,1,steering);
xEntityWheelSetSteering(body,2,steering);
xEntityWheelSetSteering(body,3,steering);

float xr=0,yr=-1.0,zr=0;
xEntityWheelSetRay(body,0,xr,yr,zr);
xEntityWheelSetRay(body,1,xr,yr,zr);
xEntityWheelSetRay(body,2,xr,yr,zr);
xEntityWheelSetRay(body,3,xr,yr,zr);

float friction=20.0;
xEntityWheelSetFriction(body,0,friction);
xEntityWheelSetFriction(body,1,friction);
xEntityWheelSetFriction(body,2,friction);
xEntityWheelSetFriction(body,3,friction);

float suspcompr=1.0;
xEntityWheelSetSuspensionCompression(body,0,suspcompr);
xEntityWheelSetSuspensionCompression(body,1,suspcompr);
xEntityWheelSetSuspensionCompression(body,2,suspcompr);
xEntityWheelSetSuspensionCompression(body,3,suspcompr);

float susplen=0.336;
xEntityWheelSetSuspensionLength(body,0,susplen);
xEntityWheelSetSuspensionLength(body,1,susplen);
xEntityWheelSetSuspensionLength(body,2,susplen);
xEntityWheelSetSuspensionLength(body,3,susplen);

float suspdamp=3.0;
xEntityWheelSetSuspensionDamping(body,0,suspdamp);
xEntityWheelSetSuspensionDamping(body,1,suspdamp);
xEntityWheelSetSuspensionDamping(body,2,suspdamp);
xEntityWheelSetSuspensionDamping(body,3,suspdamp);

float suspshift=7.5;
xEntityWheelSetSuspensionStiffness(body,0,suspshift);
xEntityWheelSetSuspensionStiffness(body,1,suspshift);
xEntityWheelSetSuspensionStiffness(body,2,suspshift);
xEntityWheelSetSuspensionStiffness(body,3,suspshift);

float rollinflu=2.0f;
xEntityWheelSetRollInfluence(body,0,rollinflu);
xEntityWheelSetRollInfluence(body,1,rollinflu);
xEntityWheelSetRollInfluence(body,2,rollinflu);
xEntityWheelSetRollInfluence(body,3,rollinflu);

}

void makebodycompaund(){


body=xLoadMesh("mesh/car.b3d");
//xMoveEntity(body,0,10,0);
xEntityAddCompoundShape(body,10);
//botom
xEntityCompoundAddBox(body,2.0,0.8,2.25);
xEntityCompoundChildSetPosition(body,0,0,0.6,0);
//top
xEntityCompoundAddBox(body,1.7,0.5,1.25);
xEntityCompoundChildSetPosition(body,1,0,1.2,0.4);
//front
xEntityCompoundAddBox(body,2.0,0.2,1.25);
xEntityCompoundChildSetPosition(body,2,0,0.9,-1.75);
//xEntityCompoundChildSetRotation(body,2,0,0.015,0);
//kinder of front bumper
xEntityCompoundAddBox(body,2.0,0.55,0.25);
xEntityCompoundChildSetPosition(body,3,0,0.55,-2.3);

//kinder of back bumper
xEntityCompoundAddBox(body,2.0,0.55,0.5);
xEntityCompoundChildSetPosition(body,4,0,0.65,2.3);
//kinder of back 
xEntityCompoundAddBox(body,2.0,0.35,0.9);
xEntityCompoundChildSetPosition(body,5,0,0.95,1.5);



Handle tex=xLoadTexture("mesh/wheel.jpg");
fr=xLoadMesh("mesh/wheel.b3d");
xEntityAddSphereShape(fr,1.0,0.39);
xPositionEntity(fr,-0.85,0.39,-1.55);
xEntityTexture(fr,tex);


fl=xCopyEntity(fr);
xPositionEntity(fl,0.85,0.39,-1.55);
xScaleEntity(fl,-1,1,-1);
xRotateEntity(fl,90,270,0);
xEntityAddSphereShape(fl,1.0,0.39);

rr=xCopyEntity(fr);
xPositionEntity(rr,-0.95,0.39,1.6);
xEntityAddSphereShape(rr,1.0,0.39);

rl=xCopyEntity(fl);
xPositionEntity(rl,0.95,0.39,1.6);
xEntityAddSphereShape(rl,1.0,0.39);
}

void simulate(){

}


};
Где косяк?

кинуть шарик слабо мышь[1], сильно мышь[2]

Последний раз редактировалось dsd, 13.08.2012 в 19:28.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
4yBa4Ok (01.01.2012), LLI.T.A.L.K.E.R. (29.12.2011)