Aktuelle Zeit: 15.05.2024, 23:23

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 73 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7  Nächste
Autor Nachricht
BeitragVerfasst: 22.06.2009, 16:36 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Ok, ich bräuchte mal ein wenig Hilfe.
Ich schreibe an einem Minigolf. Hatte die Kollision vorher immer selber ausgerechnet (Ausfallwinkel=Einfallwinkel ;).
Jetzt hab ich aber deinen Wrapper zum laufen gekriegt (Beim IrrNewt gings mir da anders...)

Examples laufen soweit auch. Vom Hello World Example weiß ich ja sogar schon wie ich den Ball geschmiert krieg.
Aber mit der Bahn (die ja statisch ist) tu ich mich schwer. Brauch ich dafür dieses Trimesh?
Da besteht Nachhilfe bedarf ;)

Code:
//Bahnen
BahnenMesh = sceneMgr->getMesh("gfx/Bahn.3ds");
BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh);
//Ball
BallMesh = sceneMgr->getMesh("gfx/Ball.3ds");
BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh);

Wie krieg ich die Physik da jetzt reingewurschtelt?

Hatte schon mehrere Ansätze. Aber mal kam' ne Fehlermeldung oder es passiert einfach nichts...

Hoffe du/ihr kannst/könnt mir da irgendwie helfen.


Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 05:35 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Hi,

danke für deine Hilfe, weitergekommen bin ich aber noch nicht :(
Also dass das Trimesh ein lowpoly Kollisionsmesh hat, habe ich auch schon rausgefunden, aber:
Code:
  ISceneNode *tempNode=smgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),worldNode);

  CIrrOdeBody *TriMeshBody=reinterpret_cast<CIrrOdeBody *>(tempNode);

  TriMeshBody->setPosition(vector3df(10-rand()%21,5*i,0));
  TriMeshBody->setRotation(vector3df(45,0,0));


  IAnimatedMesh *VisualMesh=smgr->getMesh("data/ufo.3ds");
  IAnimatedMeshSceneNode *VisualMeshNode=smgr->addAnimatedMeshSceneNode(VisualMesh,TriMeshBody);

  tempNode=smgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME),VisualMeshNode);

  CIrrOdeGeom *TriMeshGeom=reinterpret_cast<CIrrOdeGeom *>(tempNode);
    TriMeshGeom->getSurfaceParameters()->setBounce(0.5f);
    TriMeshGeom->getSurfaceParameters()->setModeMu2(true);
    TriMeshGeom->getSurfaceParameters()->setModeBounce(true);
    TriMeshGeom->getSurfaceParameters()->setMu(dInfinity);
    TriMeshGeom->getSurfaceParameters()->setMu2(dInfinity);

  IAnimatedMesh *CollisionsMesh=smgr->getMesh("data/ufo_collision.b3d");
  IAnimatedMeshSceneNode *CollisionsNode=smgr->addAnimatedMeshSceneNode(CollisionsMesh,TriMeshGeom);
  CollisionsNode->setMaterialFlag(EMF_WIREFRAME,true);
  CollisionsNode->setMaterialFlag(EMF_LIGHTING,false);


Besagte dummyNode ist hier "tempNode", die anscheinend gebraucht wird um den Body zu definieren, aber nacher ja wieder verworfen wird und eine ganz andere node da steht?

Und zu 2: Guter Tipp, leider gibt mir
Code:
   dBodySetMaxAngularSpeed(dBodyID(pCamBody->getBodyId()),0);

Zitat:
---------------------------
ODE INTERNAL ERROR 2
---------------------------
Bad argument(s) in dBodySetMaxAngularSpeed()
---------------------------
OK
---------------------------

aus :(

Btw: Trimesh Kollision klappt ansich ziemlich gut, solang das Trimesh nicht zu fein ist. So klappt zum Beispiel der Text aus dem Marble Beispiel als Trimesh nicht so gut, da er dauernd durch den Boden fällt, aber andere "grobere" Objekte funktionieren ohne Fehler. Ich habe IrrOde mit ode 0.11.1 für gcc kompiliert.

@blitzbasic303: Zeig doch mal die Ansätze. Ansonsten steht eigentlich alles in den Beispieldateien drin.

MfG
FTC

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 06:44 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Guten Morgen,

@FreetimeCoder: das Ganze ist vielleicht wirklich ein bisschen verwirrend. Vielleicht sollte ich noch ein Tutorial für Trimesh-Kollisionen machen. Na ja, der TempNode ist nicht unbedingt nötig. Das funktioniert so:

- falls ein Trimesh definiert ist wird (wie bei allen Geoms) der Parent fürs Erzeugen des Kollisionsobjekts benutzt
- fall jedoch das Trimesh ein Child hat wird statt des Parents das Child für das Kollisionsobjekt erzeugt

d.h. falls dein Objekt, dessen Child das TrimeshGeom ist, nicht allzu komplex ist, ist es nicht nötig, ein weiteres Child nach dem TrimeshGeom einzubauen. Beim Playground Example hab ich das nur so als Beispiel gemacht. Vielleicht mach ich auch nur ein paar mehr Kommentare in den Code und sorge dafür, dass die Trimeshes abwechselnd mit und ohne Child erstellt werden.

Falls du mit "verworfen" das "->drop()" meinst, das bedeutet nicht, dass der Node gelöscht wird. Irrlicht arbeitet ja Reference-Counted, mit "->drop()" wird dieser Counter nur um 1 verkleinert, dann kann der Scenemanager (sobald auch er den Node nicht mehr braucht und "->drop()" aufruft) den Node entgültig löschen. Diese Methode sollte man aufrufen, wenn man selbst nichts mehr mit dem Node machen will, dann liegt Alles in den Händen des SceneManagers.

das mit dem MaxAngularSpeed hab ich noch nicht getestet, im Zweifelsfall müsstest du nach jedem Step (und da gibts ein IrrOde Event für) die Rotation deiner Kamera entsprechend anpapssen. Ich glaube im "IrrOdeCar" demo benutz ich das "Step" Event, um die Lebensdauer der Kanonenkugeln des Panzers zu steuern.



@BlitzBasic303:

das funktioniert folgendermassen:

Code:
//world node erstellen ... bin gerade in der Arbeit, kann also nicht nachschauen ;).
CIrrOdeWorld *worldNode=...

//ich denke mal, die Bahn ist ein statisches Objekt, also wird der MeshSceneNode direkt hinter den WorldNode gehängt
BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh,worldNode);

//Jetzt erzeugen wir ein Trimesh, das die ODE Repräsentation deiner Bahn ist
CIrrOdeGeomTrimesh=sceneMgr->addceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME,BahnenNode );

//Die Bahn ist damit erledigt, jetzt zum Golfball:
//Der Golfball brauch ein CIrrOdeBody Objekt als Parent, damit er dynamisch wird
CIrrOdeBody *ballBody=sceneMgr->addceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),worldNode);

//danach nur noch den AnimatedMeshSceneNode und ein CIrrOdeGeomSphere für die Kugel reinhängen
BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh,ballBody);
CIrrOdeGeomSphere *ballGeom=(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_GEOM_NAME,BallNode);

//jetzt noch die Parameter setzen, damit das Ganze halbwegs realistisch aussieht
....
//Physik initialisieren
CIrrOdeManager::getSharedInstance()->initODE();
CIrrOdeManager::getSharedInstance()->initPhysics();

//dann noch der Mainloop
while (device->run()) {
  CIrrOdeManager::getSharedInstance()->step();
  //hier den Irrlicht Kram machen
  ...
}


Das ist zwar nur sowas wie Pseudocode, und ich kann das Ganze auch nicht ausprobieren (wie oben schon geschrieben: Arbeit ;) ), aber ich denke, das sollte so in etwa passen.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 12:48 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Auf jeden Fall schonmal nen' dicken Dank!
Aber es kommen noch ein paar Fehler beim Kompilieren die ich irgendwie nicht zuordnen kann.

Code:
76|error: no matching function for call to `CIrrOdeSceneNode::nodeNameToC8(const wchar_t[255], irr::scene::IAnimatedMeshSceneNode*&)'|
note: candidates are: static const irr::c8* CIrrOdeSceneNode::nodeNameToC8(const wchar_t*)|
81|error: invalid conversion from `irr::scene::ISceneNode*' to `CIrrOdeBody*'|
83|error: no matching function for call to `CIrrOdeSceneNode::nodeNameToC8(const wchar_t[255], irr::scene::IAnimatedMeshSceneNode*&)'|
note: candidates are: static const irr::c8* CIrrOdeSceneNode::nodeNameToC8(const wchar_t*)|


Wenn ich jeweils das "BahnenNode" und "BallNode" hinten rausnehme (Was ja da anscheinend nicht hingehört) krieg ich allerdings diese Fehler:
Code:
76|error: invalid conversion from `irr::scene::ISceneNode*' to `CIrrOdeGeomTrimesh*'|
81|error: invalid conversion from `irr::scene::ISceneNode*' to `CIrrOdeBody*'|
83|error: cannot convert `const irr::c8*' to `CIrrOdeGeomSphere*' in initialization|


Sorry, ich komme leider von alleine echt nicht drauf. Ich wette das ist wieder irgendwas total simples...

Ich hab die Zeilen die die Fehler verursachen mal mit Kommentaren markiert.

Code:
  //Bahnen ----------------------------------------------------
  BahnenMesh = sceneMgr->getMesh("gfx/Bahn.3ds");
  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh);

  BahnenNode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
  BahnenNode->setMaterialFlag(EMF_LIGHTING, false);
  BahnenNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BahnenNode->setMaterialFlag(EMF_ANISOTROPIC_FILTER, false);
  BahnenNode->setMaterialFlag(EMF_TRILINEAR_FILTER, false);
  BahnenNode->addShadowVolumeSceneNode();

  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh,irrOdeWorldNode);
  CIrrOdeGeomTrimesh *BahnenTrimesh=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME, BahnenNode)); // Im Code Zeile 76

  //Ball--------------------------------------------------------

  BallMesh = sceneMgr->getMesh("gfx/Ball.3ds");
  CIrrOdeBody *irrOdeBallBody=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode);  // Im Code Zeile 81
  BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh,irrOdeBallBody);
  CIrrOdeGeomSphere *ballGeom=(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_SPHERE_NAME, BallNode));  // Im Code Zeile 83
  BallNode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
  BahnenNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BallNode->setMaterialFlag(EMF_LIGHTING, true);



Sorry nochmal, hoffe du kannst mir nochmal helfen...


UPDATE:

Ich hab mir das so nochmal zusammengebastelt.
Code:
  //Bahnen ----------------------------------------------------
  BahnenMesh = sceneMgr->getMesh("gfx/Bahn.3ds");
  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh);

  BahnenNode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
  BahnenNode->setMaterialFlag(EMF_LIGHTING, false);
  BahnenNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BahnenNode->setMaterialFlag(EMF_ANISOTROPIC_FILTER, false);
  BahnenNode->setMaterialFlag(EMF_TRILINEAR_FILTER, false);
  BahnenNode->addShadowVolumeSceneNode();

  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh,irrOdeWorldNode);
  ISceneNode *BahnenTrimesh=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME),BahnenNode);

  //Ball--------------------------------------------------------

  BallMesh = sceneMgr->getMesh("gfx/Ball.3ds");

  ISceneNode *irrOdeBallBody=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode);
  BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh,irrOdeBallBody);
  ISceneNode *ballGeom=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_SPHERE_NAME), BallNode);
                                     

  BallNode->setPosition(core::vector3df(100,3,-36));
  ballGeom->setPosition(core::vector3df(100,3,-36));
  irrOdeBallBody->setPosition(core::vector3df(100,3,-36));

  BallNode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
  BahnenNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BallNode->setMaterialFlag(EMF_LIGHTING, true);

  BallNode->addShadowVolumeSceneNode();

Kompiliert auch Einwandfrei.
Nur ist der Ball weg wenn ich das ganze Starte ;)
Wenn ich dann in der Hauptschleife das "CIrrOdeManager::getSharedInstance()->step();" rausnehme ist sie da. Kanns sein dass die Kugel jetzt einfach hindurch fällt? Und wie setzte ich die ganzen Physikalischen Merkmale. Denn in den Examples wird der "ballGeom" so erstellt:
Code:
  CIrrOdeGeom *pGeom=reinterpret_cast<CIrrOdeGeom *>(pDummy);
  pGeom->setMassTotal(scale.getLength()/64);

Und da ich "ballGeom" ja als Pointer zu einem ISceneNode habe (Währe das in C++ Fachchinesisch so richtig? xD) kann ich da natürlich nicht setMassTotal drauf anwenden.

Bin da glaub ich echt aufm Holzweg...


Zuletzt geändert von BlitzBasic303 am 23.06.2009, 13:14, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 13:04 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Für Zeile 81 musst du (glaub ich) einen Cast einbauen:

Code:
*irrOdeBallBody=reinterpret_case<CIrrOdeBody *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode));


Bei dem nodeNameToC8 Fehler solltest du ein ")" nach dem Namen des Nodes (z.B. IRR_ODE_GEOM_SPHERE_NAME), ich glaube, die fehlt.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 13:17 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Ok, vom meinem "Update" abgesehen. Hab ich mal alles wieder rückgängig gemacht.
Habs jetzt so:
Code:
  //Bahnen ----------------------------------------------------
  BahnenMesh = sceneMgr->getMesh("gfx/Bahn.3ds");
  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh);

  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh,irrOdeWorldNode);
  CIrrOdeGeomTrimesh *BahnenTrimesh=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME), BahnenNode); // Im Code Zeile 76

  //Ball--------------------------------------------------------

  BallMesh = sceneMgr->getMesh("gfx/Ball.3ds");
  CIrrOdeBody *irrOdeBallBody=reinterpret_case<CIrrOdeBody *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode));
  BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh,irrOdeBallBody);
  CIrrOdeGeomSphere *ballGeom=(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_SPHERE_NAME), BallNode);  // Im Code Zeile 83



da krieg ich dann aber das hier:
Code:
76|error: invalid conversion from `irr::scene::ISceneNode*' to `CIrrOdeGeomTrimesh*'|
81|error: `reinterpret_case' was not declared in this scope|
81|error: expected primary-expression before '*' token|
81|error: expected primary-expression before '>' token|
83|error: cannot convert `irr::scene::IAnimatedMeshSceneNode*' to `CIrrOdeGeomSphere*' in initialization|


Tut mir echt leid wenn ich dich nerve ;)


Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 14:01 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
"reinterpret_case" ist falsch. Heißt (glaub ich) "reinterpret_cast". Musst mal in der C++ Doku (z.B. auf http://www.cplusplus.com/) nachschauen. In Zeile 83 musst du entprechend mit reinterpret_cast<CIrrOdeGeomSphere *>... den IAnimatedMeshSceneNode* auf CIrrOdeGeomSphere* casten.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 23.06.2009, 14:49 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Okay. Ist klar.. Flüchtigkeitsfehler ;)
Ich glaube wir haben es fast :D

Einziges Problem ist noch dass sich der Ball jetzt nicht ab bewegt
Code:
  CIrrOdeSceneNodeFactory irrOdeFactory(sceneMgr);
  sceneMgr->registerSceneNodeFactory(&irrOdeFactory);

  CIrrOdeManager::getSharedInstance()->initODE();

  //set IrrODE's timer
  ITimer *irrOdeTimer=irrDevice->getTimer();
  CIrrOdeManager::getSharedInstance()->setTimer(irrOdeTimer);

  ISceneNode *sceneNode=sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_WORLD_NAME),sceneMgr->getRootSceneNode());
  CIrrOdeWorld *irrOdeWorldNode=reinterpret_cast<CIrrOdeWorld *>(sceneNode);


  //Bahnen ----------------------------------------------------
  BahnenMesh = sceneMgr->getMesh("gfx/Bahn.3ds");
  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh);

  BahnenNode->setMaterialFlag(EMF_NORMALIZE_NORMALS, true);
  BahnenNode->setMaterialFlag(EMF_LIGHTING, false);
  BahnenNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BahnenNode->setMaterialFlag(EMF_ANISOTROPIC_FILTER, false);
  BahnenNode->setMaterialFlag(EMF_TRILINEAR_FILTER, false);

  BahnenNode->addShadowVolumeSceneNode();

  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh,irrOdeWorldNode);
  CIrrOdeGeomTrimesh *BahnenTrimesh=reinterpret_cast<CIrrOdeGeomTrimesh *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME), BahnenNode)); // Im Code Zeile 76

  BahnenTrimesh->setMassTotal(3);
  //Ball--------------------------------------------------------

  BallMesh = sceneMgr->getMesh("gfx/Ball.3ds");

  CIrrOdeBody *irrOdeBallBody=reinterpret_cast<CIrrOdeBody *>(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode);
  BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh,irrOdeBallBody);
  CIrrOdeGeomSphere *ballGeom=reinterpret_cast<CIrrOdeGeomSphere *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_SPHERE_NAME), BallNode));  // Im Code Zeile 83

  BallNode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
  BallNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BallNode->setMaterialFlag(EMF_LIGHTING, true);

  BallNode->addShadowVolumeSceneNode();

  ballGeom->setMassTotal(0.3f);

  ballGeom->getSurfaceParameters()->setBounce(0.1f);
  ballGeom->getSurfaceParameters()->setModeMu2(true);
  ballGeom->getSurfaceParameters()->setModeBounce(true);

  BallNode->setPosition(core::vector3df(100,20.5,-36));
  ballGeom->setPosition(core::vector3df(100,10.5,-36));


  CIrrOdeManager::getSharedInstance()->initPhysics();
  while (irrOdeTimer->isStopped()) irrOdeTimer->start();


Der Ball bleibt einfach auf seiner Position (in der Luft) stehen und fliegt nicht herab...


Nach oben
 Profil  
 
BeitragVerfasst: 24.06.2009, 06:21 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
OK, mal sehen:

hast du in der Hauptschleife CIrrOdeManager::getSharedInstance()->step() eingebaut? Nur dann tut sich was.

Ach ja: Ich denke, die Position des Balls ist noch ein Problem: du musst das beim erste Objekt, also beim Body setzten. Die Positionen der Kinder sind immer relativ zu ihren Eltern, d.h. (wenn ich das richtig sehe) ist die Position des Ball-Bodies noch (0,0,0), der Initialwert, die Position des MeshSceneNodes ist (100,20.5,-36), und die des Geoms ist (100,10.5,-36). Da die Positionen relativ sind wäre die absolute Position des Geoms damit (100,30.5,-72), der Body liegt aber noch auf (0,0,0). Probier das mal aus.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 24.06.2009, 14:05 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Jo das mit dem Step ist drin.

Mhh nur wenn ich den Body verschiebe verschiebt sich irgendwie "die ganze Welt".
Irgendwie merkwürdig.

Code:
  BallMesh = sceneMgr->getMesh("gfx/Ball.3ds");

  CIrrOdeBody *irrOdeBallBody=reinterpret_cast<CIrrOdeBody *>(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode);
  BallNode = sceneMgr->addAnimatedMeshSceneNode(BallMesh,irrOdeBallBody);
  CIrrOdeGeomSphere *ballGeom=reinterpret_cast<CIrrOdeGeomSphere *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_SPHERE_NAME), BallNode));  // Im Code Zeile 83

  BallNode->addShadowVolumeSceneNode();

  ballGeom->setMassTotal(0.3f);

  ballGeom->getSurfaceParameters()->setBounce(0.1f);
  ballGeom->getSurfaceParameters()->setModeMu2(true);
  ballGeom->getSurfaceParameters()->setModeBounce(true);

  irrOdeBallBody->setPosition(core::vector3df(100,10.5,-36));
  //BallNode->setPosition(core::vector3df(100,20.5,-36));
  //ballGeom->setPosition(core::vector3df(100,10.5,-36));


UPDATE: Noch ein bisschen Merkwürdiger.
Code:

//Bahnen ----------------------------------------------------
  BahnenMesh = sceneMgr->getMesh("gfx/Bahn.3ds");
  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh);

  BahnenNode->setMaterialFlag(EMF_NORMALIZE_NORMALS, true);
  BahnenNode->setMaterialFlag(EMF_LIGHTING, false);
  BahnenNode->setMaterialFlag(EMF_GOURAUD_SHADING, true);
  BahnenNode->setMaterialFlag(EMF_ANISOTROPIC_FILTER, false);
  BahnenNode->setMaterialFlag(EMF_TRILINEAR_FILTER, false);

  BahnenNode->addShadowVolumeSceneNode();

  BahnenNode = sceneMgr->addAnimatedMeshSceneNode(BahnenMesh,irrOdeWorldNode);
  CIrrOdeGeomTrimesh *BahnenTrimesh=reinterpret_cast<CIrrOdeGeomTrimesh *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_GEOM_TRIMESH_NAME), BahnenNode)); // Im Code Zeile 76

  BahnenTrimesh->setMassTotal(3);
  BahnenTrimesh->setRotation(core::vector3df(0,0,20));
  BahnenNode->setRotation(core::vector3df(0,0,20));


Wenn ich jetzt also die Bahn rotiere (Damit der Ball da auch Runterrutscht, bzw ich sehe obs funktioniert) dann gibt es die Bahn quasi noch ein mal. Also da ist nochmal die Bahn aber nicht rotiert.
Ich verstehe nun garnichts mehr...


Nach oben
 Profil  
 
BeitragVerfasst: 24.06.2009, 14:28 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Das Erste: hängt vieleicht die Kamera am ball-body? Dann würde sich nicht die Welt verschieben, sondern es würde nur so aussehen. Ich rate jetzt mal.

Zum Zweiten: keine Ahnung, muss ich mir mal anschauen. Ich glaube, dass ich schon ein paarmal Crashes hatte, als ich versucht hab, statische Trimeshes zu drehen.

_________________
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 24.06.2009, 14:31 
Offline

Registriert: 16.08.2007, 15:22
Beiträge: 34
Hatte den Ball nur als LookAt Target. Daran lags aber nicht.
Also es verschiebt sich definitiv das Bahnen Model sowie der Ball.
Also nimmt der BallBody die Bahn irgendwie mit :D

PS: Die hängen doch beide nur zusammen durch den irrOdeWorldNode. Kanns sein dass der iwie verschoben wird?
PS2:
Wenn ich
Code:
CIrrOdeBody *irrOdeBallBody=reinterpret_cast<CIrrOdeBody *>(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode);

zu
Code:
CIrrOdeBody *irrOdeBallBody=reinterpret_cast<CIrrOdeBody *>(sceneMgr->addSceneNode(CIrrOdeSceneNode::nodeNameToC8(IRR_ODE_BODY_NAME),irrOdeWorldNode));


mache verschiebt sich dann nur der Ball. Aber abwärts gehts trotzdem nicht :D


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 73 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de