#1 

28-05-2008 16:54:44

lionelconvent
Membres
Date d'inscription:
Messages: 4
IP: 91.178.113.249
Courriel

bonjour

voici mon code
je ne comprend pas pourquoi il ne marche pas ?

tout se lance, je vois mes 2 mesh mais malheureusement je passe à travers...
un tout grand merci d'avance

Lionel

#include <IRR/irrlicht.h>
#include <IRR/IMetaTriangleSelector.h> 
 
using namespace irr;

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
 
int main(void)
{
 
  //Cette ligne va créer un contexte d'affichage OpenGL
  IrrlichtDevice *device = createDevice (video::EDT_OPENGL, core::dimension2d<s32>(800,600),32,false,true,false,0);
 
  //On associe un driver à la fenêtre
  IVideoDriver* driver = device->getVideoDriver ();
  //Et on crée un gestionnaire de scène (scenegraph)
  ISceneManager *scenegraph = device->getSceneManager ();



//scenegraph->loadScene("map5.irr");

IAnimatedMesh* mesh2 = scenegraph->getMesh("decor.tour_eiffel0.01.b3d");
IAnimatedMesh* mesh3 = scenegraph->getMesh("solmur.b3d");
ISceneNode* node2 = 0;
ISceneNode* node3 = 0;
	if (mesh2)
	{
		node2 = scenegraph->addOctTreeSceneNode(mesh2->getMesh(0));
		node2->setPosition(core::vector3df(100,0,100));
		node2->setMaterialTexture(0, driver->getTexture("sydney.bmp") );
		node2->setMaterialFlag(EMF_LIGHTING, false);
	}
	if (mesh3)
	{
		node3 = scenegraph->addOctTreeSceneNode(mesh3->getMesh(0));
		node3->setPosition(core::vector3df(0,0,100));
		node3->setMaterialTexture(0, driver->getTexture("sydney.bmp") );
		node3->setMaterialFlag(EMF_LIGHTING, false);
		node3->setScale(core::vector3df(10,10,10));		
	}	
	ITriangleSelector* selector = 0;
	ITriangleSelector* selector3 = 0;

		selector = scenegraph->createTriangleSelector(mesh2,node2);
		node2->setTriangleSelector(selector);

		selector3 = scenegraph->createTriangleSelector(mesh3,node3);			
		node3->setTriangleSelector(selector3);

		IMetaTriangleSelector* metaSelector = scenegraph->createMetaTriangleSelector();
		metaSelector->addTriangleSelector(selector);
		metaSelector->addTriangleSelector(selector3); 

ICameraSceneNode * camera1 = scenegraph->addCameraSceneNodeFPS(0,50.0f,60,-1,0,0,true);

if (camera1)
	{ 
		camera1->setPosition(core::vector3df(100,10,0));
		camera1->setRotation(core::vector3df(0,260.0f,0));
	}

device->getCursorControl()->setVisible(false);

		ISceneNodeAnimatorCollisionResponse* anim = scenegraph->createCollisionResponseAnimator(metaSelector, camera1, core::vector3df(5,5,5), core::vector3df(0,0,0), core::vector3df(0,50,0));
		metaSelector->drop();
		camera1->addAnimator(anim);
		anim->drop();


 while (device->run ())
      {
        //On indique qu'on démarre la scène
        driver->beginScene (true, true, video::SColor (1,255,255,255));
        //On calcule le rendu
        scenegraph->drawAll ();
        //On affiche le rendu à l'écran
        driver->endScene ();
     }
     
  //On libère la mémoire en détruisant le device
  device->drop ();
  return 0;
}


Hors ligne


#2 

28-05-2008 17:58:07

lionelconvent
Membres
Date d'inscription:
Messages: 4
IP: 91.178.113.249
Courriel

oups mill excuse, j'avait juste mit des valeur trop petite dans

ISceneNodeAnimatorCollisionResponse* anim = scenegraph->createCollisionResponseAnimator(metaSelector, camera1, core::vector3df(5,5,5), core::vector3df(0,0,0), core::vector3df(0,50,0));
metaSelector->drop();

tout marche nickel

Lionel


Hors ligne


#3 

28-05-2008 18:31:24

lionelconvent
Membres
Date d'inscription:
Messages: 4
IP: 91.178.113.249
Courriel

par contre j'ai une autre question

voila mes parametres

ISceneNodeAnimatorCollisionResponse* anim = scenegraph->createCollisionResponseAnimator(metaSelector, camera1, core::vector3df(1,5,1), core::vector3df(0,-3,0), core::vector3df(0,0,0));

que dois je faire pour qu'il ne monte pas sur les murs (les murs à 90 degrés, il ne les montes pas mais si c'est une mur à 85 degrés il monte dessus...

merci
Lionel


Hors ligne


#4 

28-05-2008 19:12:09

lionelconvent
Membres
Date d'inscription:
Messages: 4
IP: 91.178.113.249
Courriel

peut être est ce mieux d'utiliser newton... mais je préfèrerai dans un 1er temps éviter
merci


Hors ligne


#5 

29-05-2008 04:28:47

nikska
Membres
Date d'inscription:
Messages: 36
IP: 82.239.138.147
Courriel

Une solution que j'envisage de mon coté c'est d'utiliser une line3d qui race une ligne qui part du personnage jusqu'à une certaine distance, pour vérifier qu'il n'y a pas collision avant d'effectuer un mouvement. Il y a peut être une meilleur solution !!


Hors ligne


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
121 invités en ligne
membre en ligne: -
RSS Feed