Physique des véhicules avec dérapage

13

Comment pourrais-je créer une physique de véhicule pour une voiture qui peut perdre sa traction? Je veux qu'il semble que le conducteur ait le pied plat, donc lorsque vous appuyez sur le gaz, les voitures qui conduisent les roues (arrière) perdent leur traction, ce qui le rend un peu difficile à contrôler. J'aimerais aussi pouvoir faire des beignets et "dériver" dans les coins.

Je devrais également savoir combien de "dérapage" se produit, afin que je puisse ajouter une quantité proportionnelle de fumée et de traces de pneus.

Supposons un jeu de voiture de style 2d de haut en bas.

Merci

Adam Harte
la source

Réponses:

10

Il s'agit d'une version très simplifiée mais conviendrait à la plupart des jeux de type arcade. Vous avez besoin des propriétés suivantes:

positionX, positionY - where the car is
velocityX, velocityY - speed on each axis
drag - how fast the car slows down
angle - the rotation of the car, in radians
angularVelocity - speed the car is spinning, in radians
angularDrag - how fast the car stops spinning
power - how fast car can accelerate
turnSpeed - how fast to turn

chaque image:

positionX += velocityX
positionY += velocityY
velocityX *= drag
velocityY *= drag
angle += angularVelocity
angularVelocity *= angularDrag

accélérer

velocityX += sin(angle) * power;
velocityY += cos(angle) * power;

tourner à gauche

angularVelocity -= turnSpeed;

tourner à droite

angularVelocity += turnSpeed;

Pour obtenir une bonne dérive, réglez la traînée et angularDrag sur très proche de 1, par exemple 0,9

Iain
la source
Les commandes seraient donc la puissance (accélérateur) et la vitesse angulaire (direction)? Ou est-ce que je manque une transformation?
drxzcl
non c'est tout - j'ai oublié d'expliquer comment diriger. Avoir mis à jour avec la nouvelle variable turnSpeed.
Iain
2

Je lisais aujourd'hui un article qui simule la dynamique d'un véhicule lors d'une collision et d'un essorage:

Jing Zhou; Jianbo Lu; Huei Peng, "La dynamique du véhicule en réponse à la manœuvre de la technique d'immobilisation de précision", Actes de la conférence ASME Dynamic Systems and Control 2008

Il contient un modèle physique qui représente le moment de renversement et la perte de traction du pneu arrière pendant le lacet causée par une force de collision délibérée. Cela semble intéressant pour les programmeurs de jeux intéressés par la dynamique des véhicules lors des collisions.

Heath Hunnicutt
la source
Assez une étude, mais malheureusement pas adaptée au problème à résoudre. Le papier est une analyse 3D, avec roulis de véhicule et tout. La question concerne le jeu de vue de dessus 2D. Ainsi la physique 2D, pas la 3D.
Bram
1

Je ne recommande généralement pas la physique de Bourg pour les programmeurs de jeux , mais il en parle un peu dans le chapitre 10 (vers la page 171), et pourrait vous donner un point de départ.

Malheureusement, le code du véhicule dans PhysX est toujours un «échantillon» et n'est pas bien documenté, vous ne pouvez donc pas facilement comprendre comment cela fonctionne. Je crois que j'ai vu du code dérivé de leur exemple afficher le type de comportement que vous recherchez en 3D, mais c'est une simulation de niveau inférieur à ce que je pense que vous voulez.

Tom Hudson
la source
1

Les premières choses que vous devez comprendre sont le «taux de glissement» et le «cercle de traction». Le taux de glissement est une bonne approximation du comportement du pneu, avec une relation non linéaire entre la différence d'angle et la force latérale du pneu. Il vous fournit également des informations sur le retour du couple du conducteur (pour le volant à retour de force).

La version super simple des deux concepts est la suivante: plus il y a de différence d'angle entre la direction de roulement et la direction de mouvement, plus il y a de force perpendiculaire à la direction de roulement (force latérale). Il atteint un pic à (généralement) peut-être 5 ° à 8 ° et tombe à partir de là si l'angle des pneus est augmenté.

Le cercle de traction est essentiellement un limiteur qui coupe tout vecteur de force qui le dépasse. Il modélise la façon dont les fortes accélérations / freins réduisent la capacité de direction, et vice versa. La taille du cercle de traction (vecteur de force de traction max) évolue avec la force qui appuie le pneu sur le sol.

Vous devez modéliser la force latérale (direction) séparément du couple de conduite / freinage (rotation) et de la force de traction opposée du sol.

doug65536
la source