Historique des modifications - Message

Message #9956

Sujet: Problème de gravité irrlicht


Type Date Auteur Contenu
Création du message 06-04-2011 16:40:53 ment0s-
Bonjour à tous,
Etant nouveau dans le monde de la 3D, je suis actuellement un tutoriel sur le siteduzéro.
Actuellement, je suis en train d'essayer de gérer les collisions directement avec irrlicht, sans utiliser de moteur physique (tel que newton, ou bullet).
Je ne sais pas comment expliquer mon problème mais je vais tout de même essayé :
Lorsque j'utilise la fonction createCollisionResponseAnimator(), je met la gravité à -1 pour pas me "balader dans l'espace". Or, le problème qui se pose est que quand je la met à cette valeur, ma caméra recule sans cesse. Lorsque je met cette valeur à 0, la collision entre les murs et la caméra est détecter, mais je ne suis pas on va dire, "cloué au sol".

Voici le code source de mon fichier main.cpp :

Code c++ :


#include <irrlicht.h>
#include <iostream>

using namespace std;
using namespace irr;

int main()
{
    IrrlichtDevice *device = createDevice(video::EDT_OPENGL, core::dimension2d<u32>(640,480), 32);   // 32, true pour le plein ecran
    video::IVideoDriver *driver = device -> getVideoDriver();
    scene::ISceneManager *sceneManager = device -> getSceneManager();
    device -> getCursorControl() -> setVisible(false);
    // La salle :
    scene::IAnimatedMesh *room = sceneManager -> getMesh("room.3ds");
    scene::IMeshSceneNode *Nroom = sceneManager -> addMeshSceneNode(room -> getMesh(0));
    // Desactiver la lumiere :
    Nroom -> setMaterialFlag(video::EMF_LIGHTING,false);
    //  Nombre de repetition de la texture :
    sceneManager -> getMeshManipulator() -> makePlanarTextureMapping(room -> getMesh(0), 0.004f);
    // Choix de la texture :
    Nroom -> setMaterialTexture(0, driver -> getTexture("carrelage.jpg"));
    // Creations de triangles pour la collision :
    scene::ITriangleSelector *selector = 0;
    if (Nroom)
    {
        selector = sceneManager->createOctTreeTriangleSelector(room->getMesh(0), Nroom);
        Nroom->setTriangleSelector(selector);
        selector->drop();
    }
    // Caméra :
    SKeyMap keyMap[5];
    keyMap[0].Action = EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = KEY_KEY_Z;
    keyMap[1].Action = EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = KEY_KEY_S;
    keyMap[2].Action = EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = KEY_KEY_Q;
    keyMap[3].Action = EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = KEY_KEY_D;
    // Camera type FPS :
    scene::ICameraSceneNode *camera = sceneManager -> addCameraSceneNodeFPS(0, 100.0f, 0.3f, -1, keyMap, 5);
    video::SColor color(0,255,255,255);
    // Camera devant la map :
    camera->setTarget(Nroom->getPosition());

    // Detection de la collision sous irrlicht :
    scene::ISceneNodeAnimator *anim = sceneManager->createCollisionResponseAnimator(selector, camera, core::vector3df(1,1,1), core::vector3df(0,0,0), core::vector3df(0,4,0));
    camera->addAnimator(anim);
    anim->drop();
    // Boucle de rendu :
    while(device -> run())
    {
        driver -> beginScene(true, true, color);
        sceneManager -> drawAll();
        driver->endScene();
    }
    device -> drop();
    return 0;
}
 


Voila, je ne sais pas comment faire exactement, et si vous avez compris mon problème.
Bonne soirée à tous wink

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
151 invités en ligne
membre en ligne: -
RSS Feed