#0 

23-11-2013 11:09:17

cybrem
Membre
Date d'inscription: 30-07-2012
Messages: 12

Bonjour à tous,
J'ai un problème sur un programme (le cas échéant je ne posterais pas sur cette section ^^) :
Je déplace un node à l'aide d'un CollisionResponseAnimator, et j'y attache ma caméra.
Les collisions fonctionnent, et la gravité est gérée correctement, seulement lorsque j'avance contre le décor,
la caméra se met à trembler, et c'est très désagréable à regarder...
J'ai cherché assez longtemps, mais je ne vois pas comment corriger le problème...
Aussi je vous demande humblement votre aide.

Voici le code, du moins l'essentiel.
Demandez moi s'il vous faut d'autres informations dessus.

Code c++ :


//Je vous épargne l'initialisation de tous les composants...

metaSelector = scene->createMetaSelector();
node1->setTriangleSelector(scene->createTriangleSelectorFromBoundingBox(node1));
metaSelector->addTriangleSelector(node1->getTriangleSelector());
node2->setTriangleSelector(scene->createTriangleSelectorFromBoundingBox(node2));
metaSelector->addTriangleSelector(node2->getTriangleSelector());

node = scene->addMeshSceneNode(scene->getMesh("perso.obj");
anim = scene->createCollisionResponseAnimator(metaSelector, node, node->getBoundingBox().getExtent(), vector3df(0, -1, 0));
node->addAnimator(anim);
camera->setParent(node);

while(device->run())
{
    driver->beginScene(1, 1, SColor(0, 0, 0, 0));

    vector3df pos = node->getPosition();
    vector3df rtt = camera->getRotation();
    pos.X += sin(rtt.Y);
    pos.Z += cos(rtt.Y);
    node->setPosition(pos);

    //CMove est une variable qui stocke les mouvements de la souris
    rtt.X += CMove.Y;
    rtt.Y += CMove.X;
    camera->setRotation(rtt);
    camera->setTarget(vector3df(pos.X + (sin(rtt.Y) * cos(rtt.X)),
    pos.Y + sin(rtt.X), pos.Z + (cos(rtt.Y) * cos(rtt.X))));

    scene->drawAll();
    driver->endScene();
}



J'espère que je n'ai rien oublié d'important.
Merci d'avance pour vos réponses !

Hors ligne


#1 

24-11-2013 17:50:02

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

Bonjour,
Je pense que cela est du à la gravité d'Irrlicht, car quand tu tape dans le mur, il essayer de grimper mais n'y arrive pas a cause de celle ci qui le retient, ça rebondi sur place et donc c'est ce qui te donne cette vibration, mais c'est aussi grâce à cela que tu arriverais a par exemple monté au escalier si la marche n'est pas trop haute. Peu être, dans un premier temps, essaye d'augmenter la graviter en Y (un paramètre a -9.7 est utilisé en général). Mais personnellement, je te conseillerais d'utiliser ta propre gravité plutôt que celle de Irrlicht, qui je trouve me fait des choses assez aléatoire suivant les programmes utilisé et les les différents pc utilisé.


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#2 

01-12-2013 18:22:14

cybrem
Membre
Date d'inscription: 30-07-2012
Messages: 12

Bonjour,
Désolé pour la réponse tardive...
Je vais essayer la solution proposée, et je vous tiendrai au courant.
Merci beaucoup en tout cas pour votre réponse !

Hors ligne


#3 

07-12-2013 09:42:26

cybrem
Membre
Date d'inscription: 30-07-2012
Messages: 12

Bonjour,
Encore toutes mes excuses de ne pas avoir répondu plus tôt.
J'ai essayé d'augmenter la gravité, puis de l'annuler complètement, mais le problème persiste.
Vous n'auriez pas une autre idée, s'il vous plaît ?
Par exemple en essayant de déplacer l'appel du "scene->drawAll();", afin de permettre au moteur de finir ses "calculs" avant de lancer le rendu ?
En effet, il semble que la scène fait son rendu, et que directement après l'animator déplace mon node, ce qui donne ces tremblements.
Merci en tout cas de votre aide !

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
882 membres
1429 sujets
11119 messages
Dernier membre inscrit: LiseBuisson96
8 invités en ligne
Aucun membre connecté
RSS Feed