Мастер
Регистрация: 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.
|